Edited at

Python 3.6 時代(2018年2月時点)の環境構築方法を使い分ける指針 (venv, virtualenv, Anaconda)

More than 1 year has passed since last update.

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標準ライブラリ


Python 3.3 と 3.4 では、仮想環境の作成に推奨していたツールは pyvenv でしたが、Python 3.6では非推奨です。

バージョン 3.5 で変更: 仮想環境の作成には、 venv の使用をお勧めします。


What’s New In Python 3.3


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が必要かどうかフローチャート