pyenvとvirtualenvを使用してPythonの開発環境を構築する

今回は pyenv と virtualenv で Python の開発環境を構築する方法について説明します。pyenv と virtualenv を使うことで、複数の Python のバージョンを共存させたり、環境ごとにパッケージを管理したりすることができます。

pyenv とは

pyenv は複数の Python のバージョンを簡単に切り替えることができるライブラリです。Python では Python 2.x 系 と Python 3.x 系 の2つの系統が主流として使われています。3.x 系は後方互換がなく、2.x 系のプログラムは動作しない可能性があります。

しかし、プロジェクトによっては異なるバージョンを扱わなければならない場合があります。このような場合に役立つのが pyenv です。

pyenv のインストール

Max OS X の場合は Homebrew を使ってインストールすることができます。ターミナルで以下のコマンドを実行してください。

$ brew update
$ brew install pyenv

Linux 系や Mac で Homebrew を使用できない場合は、 curl コマンドを使ってインスールします。brew でインストールした場合は、こちらのコマンドを実行する必要はありません。

$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

インストールが完了したら、 以下コマンドを実行してください。

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

pyenv コマンドが使用できるようになっているか確認します。

$ which pyenv
/Users/username/.pyenv/bin/pyenv

これで pyenv のインストールは完了です。

pyenv に Python をインストール

早速 pyenv に Python をインストールしてみます。今回は例として Python 3.5.1 と Python 2.7.11 をインストールします。インストールには少し時間がかかるかもしれません。

$ pyenv install 3.5.1
$ pyenv install 2.7.11

インストールが完了したら、使用する Python のバージョンを pyenv global コマンドで指定します。

$ pyenv global 3.5.1

これで Python 3.5.1 が使用できるようになりました。

$ python -V
python 3.5.1

バージョンを確認してみると指定した Python のバージョンが表示されていることが確認できます。 pyenv global で簡単に別のバージョンを切り替えることができます。

$ pyenv global 2.7.11
$ python 2.7.11

pyenv global コマンドの場合は、すべてのディレクトリで指定した Python のバージョンが有効になります。pyenv local を使うことでディレクトリごとに使用する Python のバージョンを切り替えることができます。

$ mkdir python3
$ cd python3
$ pyenv local 3.5.1

上のコマンドを実行すると python3 ディレクトリ内でのみ Python 3.5.1 が有効になります。このディレクトリ以外は global で指定したバージョンが自動的に有効になります。

インストールした Python を調べる場合は、pyenv version コマンドを使用してください。

$ pyenv versions
  system
  2.7.11
* 3.5.1 (set by /Users/username/python3/.python-version)

virtualenv

pyenv だけでも非常に便利ですが、virtualenv を使うことで Python の環境(仮想環境)を作成することができ、より柔軟に環境の切り替えができるようになります。

pyenv を使用する場合、 pip install などで導入したパッケージは Python のバージョンごとに管理されます。virtualenv を使うことで、 新たに環境を作成でき、同じ Python のバージョンでも別々のパッケージを使用することができます。

virtualenv のインストール

Max OS X の場合は Homebrew を使ってインストールすることができます。ターミナルで以下のコマンドを実行してください。

$ brew update
$ brew install pyenv-virtualenv

Linux 系や Mac で Homebrew を使用できない場合は、 GitHub からインストールします。brew でインストールした場合は、こちらのコマンドを実行する必要はありません。

$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

インストールが完了したら、 以下コマンドを実行してください。

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

これで virtualenv のインストールは完了です。

virtualenv で Python の仮想環境を構築する

pyenv virtualenv コマンドで Python のバージョンと環境名(環境のディレクトリ名)を指定します。今回は例として2つの仮想環境を作ってみます。

$ pyenv virtualenv 3.5.1 projectA
$ pyenv virtualenv 3.5.1 projectB

このコマンドを実行すると ~/.pyenv/versions/projectA, ~/.pyenv/versions/projectB というディレクトリが作成され、pyenv の環境として指定できるようになります。

Python の環境を projectA に切り替えて pip でパッケージをインストールしてみましょう。

$ pyenv local projectA
$ pip install --upgrade pip
$ pip install requests
$ pip list
pip (8.1.2)
requests (2.10.0)
setuptools (18.2)

別の環境に切り替えてインストールされているパッケージ一覧を確認してみます。

$ pyenv local projectB
$ pip list
pip (8.1.2)
setuptools (18.2)

先ほど projectA の環境でインストールした requests パッケージが見つかりません。このように、virtualenv を使うことで同じバージョンの Python でもパッケージ管理ができるようになりました。

最後に、 作成した Python 環境の削除は pyenv uninsall コマンドを使用します。

$ pyenv uninstall projectA
$ pyenv uninstall projectB

まとめ

python のプログラムはバージョンによって動作しない可能性があります。pyenv とvirtualenv を使用すればこのような問題にも柔軟に対応することができます。


イベント

2017/12/05(火)
Design Thinking Square