Python
virtualenv
pyenv
Anaconda
Pipenv

Pythonにまつわるツールのまとめ

はじめに

Pythonをとりまくツールにはpippyenvvirtualenvなど数多く存在しており、その用途や使い分け方について混乱しがちです。この記事ではそれらのツールについてひとつずつ解説します。

TL;DR

ツール名 説明
Anaconda データサイエンス向けディストリビューション
conda Anaconda専用のパッケージマネージャー
pip Pythonのパッケージマネージャー
pipenv Pythonプロジェクトの管理ツール
pyenv 複数のPythonバージョンを切り替えるツール
pyenv-virtualenv 切り分けた環境をPyenv上で選べるようにするPyenv用プラグイン
pyvenv Python標準のvirtualenvラッパー(非推奨)
python -m venv Python標準のvirtualenvラッパー
virtualenv プロジェクトごとにPython環境を切り分けるツール

だいたいの場合pyenv+pipenvでOK。

システムデフォルトのPython環境について

Windows

WindowsにはデフォルトのPython環境が入っていません。公式サイトからインストーラーをダウンロードしてインストールするか、Anacondaを利用することになります。あるいは、Windows Subsystem for Linux上に構築する手段もあります。

Linux

多くのLinuxディストリビューションには標準で何らかのPythonが利用できるようになっています。ただしディストリビューションごとにpythonコマンドで起動するバージョンが異なっています。2020年にPython2のサポート終了を迎えることから、今後は単にpythonと入力すればPython3が起動する環境が増えていくものと予想されます。

ディストリビューション Python3の起動コマンド Python2の起動コマンド
Arch Linux python python2
Ubuntu 18.04 python3 python
CentOS 7 なし python

macOS

macOS High SierraにはデフォルトでPython2.7.10がインストールされています。pythonコマンドを単に入力するとこれが起動します。

また、macOSにはHomebrewを使ってPythonをインストールすることができます。この場合はPython3がインストールされます。ただし、Python3の起動にはpython3コマンドが必要です。

$ brew install python
$ python --version
Python 2.7.10
$ python3 --version
Python 3.7.0

ツール紹介

pip

pipはPython標準のパッケージ管理システムです。PyPIに登録されたwheel形式のパッケージをそのpipが動いているPython環境にインストールしてくれます。依存関係の解決なども行ってくれます。

「そのpipが動いているPython環境に」というところがハマりどころで、例えばあるプロジェクトでインストールしたパッケージAがパッケージBのバージョン1.0を要求していて、別のプロジェクトでインストールしたパッケージCがパッケージBの2.0を要求していたときに、衝突が発生することになります。こうした問題を解決するため、後ほど紹介する各種環境切り分けツールを利用します。

また、Linuxディストリビューションではnumpyなどpipでインストールできるパッケージの一部がそのディストリビューションのリポジトリに登録されていたりすることもあります。システム標準のPython環境下でPythonパッケージを導入する場合、管理者権限でpipを動かす必要がありますが、このときリポジトリから入るパッケージと衝突する可能性があるため、安易に使うべきではないでしょう。この問題はPython仮想環境の導入、あるいはホームディレクトリ以下へのパッケージの導入によって解決します。

Anaconda & conda

Anacondaはデータサイエンス向けのパッケージを同梱したPythonディストリビューションです。PyPIとは異なる方法でパッケージ管理を行っているため、condaを使ってパッケージをインストールするようになっています。condaを使うと事前にビルド済みのPythonパッケージを入手することができ、特にWindows環境では手軽に豊富な種類のパッケージを利用できます。

ただしAnaconda環境下でpipを使うとcondaパッケージとの不整合が発生する可能性があるため、Anacondaを使うのであればcondaだけを利用するようにしてください。また、PyPIにあるパッケージが全てcondaにあるわけではないので、データサイエンス用途以外での出番はあまりないかもしれません。

pyenv

複数のPythonバージョンを切り替えて使うためのツールです。特定のバージョンをデフォルトで使うようにしたり、ディレクトリごとに切り替えて使うこともできます。しかし各バージョンにつき1つの環境しか作れないため、pipを利用するときは要注意です。

以下のコマンドは、複数のディレクトリで別々のPythonバージョンを使う場合の例です。

$ mkdir test_project
$ cd test_project
$ pyenv install 3.7.0
$ pyenv local 3.7.0
$ cd ../
$ mkdir new_project
$ cd new_project
$ pyenv install 3.6.6
$ pyenv local 3.6.6

