Document Actions
distutils, setuptools, distribute, pip, virtualenv, buildout
今日は (第6回)Zope/Plone開発勉強会 に参加しています。
勉強会中に、結局eggって何?buildoutを使えるようになるにはどうすればいいの?最近たまに聞くpipって何?という質問が出たので、 distutils, setuptools, distribute, pip, virtualenv, buildout について、そろそろ整理しておこうかなーと思ってまとめてみました。
各パッケージの用途と概要
| distutils: | Python の標準パッケージです。eggは作れませんが、 python setup.py build したり、 python setup.py install したりの機能が提供されています。詳しくは Pythonのマニュアル を参照のこと...。 |
|---|
| setuptools: | setuptools はPython 標準の distutils を拡張しています。 良く使われるのは easy_install コマンドで、 easy_install を使うために ez_setup.py を実行すると、陰でこっそり setuptools がインストールされます。 easy_install は easy_install Sphinx 等と書くと、PyPI(Python Package Index)から自動的に Sphinx パッケージを探してきて site-packages にインストールしてくれます。 開発向けには、setuptoolsをインストールすると setup.py に egg を作るための記述が出来るようになり、また、 python setup.py bdist_egg で egg を作れるようになったり、 python setup.py register ... でPyPIに登録出来るようになったりします。 現在の開発状況は、0.6c11 (2009-10-20) までリリースされていますが、 0.6c9 (2008-09-24) から 0.6c10 (2009-10-19) まで1年以上間が空いていて、6個のバグが修正されただけで、実質、開発が止まっているといえるかもしれません。 |
|---|
| distribute: | distribute は setuptools から分岐したプロジェクトです(というかクローンです)。 distribute は将来的に setuptools から置き換えて使えるように設計しています。また、0.6.2までで既存の setuptools との後方互換性対応が完了し、同時に Python3 への対応を始めました。 distribute をインストールすると、 setuptools がインストール済みの場合、自動的にこれが使われないようにリネームします。インストールされた distribute-0.6.8-py2.6.egg の中には setuptools というパッケージ名が入っているので(と言うか名前なども全部互換なので)、これ以降 import setuptools 等と実行すると、distributeのコードがimportされるようになります。 bin/easy_install も distribute を使うように書き換わります。 Tarek の blog virtualenv and zc.buildout now with Distribute included から引用:
|
|---|
| pip: | pip は easy_install と同様の機能を提供します。 distribute は setuptools 全体を置き換えようとしていますが、 pip は easy_install コマンドを置き換えようとしています(distribute とは異なり、easy_installを削除したり書き換えたりはしません)。 pip は easy_install でインストール出来るものは同じようにインストールできます。パッケージ名を指定すれば自動的に PyPI から取ってきてくれたりします。ただし、 easy_install よりも良い動作をするよに設計されていて、複数パッケージを逐次インストールせずに、先にダウンロードしてからインストールを始めるとか、エラーメッセージが親切だとかが考慮されています pip の方針として、複数バージョンの共存は行わない設計のため、 pip でインストールする場合は virtualenv の環境下で行うことが推奨されています。なお、 pip install -E new-env/ MyPackage と実行すれば任意の virtualenv 環境をインストール先に指定できます。また、間違って実環境下で pip install してしまわないように環境変数 PIP_REQUIRE_VIRTUALENV=true しておく方法も提供されています。 pip の便利な機能は, uninstall(パッケージのアンインストール), freeze(パッケージ名==Version番号、の羅列がstdoutに表示されます), bundle(対象パッケージがrequireしているパッケージを集めて1つの .pybundle ファイルに固めてくれる) などがあります。 .pybundle に固めたファイルは pip install foo.pybundle としてインストール出来ます。ソースが全て .pybundle に格納されているためこのとき通信出来なくても問題ありませんが、C拡張などはこの時点でビルドされるためコンパイラや関連ライブラリなどが必要になります。 現在の所、制限事項も多く、eggパッケージからのインストールは出来ず、ソース提供されているパッケージのみインストール出来るなどがあります(=バイナリ配布出来ません)。Windowsではテストされておらず、ちょっとしたバグのためにbundleが動作しません。またWindowsでちょっと試してみたところ、C拡張のビルド時にコンパイルエラーになってもインストールが継続してしまうようです。詳しくは pip の Differences From easy_install の説明を確認して下さい。 非開発向けの視点からみると pip を使ったインストールはシンプルなので(単一バージョン,eggで固めず全て展開する,名前空間を結合する) 使いやすいという意見もあります。実際、setuptoolsの複数バージョン管理,egg化という複雑さや、jarっぽい設計よりも良いと評価している人もいるようです(Why I like pip)。 |
|---|
| virtualenv: | VirtualEnv はPythonの仮想環境を作ります。それだけですが、非常に便利です。 virtualenvwrapper も合わせて使うと便利らしいです。 workingenv や virtual-python の後継という位置づけのようです。 virtualenv は標準で setuptools を取ってきてインストールしますが、 virtualenv --distribute envdir のようにして環境を作ると、 setuptools の代わりに distribute を使ってくれるようになります(環境を作ってから 'easy_install distribute` してもよいです)。 virtualenv を導入して困ることはほとんど無いと思います。 distribute, pip, buildout, どれもが virtualenv 下で問題無く動作します。ただし、 mod_python や mod_wsgi など、 virtualenv 環境下の bin/python 以外から virtualenv 下のモジュールを呼び出す場合、 Using Virtualenv without bin/python を参考に多少の設定を行う必要があります。 |
|---|
| buildout: | zc.buildout は Python ベースのビルドシステムです。パーツという単位でアプリケーションを 作成、組み立て、配置などを行い、非Pythonベースのものも構築は可能です。 buildout 自体は buildout.cfg の設定を元に環境を構築してくれます。処理の実体は buildout 用の recipe と呼ばれるパッケージで実装されていて、PyPIからeggを取ってくる、svnからチェックアウトする、などいろいろなrecipeがあります。 Zope 用としては Zope のインスタンスを作成する、Ploneのサイトインスタンスを作ってProductsをインストールする、などの recipe もあります。 buildout では Python 本体の site-packages を切り離せないので、その必要がある場合は virtualenv 環境下で buildout を使うようにしましょう。 buildout 自体は recipe を取ってくるために setuptools を使っていますが、代わりに distribute を使うようにも出来ます (python bootstrap.py --distribute)。 詳しい使い方については buildoutで開発0: zc.buildout で環境を作る - 清水川Web を参照して下さい。 |
|---|
各パッケージの現状
| distutils: |
|
||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| setuptools: |
|
||||||||||||||
| distribute: |
|
||||||||||||||
| pip: |
|
||||||||||||||
| virtualenv: |
|
||||||||||||||
| buildout: |
|
調べてみた感想として、個人的には virtualenv + distribute 環境下で buildout + distribute を使うのが良いように思います。pipはbuildout環境下では積極的に使う必要はなさそう。pipにバイナリインストール機能が提供されてもうちょっと安定したら(開発以外の用途で)使いたいシーンが出てくるかもしれません。
- The URL to Trackback this entry is:
- http://www.freia.jp/taka/blog/691/tbping
