今回は 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 で便利な使い方はありますが、まずは上記で仮想環境での開発をスタートができるのではないかと思います。
ではでは。