はじめに
Pythonをとりまくツールにはpip
やpyenv
・virtualenv
など数多く存在しており、その用途や使い分け方について混乱しがちです。この記事ではそれらのツールについてひとつずつ解説します。
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環境が入っていません。最近はストアから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 CatalinaにはデフォルトでPython2.7.16と3.7.3がインストールされています。python
コマンドを単に入力すると2.7.16が起動します。
また、macOSにはHomebrewを使ってPythonをインストールすることができます。この場合はPython3がインストールされます。ただし、Python3の起動にはpython3
コマンドが必要です。
$ brew install python
$ python --version
Python 2.7.16
$ python3 --version
Python 3.7.3
ツール紹介
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バイナリがコピーされたりするので、たくさん仮想環境を作ると無駄に容量を消費することになります。
pyvenv & python -m venv
venvはPython標準の仮想環境作成ツールです。virtualenvの機能を標準に移植し、しかもバイナリをコピーするのではなくシンボリックを貼ることで軽量化を実現しています。virtualenvと同じく、それぞれの仮想環境下で独立にパッケージをインストールすることができるようになります。Python3.5まではpyvenv
コマンドで作成していましたが、このコマンド自体がどこのPython環境下で動いているかを明確にするためにpyvenv
コマンドは廃止予定となり、以降はpython -m venv
コマンドを使うことが推奨されています。
pyenv
とpyvenv
は一文字違いのコマンドですが全く役割が違うので気をつけてください(そもそもpyvenv
は廃止予定ですが)。
pyenv-virtualenv
pyenvのプラグインで、pyenvでインストールしたPythonに紐付くvirtualenvで作成した仮想環境をPyenv管理下に置き、バージョン切り替えと同じ感覚で仮想環境を切り替えることができるようになるツールです。Virtualenvそのものではなく、あくまでpyenvのプラグインです。
pipenv
Python用プロジェクト管理ツールです。Node.jsのyarnや、Rustのcargoと似たような機能を持っています。virtualenvとpipをラップしており、このコマンドひとつで仮想環境を作成するだけでなくパッケージをインストールすることも可能です。
また、Pipfile
とPipfile.lock
の2つのファイルによって、再現性のあるPython環境をコードで管理できるようになりました。さらにPyenvと組み合わせると、任意のPythonバージョンを指定してプロジェクトを作成することができるようになります。
お好みでPIPENV_VENV_IN_PROJECT
環境変数を1
にセットしておくと良いでしょう。.venv
ディレクトリがそのプロジェクトルートディレクトリごとに作られて、PyCharmで扱いやすくなります。
結局どれを使えば良いのか
個人的な感想ですが、指標を書いてみたいと思います。
やってはいけないこと
- 特別な理由がないのに安易にAnacondaを利用すること
- pipとの共存が難しいためです
- たいていの場合Anacondaを利用する必要は無いはずです
- sudoでpipを利用すること
- リポジトリ管理されているパッケージとの不整合が発生するためです
どのPython環境を使うか
- Windowsで、データサイエンス関係のお仕事をする人はAnacondaを使うのが良いでしょう
- ただしcondaの扱いには注意してください
- Windowsで、データサイエンスをしない人はストアor公式のPythonを使いましょう
- Linuxの人は、リポジトリにあるPython3を使いましょう
- macOSの人は、brewでPython3を入れましょう
どのツールを使うか
- 基本的にpyenvとpipenvだけが入っていれば十分です
- rbenvなど他の*envを使う人はanyenvを使うと便利です
- Linuxの人はシステムのPythonを使って、Homeディレクトリ以下にpipenvをインストールします
- macOSの人はbrewでpipenvをインストールします
おわりに
Pythonにまつわるツールをたくさん紹介してきました。どれも名前が似ていたり役割が似ていたりしてややこしいですが、とりあえず必要なのはpyenv
とpipenv
だけですので、それだけ覚えていただければと思います。それでは快適なPython開発をお楽しみください。
おまけ
Linux環境におけるpipenvのインストール方法
先ほど「Homeディレクトリ以下にpipenvをインストールします」と書きましたが、その具体的な方法です。
まずはシェルの設定ファイル(~/.bashrc
や~/.zshrc
など)を開き、$HOME/.local/bin
にPATHを通してください。以下はbashでの例です。
export PATH=$HOME/.local/bin:$PATH
$ source ~/.bashrc
続いてpipenvをユーザー側にインストールします。インストールが完了したら、念のため確認しておきます。バージョンが表示されれば完了です。
$ pip3 install --user pipenv
$ pipenv --version
pipenv, version 2018.7.1
なおArch Linuxにはpython-pipenv
パッケージが用意されているので、これを利用するのが最も簡単です。