pythonの環境構築について
"python 環境構築"でググると20万件くらいヒットしますが、割と内容が古いです。
タイトルにはデータサイエンティストと書いてありますが、データサイエンティスト以外にもanacondaはおすすめです。
- 2.x or 3.x? 3.xは動かないライブラリが多いので2.x推奨 > 3.xで動かないライブラリがある、くらいまで来ました。
- easy_installでpipを入れて、setuptoolsも入れて、でもwheelというのもあって... > 古いです。
- virtualenv 必須 > そんなこともないです。
- winでは64bitは不具合が多いので32bit推奨 > 古いです。
- winでは非公式バイナリからダウンロードしてインストール > お世話になりましたが、最近は使っていません。
2016版 OS毎python環境構築法決定版
- Windows: anaconda(or miniconda)
- linux: git + pyenv + anaconda(or miniconda)
- MacOS: homebrew + pyenv + anaconda(or miniconda) #これだけ自分ではやったことないです
- ChromeOS: chromebrew + git + pyenv + anaconda(or miniconda)
重要なのは公式のpythonは入れなくていいということです。
python環境構築の課題
- 以前よりはマシになりましたが、用途や使用ライブラリによって2系と3系を使い分ける必要があります。
- バージョン管理システムが必須: pyenvやpythonzなど
- 共存できないライブラリがあるとか、dev版の新しいライブラリを試したいとか、開発環境を使い分けたいケースがあります。
- 環境管理システムが必須: virtualenvやpyvenv(python 3.4以降)など
- パッケージ管理システムが初心者泣かせ
- スタンダードはpip(python package index)
- python 3.3まではpipがプリインストールされていないので、setuptools(現在はdistribute)というパッケージ管理システムからインストールする...
- パッケージ管理システムにパッケージ管理が必要ってなんだよ。Battery Includedじゃねーのかよ
- もはやわけわからないです。こちらのページが詳しいです。
- linuxやMacはプリインストールでpythonが入っているけど、ほとんどはpython 2.x
- システムのpythonをバージョンアップしようとすると間違いなくはまります。
- 結局 apt-get,yum,brewで複数バージョンのpythonを入れることになりますが、環境変数がコンフリクトしてはまります。
- python3にpipでipythonをインストールしたけど使えない > 別のpythonにインストールしてました orz...
これらは環境構築法決定版ではほとんど気にしなくてよいです。
Anacondaとは?
- pythonのディストリビューションの一つで、主要ライブラリをオールインワンでインストールできます。(numpy,scipy,pandas,ipython,jupyter,scikit-learn etc...)
- 最小限の構成しかないminicondaというのもあります。
- python 2.xも3.xも対応しています。(python 3.xは2014年の夏頃から)
- Linux版、Mac版、Win版とそろっています。
- 32bitも64bitもあります。
- 似たようなものにenthoughtとかpython(x,y)とかありますが、全プラットフォーム&2/3対応しているのはAnacondaだけです。
condaとは?
- condaというパッケージ管理システムが使えます。: pipの代わり
- 対応パッケージは現時点で400オーバーです。
- pipはクライアント側でコンパイルするので環境によってはコケる事があります。
- pipと併用もできるので、condaに入っていないライブラリはpipでインストールすることができます。
- condaはバージョン管理もできます。: pyenvの代わり
- 例えばanaconda3-xx.xxを入れるとpython 3.5ベースで全部入ります。
conda create -n py2 python=2.7
- 上記コマンドを打つと、python2.7の仮想環境が構築できます。
-
source activate py2
でpython2.7の仮想環境に入れます。
-
- 例えばanaconda3-xx.xxを入れるとpython 3.5ベースで全部入ります。
- condaは仮想環境管理にも使えます。: virtualenv/venvの代わり
- 仮想環境下でcondaやpipでパッケージをインストールできます。
- condaで作る仮想環境はpythonのバージョン違いまで吸収できるため、virtualenvの上位互換と言えます。
- 事実、anacondaでvirtualenvを使おうとすると、condaで環境を作るように警告が出ます。(virtualenvが作れはします。)
- conda最高ってことです。
- 環境構築の課題に上げた項目のうち、3つは解決します。(4番目があるので、linux/Macはpyenvを組み合わせたほうがよいです。)
# OS毎の環境構築
Windowsの場合
windowsにはプリインストールでpythonは入っていません。
しかしpyenvがwindowsに対応する気が一切ないので、バージョン管理も考える必要があります。
でも安心してください。anacondaだけ入れれば問題無いです。
環境構築方法
-
ダウンロードサイトからwindows用のインストーラをダウンロードして下さい。
- 3.5でいいと思いますが、2.7しか使わないという人は2.7用を落としてください。
- condaで2.7環境も後から作れるのでそんなに気にしなくていいです。
- exeを実行して指示に従ってインストールしてください。(途中でpathに追加するかも聞かれます。)
非公式バイナリは依存関係を解決してくれないので、欲しいライブラリが複雑な依存関係だとうんざりします。。
Linuxの場合
システムにプリインストールでpythonが入っています。
- 多くは2.xなので、3.xと共存したいなと思います。
- システムの方をうかつにさわるとはまります。
- 別途
apt-get install python3
などとして入れても、環境変数を自分で弄る必要があります。 - anaconda単独だと実は問題があります。
- curlやsqlite3,opensslなどを一緒にインストールして動作をのっとります。
- 推奨はpyenvを経由することです。
- 現在のpyenvはanacondaに対応しています。
環境構築方法
- pyenvをインストールします。
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
- anacondaをインストールします。
3系でも2系でもどっちでもいいですが、3で殆どの場合不都合が無いです。
pyenvで両方共存させることも可能ですが、condaで2/3の切り替えができるので片方でいいです。
$ pyenv install -l | grep ana
# 最新版を確認。anaconda3-2.5.0 (2系はanaconda-2.5.0)
# minicondaがいい人はminicondaを入れてください。
$ pyenv install anaconda3-2.5.0
$ pyenv rehash
$ pyenv global anaconda3-2.5.0
# anacondaをメインのpythonに設定。
$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2.5.0/bin/:$PATH"' >> ~/.bashrc
$ source ~/.bashrc
# activateがpyenvとanacondaでバッティングするので、pathに明示しておく。
$ conda update conda
#念のためconda自体をアップデートしておく。
(3/24修正)
$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2.5.0/bin/:$PATH"' >> ~/.bashrc
には副作用があって、pyenv globalやpyenv localをいっさい受け付けずに、常にanacondaを使うようになります。
anaconda以外も使う人や、主にpyenv local
で運用したい人などは、Pathに記載するのをやめてcondaのactivateをフルパスで入れる必要があります。
source ~/.pyenv/versions/anaconda3-2.5.0/bin/activate <環境名>
環境を頻繁に切り替えないでanacondaだけでやっていく人はpathに明示した方がよいと思います。
(4/8)
pyenvとanacondaを共存させる時のactivate衝突問題について別記事を作成しました。
Macの場合
Mac持ってないので伝聞です。ご容赦ください。
↓こんな話もあるのでLinuxと同様にpyenvを挟んだほうがよさそうです。
Anacondaを入れたらHomebrewの環境が吹っ飛んだ話
環境構築方法
持っていないので、別の方の記事を参考にしてください。
pyenvがgithub経由ではなくHomebrewになるとこ以外は一緒だと思います。
HomebrewのインストールからpyenvでPythonのAnaconda環境構築までメモ
自分では未検証ですが、linuxの場合と同様にanacondaとpyenvのactivateがバッティングします。
anacondaへのpathを通しておいたほうが楽だと思います。
$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2.5.0/bin/:$PATH"' >> ~/.bashrc
$ source ~/.bashrc
ChromeOSの場合
MacBookAirっぽいのが3分の1くらい値段で買えます (^^
こちら参照
croutonでubuntu環境を作って入れるのもありですが、ちょっと面倒です。
condaの基本的な使い方
仮想環境編
- 仮想環境の構築
conda create -n <環境名> python=<バージョン> <スペース区切りでライブラリ名>
conda create -n py2 python=2.7 numpy scipy pandas jupyter
#anacondaとしてまとめて入れることも可能。
conda create -n anaconda2 python=2.7 anaconda
- 仮想環境の確認
conda env list
# こちらでも出る。
conda info -e
- 仮想環境の出入り
# 仮想環境に入る
source activate py2
# windowsではactivate py2
# 仮想環境から抜ける
source deactivate
# windowsではdeactivate
- 仮想環境の削除
conda remove -n py2 --all
パッケージ管理編
- パッケージのインストール&アンインストール
conda install numpy scipy # pipと同じでスペース区切りで複数OK
conda install numpy=1.10.4 # バージョン指定も可能
conda install -n py2 numpy scipy # -nで環境名を指定もできる
conda update numpy # update
pip install numpy # pipも使える。condaにないときはこちらを利用
source activate py2;pip install numpy # 仮想環境に入れるときは、activateしなければいけない
conda uninstall -n py2 numpy # アンインストール
- パッケージの確認
conda list
# 現在入っているパッケージリスト
conda list -n py2
# -nで仮想環境下も選択可能
conda list --export > env.txt
conda create -n py2_copy --file env.txt
# エクスポートして再利用することも可能だが、
# pipで入れたパッケージはエクスポートできないのでpip freezeで別途出力しておく必要がある。
anaconda cloud編
anacondaで提供されていないパッケージについても、anaconda cloud (anaconda.org) に誰かがアップしていることがあります。
anaconda search -t conda ggplot
# いろいろ出てくる
# ...
#bokeh/ggplot | 0.6.8 | conda | linux-64, win-32, win-64, linux-32, osx-64
# : ggplot for python
#...
anaconda show bokeh/ggplot # <USER/PACKAGE>で指定すると詳細が見れる
#Using Anaconda Cloud api site https://api.anaconda.org
#Name: ggplot
#Summary: ggplot for python
#Access: public
#Package Types: conda
#Versions:
# + 0.6.5
# + 0.6.8
conda install -c bokeh ggplot # USER名を-cで指定してパッケージをインストール
見づらいしOS毎の検索ができないっぽいので、https://anaconda.org/ から検索したほうが早かったりします。
おまけ
- データサイエンスといえばRでしょ!という人もいると思います。
- condaでRもインストールできます。
conda create -n r -c r r-irkernel
これで今流行りのJupyterでのR利用の環境までできてしまいます。
- 普通にRを使ったり、Rstudio経由でも使えます。
- RのJupyter利用はRとrzmqのバージョンによってははまるのでこちらが楽です。
すごいね、Anaconda。
追記 あるいは 蛇足
決定版からは少し外れます。
(3/24追記)
pyenv
windowsでは使えませんが、Mac/Linuxでpyenvをかませるといくつかいいことがあります。
- 環境の再構築が楽。
- なんやかんやしてどうしようもなくなったときに、
pyenv uninstall
でなかったことにできる。 - あるいはanacondaの新しいバージョンが出てれば、新しいanacondaをしらっと使い始められる。
- なんやかんやしてどうしようもなくなったときに、
- pypy,jython,stacklessなどのCpython以外が使える。
- pyenv localが使える。
pyenv local
この中でpyenv local
は非常に便利です。
たとえば下記を設定しておくとpy2に移動した時だけ、anaconda3ではなくanaconda2が立ち上がるようになります。
mkdir py2
cd py2
pyenv local anaconda2-2.5.0
実はanacondaの仮想環境もlocalで指定することができます。
conda create -n py2 python=2.7
pyenv local anaconda3-2.5.0/envs/py2
python
#Python 2.7.11 |Continuum Analytics, Inc.| (default, Dec 6 2015, 18:08:32)
#[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
ただし、linux版の環境構築に記載したとおり、$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2.5.0/bin/:$PATH"' >> ~/.bashrc
を設定しているとpyenv local
を無視してanaconda3-2.5.0を読みに行ってしまいます。
プロジェクト毎にディレクトリで環境を切ってpyenv local
で運用するか、切り替えが必要な場面で明示的にsource activate <仮想環境名>
を叩いて運用するかは、好みや利用内容によると思いますので好きな方をお選びください。
pyenv-virtualenv
非常にややこしいことにpyenv-virtualenvというpyenvのpluginがあります。
これはpythonの仮想環境管理システムvirtualenvとは別物で、virtualenvやvenv(python3.4以降)などで作った仮想環境を切り替えることができます。
しかも、condaで作った環境まで対応しています。
そのため、pyenv localとsource activateのバッティング問題を解決してくれます。
インストールは簡単で、gitからcloneして、pyenvインストールフォルダの下のpluginフォルダに配置します。
git clone git://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
souce ~/.bashrc
pyenv-virtualenvの簡単な使い方
#環境の確認
pyenv virtualenvs
#>>>anaconda3-2.5.0 (created from /home/vagrant/.pyenv/versions/anaconda3-2.5.0)
#>>>anaconda3-2.5.0/envs/py2 (created from/home/vagrant/.pyenv/versions/anaconda32.5.0/envs/py2)
#環境のactivate
pyenv activate anaconda3-2.5.0/envs/py2
python
#>>>Python 2.7.11 |Continuum Analytics, Inc.| (default, Dec 6 2015, 18:08:32)
#環境のdeactivate
pyenv deactivate
condaで環境の構築して、pyenv activate
とpyenv local
で環境切り替えができるようになります。
Mac/Linuxで仮想環境をよく切り替える方は、pyenv-virtualenvまで入れると生産性があがるかもしれません。