データサイエンティストを目指す人のpython環境構築 2016

  • 1955
    Like
  • 5
    Comment
More than 1 year has passed since last update.

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とは?

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の仮想環境に入れます。
  • 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を経由することです。

環境構築方法

  1. 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
  1. 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 activatepyenv localで環境切り替えができるようになります。
Mac/Linuxで仮想環境をよく切り替える方は、pyenv-virtualenvまで入れると生産性があがるかもしれません。

1contribution

統計の勉強でpython使いたいと思ってたところで調度良いエントリ投稿いただけて大変参考になりました。

環境やバージョンの違いによるものかもしれませんが、何点か記載通りに行かなかった点がありましたのでコメントしておきます。(MacOSX 10.10.5)

conda delete -n py2 --all

deleteコマンドが見つからないとのエラーに。代わりにremoveコマンドで環境の削除ができました。

source activate py2

PATHの問題だと思いますが、pyenv: -bash: command not foundとなってしまいうまく行きませんでした。

activateを直接指定すればうまくいきました。

source $HOME/.pyenv/versions/anaconda3-2.5.0/envs/anaconda2/bin/activate anaconda2

同じような状況になられた方のご参考になればと思います。

2851contribution

uu4kさん
ありがとうございます。

conda delete -n py2 --all

conda removeの記載ミスです。記事の方を修正しました。

activateの件ですが、activateをpathに追加してもダメでしたか?
(mac版は私が検証していないので自信を持って言えませんが。)

pyenvの開発者からの説明を引用すると、

pyenv は shims スクリプトで $PATH を乗っ取るので、 source activate foo みたいなことやっても期待通りのスクリプトを source することはできません

(特にlinuxの場合はエラーを吐くだけでなくshell毎落ちます。)
このトラブルは.bashrcで明示的に$PYENV_ROOT/versions/anaconda3-2.5.0/bin/と追加することでlinuxでは回避できます。
そのため、本記事ではpyenv-virtualenvには触れずにanacondaを用いたsource activateで統一した記載としました。
CPythonを使うだけであればanacondaだけで問題ないと感じているので、私はpyenv-virtualenvを使うのをやめています。
ただしpypyやjythonのような他実装をまたぐ必要がある方は、pyenv-virtualenvを入れてpyenv activateで運用したほうが良いように思います。

3contribution

pyenvはcmakeのfindPythonInterpが上手く働かなくする(バージョンを正しく認識しない)ので,cmakeを使ってpython moduleをビルドする人は避けた方が良いと思います.例えば,OpenCV3のビルドがコケます.

2851contribution

コメントの通り、基本的にはanacondaはソースからビルドする人には不向きです。
あくまでもデータサイエンティストなどプログラミングを手段だと思っていて、学習コストをそれほどかけたくない人向けです。

opencv3であればmenpoプロジェクトから提供されているbuild済みをcondaで入れるのが良いと思います。

https://anaconda.org/menpo/opencv3

0contribution

こちらの記事、参考になりました。ありがとうございます。

とても参考になったので、本投稿をもとに自身が書いているブログに英訳させていただいたのですがよろしいでしょうか。
http://corochann.com/setup-python-environment-1395.html