Python パッケージ管理技術まとめ (pip, setuptools, easy_install, etc)

このエントリーをはてなブックマークに追加

Python のパッケージ管理関係の情報がオフィシャルには整理されてなく、 またパッケージ管理まわりででてくるキーワードもいくつもあって分かり難いので完結にまとめてみました。 このドキュメント自体は少し長いですが、結論としては2015年1月時点では

という方針でよいと思います。

ただ少し古い情報ソースやパッケージのドキュメントを読んでいると distribute の利用が勧められていたり、 site-packages, easy_install, ez_setup.py, distutils, PyPI, Eggs, etc… と色々なキーワードが出て来て、 それぞれが何なのかを理解していないと混乱してしまいます。 そのため、それぞれの技術と技術同士の関係を理解しておくのは Python で正しくパッケージ管理を行う上で大切かと思います。

キーワード

Python におけるパッケージ管理に関係のあるキーワードをアルファベット順に。

事前知識

site-packages

User site directory

PyPI

PyPI: the Python Package Index。 だれでも Python のパッケージが登録できる python.org のサイト。 後述の easy_install とか pip はここからパッケージを探してきてインストールしてくれる。

distutils

基本

Python のソースコードの入ったディレクトリに:

from distutils.core import setup

setup(name='foo',
      version='1.0',
      py_modules=['foo'],
      )

のような setup.py というファイルを用意する。 この例では foo というモジュールがあるモジュール配布物 (module distribution) を定義している。 setup.py ができたら、:

python setup.py sdist

を実行する。そうすると、dist というディレクトリに module distribution の .zip や .tar.gz ファイルが作成される。これを配布すれば良い。 配布されたパッケージをインストールするには、sdist で作成されたファイルをダウンロード・解凍して、展開先のディレクトリで:

python setup.py install

を実行すればよい。site-packages にインストールが行われる。 User site directory にインストールしたい場合には、 install コマンドに –user オプションを付ける--user オプションを付ければ、非rootユーザも自分のホームディレクトリにモジュール配布物をインストールすることができる。 その他のコマンドの一覧は:

python setup.py --help-commands

で表示できる。

distutils における依存関係の扱い

distutils ドキュメントには、setup に渡す requires パラメータで依存関係が定義できる という下りがあるが、 setup のパラメータ一覧 には requires はないようにみえる。整合性が取れていなくてよく分からない。 PEP314 にはrequires に関する言及がある。 おそらく現行(2.7)の distutils では依存関係の宣言とそれによるインストールはサポートされていない。

distribute

setuptoolsのクローン。setuptools の開発が進まないので、 distribute という setuptools のブランチが作成されていた。 少し古いページでは distribute のインストールが勧められていることも多い。 しかし、2013年に distribute は setuptools にマージされた ので今後は distribute を使う必要はないと思われる。

setuptools

distutils を拡張するライブラリと easy_install というモジュールのインストールを行う補助コマンドのセット。 更新が停止していたので、代替として distribute が開発されていたが distribute は2013年にマージされたので、今後はsetuptools を使えば良い。

インストール

ez_setup.py というブートストラップ用のスクリプトをダウンロードし実行する。:

wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
python ez_setup.py

前述の User site directory にインストールする場合には、:

python ez_setup.py --user

を実行する。 Mac の Python には始めから入っているような気がする。:

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools

参考文献

https://pypi.python.org/pypi/setuptools

easy_install

簡単に PyPI や指定されたURLにあるアーカイブからモジュールのインストールが行えるコマンド。 setuptools に付随している。パッケージを自作しないユーザが setuptols を入れる直接的な理由のほとんどはこれをインストールするためであろう。

easy_install の使い方

文献

Python Eggs

setuptools で定義された Python の配布形式。 Python のコードやメタ情報その他を所定のフォーマットに従って zip で固めたもの (distutils の生成するzip/tar の拡張版)。 setuptools を使って (つまり setuptools を使って setup.py を定義していれば) 作成することができる。

ez_setup.py

上述したように、setuptools のインストールに利用されるブートストラップ用のスクリプト。

pip

pip はeasy_install の強化版です。 パッケージのアンインストールなど、easy_install にはない機能が提供されています。 2014年12月現在、pip を使うのが Python における最もモダンなパッケージ管理方法だと思います。

インストール & アップグレード

使い方

Wheels

インストール

pip install wheel
(必要ならば --user をつける)

Wheelの作成

その他

参考文献

このエントリーをはてなブックマークに追加
Home