HOME/Articles/

pyenvのインストール

Article Outline

システムのpythonのバージョンを変更したり、モジュールの変更をしたりするとシステム上のスクリプトの動作に影響が出る場合があるので、pyenvで個別のpython環境を構築するのがベター。
さらに、virtualenvプラグインを使うと、同じpythonのバージョンでもそれぞれに別のモジュールをインストールできる、仮想環境を構築できる。

なお、pyenvはpythonをバイナリインストールできなくて、ソースからコンパイルするので、インストールにはそれなりに時間がかかる(RasPi2で1~2時間くらい?)。

インストール

準備

インストールに必要なモジュールをインストールする。

sudo apt install git libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

python 3.7.x 以降をインストールする場合は以下も必要。

sudo apt install libffi-dev

Ubuntu 18.04では以下も必要。

sudo apt install zlib1g-dev 

pyenv本体とvirtualenvプラグインのインストール

pyenv本体とvirtualenvプラグインをインストール。

export PYENV_ROOT=/work/.pyenv    #環境に合わせて修正してね
git clone https://github.com/yyuu/pyenv.git ${PYENV_ROOT}
git clone https://github.com/yyuu/pyenv-virtualenv.git ${PYENV_ROOT}/plugins/pyenv-virtualenv
git clone git://github.com/pyenv/pyenv-update.git ${PYENV_ROOT}/plugins/pyenv-update

pyenv-updateをインストールすることで、pyenv本体、各プラグインを pyenv update で行えるようになる。

~/.bashrcの編集

pyenvの設定のため、~/.bashrc に以下を追加。

export PYENV_ROOT=/work/.pyenv    #環境に合わせて修正してね
export PATH=$PYENV_ROOT/bin:$PATH
# 仮想環境名をプロンプトに表示しない場合は以下を有効化
# export VIRTUAL_ENV_DISABLE_PROMPT=1
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

ここで設定を有効にするためにターミナルを開きなおす。

設定

pyenvでインストールできるバージョンの一覧を表示

pyenv install --list 

pythonのインストール

pyenv install 3.6.4

・・・ 気長に待つ。 ・・・

デフォルトで使用するバージョンの設定

pyenv global 3.6.4

念のため指定したバージョンが実行されることを確認

python -V

仮想環境の構築

色々試したあとに、インストールしたモジュールをチャラにしたいときを考えて、仮想環境を構築しておく。
ここでは、python 3.6.4を使用して 仮想環境名 mypython を作成。

pyenv virtualenv 3.6.4 mypython

デフォルトをmypythonに変更する場合は以下を実行

pyenv global mypython

pipのバージョンアップ

「pipが古い~」と言われる前にバージョンアップ。

pip install --upgrade pip

IMPORTANT

ベース環境をバージョンアップしても、仮想環境に引き継がれないので、仮想環境毎に実行が必要。

ローカルバージョンの設定

ディレクトリ毎に使用するバージョンを指定するには(例えば、このディレクトリ下で作業するプロジェクトは3.4.1を使う、みたいな時)
そのディレクトリで以下のように実行する。
指定はそのディレクトリ直下だけでなく、その子ディレクトリ、孫ディレクトリ、・・・で有効。
shellを閉じても設定は残る。

pyenv local <バージョン名 or 仮想環境名>

一時的なバージョンの切り替え

そのshellだけ使用するバージョンを変更したい場合は、以下のよう実行する。

pyenv shell <バージョン名 or 仮想環境名>

別のターミナルでの実行には影響しない。

I2Cを使用する場合(RasPi)

RaspberryPi環境で、I2Cを使うためのsmbusモジュールは、通常 sudo apt install python3-smbus でインストールするが、これだとpyenv環境にインストールできない。
これはsmbus2をインストールして使用することで回避できる。 インストールは以下のように実行する。

pip install smbus2

ちなみに、pyenv 環境へのモジュールのインストールには sudo は不要。/usr 下へのインストールではないので。

で、プログラムソース側はsmbusのインストール部分を以下のように修正。

try:
    import smbus
except ImportError:
    import smbus2 as smbus

smbus2 だけにしても良いけど、smbus でも動作できるようにしておくのがベターかな。

pyenvのバージョンアップ

pythonの新しいバージョンがリリースされ、それをインストールしたい場合など、pyenvのバージョンアップが必要。

pyenv-updateが入っていれば以下でイッパツ。

pyenv update

pyenv-updateが入っていない場合は以下のように各ディレクトリで git pull すればよい。

cd ${PYENV_ROOT}
git pull

cd ${PYENV_ROOT}/plugins/pyenv-virtualenv
git pull

その他

ちょっとだけ使い方一覧。

システムのpythonを使いたい場合は以下のように実行

pyenv [global | local | shell] system

現在の状態で使用されるバージョン/仮想環境を確認

pyenv version

pyenvでインストールされているpythonのバージョン/仮想環境を確認

pyenv versions 

現在の状態で使用されるバージョンの先頭に「*」 が付く。

pyenv自体のバージョン確認

pyenv --version

pyenvで使用できるコマンドの確認

pyenv commands