Python: Python2 と Python3 の共存開発環境を pyenv/virtualenv で作成する

今回は Python2 と Python3 の共存開発環境を作成する手順を紹介します。

私が使っている Ubuntu 14.04.1 の VM には default で Python 2.7.6 がインストールされています。

$ uname -a
Linux virl 3.19.0-72-generic #80~14.04.1-Ubuntu SMP Fri Oct 14 14:43:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ python -V
Python 2.7.6

ただ、Python の勉強をするにもこれからは Python3 が確実に良いです。と言っても Python2系も入っていたら、入っていたで便利なので共存させる方法を紹介します。

pyenvのインストールと使い方

pyenv を使って、異なる Python バージョンをインストールし、切り替えることが容易にできるようになります。Python2 及び Python3 の両方を勉強している、両方のバージョンで開発を行っているという人には pyenv での切り替えは非常に便利です。

pyenv のインストール

まずは pyenv を git で cone します。手順は GitHub 上の README にあるのと同様です。

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
Cloning into '/home/virl/.pyenv'...
remote: Counting objects: 15004, done.
remote: Compressing objects: 100% (61/61), done.
remote: Total 15004 (delta 52), reused 70 (delta 39), pack-reused 14903
Receiving objects: 100% (15004/15004), 2.70 MiB | 276.00 KiB/s, done.
Resolving deltas: 100% (10271/10271), done.
Checking connectivity... done.

環境変数などを ~/.bash_profile に追記します。

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

shell の設定を読み込み直します。

$ source ~/.bash_profile

pyenv を使って最新の Python2.7.13/Python3.6.1 をインストール

本日現在で最新の Python2.7.13 及び Python3.6.1 を pyenv を使ってインストールします。

$ pyenv install 2.7.13
Downloading Python-2.7.13.tar.xz...
-> https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
Installing Python-2.7.13...
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Installed Python-2.7.13 to /home/virl/.pyenv/versions/2.7.13

$ pyenv install 3.6.1
Downloading Python-3.6.1.tar.xz...
-> https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
Installing Python-3.6.1...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Installed Python-3.6.1 to /home/virl/.pyenv/versions/3.6.1

現在のシェルで Python バージョンを pyenv で指定する

現在開いているシェルの Python バージョンを変更するには、pyenv shell コマンドを使います。

まずは現在の Python バージョンを確認します。

$ python -V
Python 2.7.6

デフォルトの Python2.7.6 になっています。これを先ほどインストールした Python2.7.13 へ変更します。

$ pyenv shell 2.7.13
$ python -V
Python 2.7.13

pyenv shell での切り替えは、シェルを終了して再度シェルを開いた場合には元(Python2.7.6)に戻ってしまいます。

ディレクトリ事に Python バージョンを pyenv で指定する

Python で開発をしている時にディレクトリ事に Python のバージョンを変えたいという場合には pyenv local コマンドを該当のディレクトリで実行することでバージョンを指定することが可能です。

$ mkdir dev2
$ cd dev2 
$ pyenv local 2.7.13
$ python -V
Python 2.7.13
$ cd ..
$ mkdir dev3
$ cd dev3
$ pyenv local 3.6.1
$ python -V
Python 3.6.1

pyenv local で設定した場合にはシェルを閉じても設定は残っており、再度該当ディレクトリに行けば、pyenv local で指定したPythonバージョンを使うことができます。

virtualenv のインストールと使い方

前述の pyenv では Python のバージョン切り替えができるものとして紹介をしましたが、virtualenv ではそのバージョン事に仮想環境を作成し、仮想環境事にパッケージをインストールすることが可能になります。これにより、仮想環境A では module 1.1 をインストールし、仮想環境B では module 2.1 をインストールしてテストを行うといったことが可能になります。

virtualenv のインストール

git clone コマンドで pyenv-virtualenv をインストールします。

$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
Cloning into '/home/virl/.pyenv/plugins/pyenv-virtualenv'...
remote: Counting objects: 1871, done.
remote: Total 1871 (delta 0), reused 0 (delta 0), pack-reused 1871
Receiving objects: 100% (1871/1871), 533.10 KiB | 305.00 KiB/s, done.
Resolving deltas: 100% (1281/1281), done.
Checking connectivity... done.

そして .bash_profile へ設定を追加します。

$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

.bash_profileを再読み込みします。

$ source ~/.bash_profile

pyenv + virtualenv での仮想環境の作成と有効/無効化

仮想環境の作成には pyenv コマンドを使い、virtualenv の後に Pythonのバージョン、仮想環境名を入力します。

$ pyenv virtualenv 3.6.1 test_3.6.1
Requirement already satisfied: setuptools in /home/virl/.pyenv/versions/3.6.1/envs/test_3.6.1/lib/python3.6/site-packages
Requirement already satisfied: pip in /home/virl/.pyenv/versions/3.6.1/envs/test_3.6.1/lib/python3.6/site-packages 

仮想環境を有効にするには、仮想環境名を指定して下記コマンド実行します。仮想環境に入るとプロンプトに仮想環境名が表示されるので、今現在仮想環境にいるということが分かるようになります。

$ pyenv activate test_3.6.1
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
(test_3.6.1) $

この仮想環境内で pip install でインストールしたものは、この仮想環境内のみで有効になります。

(test_3.6.1) $ pip install tabulate
Collecting tabulate
  Downloading tabulate-0.7.7-py2.py3-none-any.whl
Installing collected packages: tabulate
Successfully installed tabulate-0.7.7

仮想環境を出るには source deactivate コマンドを入力します。仮想環境を出るとプロンプトが通常に戻ります。

(test_3.6.1) $ source deactivate
pyenv-virtualenv: deactivate 3.6.1/envs/test_3.6.1
virl@virl:~$

仮想環境を出た状態では、先ほど仮想環境でインストールしたモジュールが存在しないことが確認できます。

$ pip list | grep tabulate
$

まとめ

今回は Python バージョンを切り替える pyenv と仮想環境を作り、仮想環境事にパッケージ管理ができる virtualenv を組み合わせて使う方法を紹介しました。

Python で開発を行っている場合には、まだ Python 2系及び3系の両方の環境が必要だったり、同じパッケージでも依存関係などで異なるバージョンをインストールしてテストしたい場合などには pyenv + virtualenv を使うことで非常に効率良くテストや開発ができます。

まだまだ pyenv + virtualenv で便利な使い方はありますが、まずは上記で仮想環境での開発をスタートができるのではないかと思います。

ではでは。

スポンサーリンク