virtualenv

Python仮想環境を構築するためのサードパーティー製ツールです。Google Trendsで見てみると、現時点ではこちらの方がシェアがありそうな感じです。Python仮想環境を作ってその仮想環境ごとに独立してパッケージをインストールすることができます。ただし、仮想環境内にPythonバイナリがコピーされたりするので、たくさん仮想環境を作ると無駄に容量を消費することになります。

graph.png

pyvenv & python -m venv

venvはPython標準の仮想環境作成ツールです。virtualenvの機能を標準に移植し、しかもバイナリをコピーするのではなくシンボリックを貼ることで軽量化を実現しています。virtualenvと同じく、それぞれの仮想環境下で独立にパッケージをインストールすることができるようになります。Python3.5まではpyvenvコマンドで作成していましたが、このコマンド自体がどこのPython環境下で動いているかを明確にするためにpyvenvコマンドは廃止予定となり、以降はpython -m venvコマンドを使うことが推奨されています。

pyenvpyvenvは一文字違いのコマンドですが全く役割が違うので気をつけてください(そもそもpyvenvは廃止予定ですが)。

pyenv-virtualenv

pyenvのプラグインで、pyenvでインストールしたPythonに紐付くvirtualenvで作成した仮想環境をPyenv管理下に置き、バージョン切り替えと同じ感覚で仮想環境を切り替えることができるようになるツールです。Virtualenvそのものではなく、あくまでpyenvのプラグインです。

pipenv

Python用プロジェクト管理ツールです。Node.jsのyarnや、Rustのcargoと似たような機能を持っています。virtualenvとpipをラップしており、このコマンドひとつで仮想環境を作成するだけでなくパッケージをインストールすることも可能です。

また、PipfilePipfile.lockの2つのファイルによって、再現性のあるPython環境をコードで管理できるようになりました。さらにPyenvと組み合わせると、任意のPythonバージョンを指定してプロジェクトを作成することができるようになります。

お好みでPIPENV_VENV_IN_PROJECT環境変数を1にセットしておくと良いでしょう。.venvディレクトリがそのプロジェクトルートディレクトリごとに作られて、PyCharmで扱いやすくなります。

結局どれを使えば良いのか

個人的な感想ですが、指標を書いてみたいと思います。

やってはいけないこと

  • 特別な理由がないのに安易にAnacondaを利用すること
    • pipとの共存が難しいためです
    • たいていの場合Anacondaを利用する必要は無いはずです
  • sudoでpipを利用すること
    • リポジトリ管理されているパッケージとの不整合が発生するためです

どのPython環境を使うか

  • Windowsで、データサイエンス関係のお仕事をする人はAnacondaを使うのが良いでしょう
    • ただしcondaの扱いには注意してください
  • Windowsで、データサイエンスをしない人は公式のPythonを使いましょう
  • Linuxの人は、リポジトリにあるPython3を使いましょう
  • macOSの人は、brewでPython3を入れましょう

どのツールを使うか

  • 基本的にpyenvとpipenvだけが入っていれば十分です
    • rbenvなど他の*envを使う人はanyenvを使うと便利です
  • Linuxの人はシステムのPythonを使って、Homeディレクトリ以下にpipenvをインストールします
  • macOSの人はbrewでpipenvをインストールします

おわりに

Pythonにまつわるツールをたくさん紹介してきました。どれも名前が似ていたり役割が似ていたりしてややこしいですが、とりあえず必要なのはpyenvpipenvだけですので、それだけ覚えていただければと思います。それでは快適なPython開発をお楽しみください。

おまけ

Linux環境におけるpipenvのインストール方法

先ほど「Homeディレクトリ以下にpipenvをインストールします」と書きましたが、その具体的な方法です。

まずはシェルの設定ファイル(~/.bashrc~/.zshrcなど)を開き、$HOME/.local/binにPATHを通してください。以下はbashでの例です。

~/.bashrc
export PATH=$HOME/.local/bin:$PATH
$ source ~/.bashrc

続いてpipenvをユーザー側にインストールします。インストールが完了したら、念のため確認しておきます。バージョンが表示されれば完了です。

$ pip3 install --user pipenv
$ pipenv --version
pipenv, version 2018.7.1

なおArch Linuxにはpython-pipenvパッケージが用意されているので、これを利用するのが最も簡単です。