Pythonの環境構築の自分なりのまとめ+エキスパートPythonプログラミング読書会 第二期 01に行ってきました。
エキスパートPythonプログラミング読書会 第二期 01 : ATNDに行ってきました。補欠で7人目だったので無理かなと思ってたけど、結果としては補欠が全員繰り上がってぴったり30人となりました。実はエキスパートPythonプログラミングをまだ持ってなかったので、慌てて本屋を回って買ったという。
今回は「第1章 さあ、はじめよう」で、Pythonの環境を構築する章だったけど、ちょうど10月頃にPython製のプログラムを使ってみたくて、環境構築をしてみたとこだったのでいい話が聞けました。自分でやった環境構築と聞いた話をあわせて、とりあえず自分なりの環境構築をまとめてみます。
環境構築
pythonbrewを入れる
$ curl -L http://xrl.us/pythonbrewinstall | sh
pythonbrewでpythonを入れる
$ pythonbrew install --no-setuptools 2.7.2
--no-setuptools
を付けない場合、pythonbrewはsetuptoolsとpipを合わせて入れるようです。pipはともかく、setuptoolsは開発が止まっていて代替として登場したdistributeを入れたほうがいいらしいです。なので、setuptoolsを入れられるのはちょっと困ります。
〓以下、追記〓
setuptoolsが入っている状態で easy_install distribute すれば大丈夫ですよ。
http://d.hatena.ne.jp/kanonji/20111110/1320916100#c1320916990
そうすればvirtualenvなども easy_install virtualenv で済むので良いですね。
id:shimizukawaさんにコメントで補足してもらいました。合計3つ補足を追記しました。
これは上書きとかになるのかな。今度試してみたい。
virtualenvでdistributeを入れつつ仮想環境を作る
$ pythonbrew use 2.7.2 $ python virtualenv.py --distribute ~/.pythonbrew/virtualenvs/python-2.7.2a $ source .pythonbrew/virtualenvs/python-2.7.2a/bin/activate (python-2.7.2a) $ type python python is /home/myuser/.pythonbrew/virtualenvs/python-2.7.2a/bin/python $ type easy_install easy_install is /home/myuser/.pythonbrew/virtualenvs/python-2.7.2a/bin/easy_install $ type pip pip is /home/myuser/.pythonbrew/virtualenvs/python-2.7.2a/bin/pip
virtualenvは--distribute
を使うと、setuptoolsの代わりにdistributeを入れてくれます。まずpythonbrew use 2.7.2
でpythonbrewで入れたpython 2.7.2に切り替え*1それを親としてpython-2.7.2aという仮想環境を作っています。distributeがセットで入ったので、easy_installが使える状態になります。
ちなみに、virtualenv.pyはvirtualenv · PyPIからダウンロードします。
補足
後述の読書会で見聞きした話によると、virtualenvで作った環境は、親にdistributeをインストール済みであれば、それを使うらしいです。そうすると、virtualenvで仮想化しつつdistributeを入れるより、pythonbrewで入れたpythonにdistributeを入れておいた方がすっきりするかもしれない。
個人的には virtualenv + distribute 環境下で buildout + distribute を使うのが良いように思います。
distutils, setuptools, distribute, pip, virtualenv, buildout 再掲 — 清水川Web
あと、buildoutというものもあるらしく、上記の通りvirtualenvで作った仮想環境にbuildoutを入れるという手があるみたいです。ただbuildoutが何だかわかって無いので、今度試してみたいところ。
〓以下、追記〓
buildoutを使うときは必ずしもvirtualenv環境下でなくても良いです。自分はbuildoutのみ使っています。
http://d.hatena.ne.jp/kanonji/20111110/1320916100#c1320916990
ただbuildoutの概念は超簡単、ではないので、必要になるまでは使わなくてもいいかも。
id:shimizukawaさんのコメントでの補足2。
読書会で見聞きした事
読書会で見聞きした事なので、もしかしたら聞き間違い・勘違いを含むかもしれません。
pipとeasy_installは混ぜるな危険
pipとeasy_installはインストールの形式が違うらしいです。
〓以下、追記〓
混ぜてもライブラリ機能的な影響はないですがeasy_installで入れたものはpip uninstallやpip freezeなどの対象になりません。
http://d.hatena.ne.jp/kanonji/20111110/1320916100#c1320916990
混ぜると利用者が混乱するので注意が必要です。
id:shimizukawaさんのコメントでの補足3。
〓追記ここまで〓
$ ls site-packages/blockdiag* -1
pipで入れた場合
site-packages/blockdiag_sphinxhelper.py
site-packages/blockdiag_sphinxhelper.pyc
site-packages/blockdiag
site-packages/blockdiag-1.0.2-py2.7.egg-info
$ls site-packages/blockdiag-1.0.2-py2.7.egg/
easy_installで入れた場合
EGG-INFO blockdiag blockdiag_sphinxhelper.py blockdiag_sphinxhelper.pyc
この様に、ファイルの置き方が違います。
あと、easy_installは.eggというファイルからパッケージを入れられるが、pipは出来ないとの事。これは.eggがコンパイル済みのファイルをzipで固めたもので、pipは必ずソースからコンパイルをする仕組みだという話を聞きました。コンパイルに、python以外のソフトウェアが必要なパッケージの場合、pipで入れようとするとコンパイル出来ずに失敗するんだとか。
virtualenvは仮想化に必要なファイルだけを作成し、残りは親を参照する
見出しの通り、らしいです。
$ virtualenv --no-site-packages my_env
site-packagesも親のを使うので、親から独立した仮想環境を作りたい場合は--no-site-packages
オプションをつける。これはsys.path
に親のsite-packagesへのパスが入るか入らないかになるとのことです。逆に、親のsite-packagesを利用していれば、仮想環境を作った後に親でパッケージをインストールすると、仮想環境でもそのパッケージが使える。ただ、例外もあるらしく、例えばipythonは親のを仮想環境で使うことが出来ないらしい。
pipとeasy_installの今後
http://shimizukawa.bitbucket.org/python-distribute-ja/introduction.html#state-of-packaging-info
setuptoolsとdistributeはdistutilsを拡張したもので、将来的にはPythonに取り込まれたdistutils2とpipを使う形になるっぽい。先の話なので、当面はdistributeのeasy_installを使うかpipを使うのがいいのかな。
その他
- Home - the bpython interpreter
- WindowsのCUIにConsole2+nyoasがいいらしい
- PyPyはPythonで作られたPythonの処理系で、CPythonよりも早いらしい。わけが分からない。
- vimユーザー多数*2
- distutils, setuptools, distribute, pip, virtualenv, buildout 再掲 — 清水川WebPythonの環境構築に使うツールについては、ここがまとまりすぎ。
- http://sanojimaru.com/654
余談
第2章 構文ベストプラクティス ―― クラス以外
サイト閉鎖のお知らせ | ASCII Books
2.1 リスト内包表記
2.2 イテレータとジェネレータ
2.3 デコレータ
2.4 withとcontextlib
2.5 まとめ
次回に読むであろうエキPyの2章は、ぺちぱーからすると訳が分からない構文のオンパレードです。リスト内包表記は割と便利だなーって思いましたが、ジェネレーターとwithのあたりでさらっと読むだけじゃ理解出来なくなりました。こんなPythonならではを2章に持ってくなんて。しかも、今手元にないから確認は出来ないけど、withの所にいく前に、サンプルコードにwithがしれっと書いてあった様な・・・
とまぁ、内容が濃いので、2回目以降も見逃さず参加したいところです。月一という事なので、これを学習のマイルストーンにしてPythonを覚えたいです。
他の参加者のレポート
- 2011/11/08 エキスパートPythonプログラミング読書会2nd #1 | Flickr
- 2011-11-09
- kashew_nuts-tech: エキスパートPythonプログラミング読書会 第二期 01に参加してきました
- http://necopy.heroku.com/47
- http://d.hatena.ne.jp/imagawa_yakata/20111108
他の参加者のレポートを追記。他にも見つけたら随時追加するかもしれません。