Python の環境構築方法は venv, virtualenv, Anaconda などいろいろあると思いますが、どのように使い分けるか。Python 3.6 時代(2018年2月時点)における私なりの考えをまとめてみました。macOS 環境を想定しています。
使い分ける指針
基本原則
バージョン
原則、Python 3 を使うようにします。
Python 2 はサポートされるのが 2020 年まで。Python3 だとどうしても対応できない時だけ使い、極力使わないようにします。
システムにデフォルトでインストールされている Python
パッケージ追加などの変更作業はしないようにし、極力汚さないようにします。理由は、システムが使用している Python に悪影響を与えることを避けるためです。仮想環境を作成し、仮想環境内でパッケージの管理を行います。
各環境構築方法の使い分け
前提として、OS の Python をインストール状況は次の通りとします。
- Python 2.7.x がプレインストールされているものとします。
- OS のパッケージマネージャで Python 3.6.x を入れておきます。
// macOS の場合。新規インストール
$ brew install python3
// 最新版にアップグレード
$ brew upgrade python3
venv, virtualenv, Anaconda の使い分けは次の通りにしています。
- Python 3.6.x を使う場合は、Python 3.6.x の venv を使って仮想環境を作成します。
- Python 2.7.x を使う場合は、virtualenv を使って仮想環境を作成します。
- Anaconda は Docker 化します。Python 2.7.x, 3.6.x 以外を使いたい場合は、それ用の Anaconda コンテナイメージを作成します。
では、どうして上記の使い分けにしているのか?
各環境構築方法の特徴を見ながら説明していきます。
Python3.6 の venv
環境構築方法の中でこれを優先して使うのは、Python の世界での標準的な方法になるべく従うため。Pythonチュートリアルでも venvが紹介されています。以下、venv の位置づけを示すために公式マニュアルから引用します。
Python 3.3 と 3.4 では、仮想環境の作成に推奨していたツールは pyvenv でしたが、Python 3.6では非推奨です。
バージョン 3.5 で変更: 仮想環境の作成には、 venv の使用をお勧めします。
PEP 405: Virtual Environments
仮想環境(Virtual environment)は隔離されたPython環境を作成する手助けをします。...(略)... このコンセプトと実装は、人気のサードパーティパッケージである virtualenv を元にしていますが、インタプリタコアとの統合による恩恵を受けています。この PEP はプログラムからのアクセス用の venv モジュールと、コマンドラインからのアクセスと管理向けの pyvenv スクリプトを追加します。
出来ること
- 仮想環境ごとに pip パッケージの管理を切り出せる
出来ないこと
- Python 自体のバージョン切り替え
使い方
// 環境名
$ python3 -m venv 仮想環境名
// 環境の有効化
$ source 仮想環境名/bin/activate
(仮想環境名) $ python --version
Python 3.6.4
// 環境の無効化
(仮想環境名) $ deactivate
virtualenv
venv だと、Python 2.7.x を使えないので、その対応のために virtualenv を使います。
virtualenv が出来ること
- Python のバージョンを指定できる(既にインストールされているもののみ)
- 仮想環境ごとに pip パッケージの管理を切り出せる
使い方
// virtualenv をインストールする。
// OS の pip3 でインストールするのは virtualenv だけにする。
$ pip3 install virtualenv
// Python バージョンを指定して仮想環境を作る場合は --python で指定する。
// 最後の python2.7.14 は仮想環境名。任意の名前で良い。
$ virtualenv --python=/usr/local/bin/python2.7 python2.7.14
Anaconda
便利なソフトなのですが、独自のディストリビューションなのと、一部システムコマンドのパスを覆い隠すデメリットがあるので、Docker で対応しています。
メリット
- データサイエンス系のパッケージや JupyterLab など便利なツール群が初めから入っている。
- conda コマンドで仮想環境を柔軟に作成できる。Python バージョンの指定も可能。
デメリット
- Python だけでなく、Anaconda が内蔵している多数のコマンドへのパスが通ってしまう。
インストール方法
Docker 環境で使う場合は、「Anaconda の JupyterLab を Docker で使う」で記事にしてみました。
Docker を使わない場合は、公式ドキュメントをご参照ください。インストーラをダウンロードし、インストーラの指示に従うだけで入るはずです。
私見
もっといい使い分け方もあるかもしれません。そして、それは時代とともに変わっていくものだとも思います。ただ、基本的な考え方として、次の 2 点を守るのが肝要だと考えています。(勉強不足で標準の方法に従えていないこともよくあるのですが・・・)
- なるべく標準の方法に従う
- OS を汚すのは必要最小限にする
参考
Python標準ライブラリ: venv
Pythonチュートリアル: 12. 仮想環境とパッケージ
PEP 405 -- Python Virtual Environments
Anaconda: Installation
Pythonの環境構築を自分なりに整理してみる
pyenvが必要かどうかフローチャート