自由帳

とりとめのない学習メモです。主に Web サービスのシステム基盤や運用に関することを書いています

Python の環境構築ツールはどれを使うのが良いのか

Pythonの仮想環境構築とかバージョン管理するツールって何かいろいろありますが、結局何を使うのが良いのだろうか・・・と考えてみました。

Python環境構築関連ツール

Python 環境構築 [検索] とかやると、いろんなツールの情報が出てきます。 似たような名前のものが多くて最初は違いがよ~わからんってなります・・・というかなりました。 主なツールと超簡単な概要は以下のような感じかなと思います。

  • virtualenv Pythonの仮想環境構築ツールvirtualenv -p [使うバージョンのPythonのPATH] [仮想環境ディレクトリ名] で指定した仮想環境ディレクトリ配下に指定した Python 実行環境を作成できるツール。
  • virtualenvwrapper virtualenvでの仮想環境の管理(作成とか切り替えとか削除とかの操作をラップしている)を手軽にできるようになるツール。
  • venv 同じくPython仮想環境構築ツール。Virtualenv相当のツールを Python3 で標準モジュールとして取り入れたもの。Virtualenv と大体同じような使い方ができる。Python2系では使えない。
  • pyvenv 同じくPython仮想環境構築ツールPython 3.3および 3.4 で推奨だった。内部的には venv モジュールがインポートされている。Python 3.6で廃止。
  • pyenv Pythonのバージョン管理ツール。いろんなバージョンのPythonをインストールしたり、使うバージョンを手軽に切り替えたりといったことができる管理ツール。
  • pyenv-virtualenv pyenvのプラグイン。pyenvでインストールしたPythonを使って手軽に仮想環境を作れるようになる。 pyenv virtualenv [Pythonバージョン] [仮想環境ディレクトリ名] でpyenvでインストールした指定のバージョンのPython実行環境を指定した仮想環境ディレクトリ配下へ作成できる (≒ virtualenv -p [使うバージョンのPythonのPATH] [仮想環境ディレクトリ名])

結局何を使えば良いのか

間違われやすいかもしれませんが、venvやvirtualenvなどの仮想環境ツールというのは、Pythonのバージョンを切り替えるツールではなく、同一バージョンのPythonの中で、ライブラリの実行環境を複数構築して、切り替えることができるツールであるということです。

で、環境構築ツールですが、何を使うかはケースバイケース・・・と言ってしまうとそれまでですが、仮想環境構築してしまえばあとはよしなにできるので、Python3系のみの環境なら venv 使えば良いかなと思います。公式ドキュメントでも推奨されているので、今はこれが良いのかなと思ってます。 Python2系のみ、またはPython2系と3系を混在させる必要がある場合は venv は使えないので virtualenv を使います。

Python自体はpyenv使って手軽にインストールできますが、最近はUbuntu 16.04を使っていて、Ubuntu 16.04にはPython2系(2.7),3系(3.5)両方のパッケージがあり、標準で比較的新しいバージョンのPythonが使えるので、あまり面倒なことをせずPython自体はパッケージのものを使うことも多いです。venv or virtualenv で別途仮想環境を作るためだけに使うのでまぁ問題ないかなと思ってます。 RHEL系とかだとPythonのパッケージが古いので必要なバージョンをソースビルドするか、pyenv使ったりしてます。 その他のツールはお好みで良いのかな〜と思ってます。

Python自体のバージョン管理をしたい場合は pyenv を使えば良いのでないかと思います。

※venvの使い方

仮想環境作成

$ python3 -m venv /path/to/new/venv_name   ※/path/to/new/venv_nameには好きなPATHを指定します。

仮想環境有効化

$ cd /path/to/new/venv_name
$ source bin/activate

仮想環境無効化

(${venv_name})$ deactivate

まとめ

Pythonの仮想環境構築ツールにどれを使うのが良いのか考えてみました。 今の所自分としてはPython3系のみの環境なら venv, Python2系なら virtualenvが良いのかなと思います。