Movatterモバイル変換


[0]ホーム

URL:


yunabe.jp

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

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

  • 原則 pip を使ってパッケージの管理を行う
  • setuptools も広く使われているので入れておくとよい。そもそも pipのインストール時に自動的ににインストールされる
  • distribute は 2013年に setuptools にマージされたので不要

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

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

目次

キーワード

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

  • easy_install

    • setuptools に付属しているコマンドラインツール。easy_installを使うと簡単なコマンドで web 上 (e.g. PyPI) からパッケージをダウンロードしてインストールすることができる。
  • ez_setup.py

    • setuptools をインストールする際に利用されるスクリプトの名前。
  • distribute

    • setuptools の更新が停滞していた時に発生した setuptoolsのクローン。 2013年に setuptools とマージされたので、distributeのことは気にする必要はないはず。
  • distutils

    • Python 標準のパッケージ管理の基本的な機能を提供するモジュール(import distutils)。 setuptools が distutilsの高機能版で広く使われているので setuptools を使うのが一般的。
  • setuptools

    • distutils を強化したパッケージ管理用の setuptoolsというモジュールと、 easy_installというコマンドラインツールのセット。
  • setup.py

    • setuptools, distutilsでパッケージの定義を記述するスクリプトに使われるファイル名。作成されたパッケージをインストールする際にも利用される。
  • pip

    • easy_install の強化版ツール
  • PyPI

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

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

    • Python Eggs の後継のフォーマット。
  • その他

    • buildout, virtualenv

事前知識

site-packages

  • Python にはsite-packages というディレクトリが存在し、そのサイト(マシン環境) 固有のモジュールは site-packagesに保存されるようになっている。
  • site-packages が モジュールの探索パス (sys.path)に足された後、sitecustomize というモジュールが暗黙的に Python にimport される。 sitecustomizeにサイト固有の設定を書いておくことができる。sys.setdefaultencoding('utf-8')でエンコーディングを設定するのによく使われる。
  • sitecustomize.py は sys.pathが通っているディレクトリならどこにおいてもよいけど、site-packagesに置くのが自然である。
  • ちなみに site-packages と似た、site-pythonというのも存在するらしいが、あまり使われていないし、site-pythonはPython3.5で廃止されるようなので気にしなくてよい。
  • 参考文献

User site directory

  • Python 2.6 からper user site-packagesというものが存在していて、ユーザ毎のモジュールを保存することができる。
  • per user site-packages を使えば site-packagesにアクセス権がないユーザ (環境標準の Pythonを使っているならすべての非rootユーザ) も site-packagesにモジュールが簡単にインストールできる。
  • per user site-packages のパスは、site.UER_SITE で参照できる。Linux だと$HOME/.local/lib/pythonX.Y/site-packages。 Macだと$HOME/Library/Python/X.Y/lib/python/site-packages
  • Python 2.6 以降は Virtual Pythonとかをユーザ毎の環境を作るためだけに使う必要はない。もちろんisolated な環境を作るのには依然として有益である。
  • 参考文献

PyPI

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

distutils

  • Python標準のパッケージ管理用のモジュール。パッケージ管理の基本的な機能を提供する。
  • setuptools や pip などのその他のパッケージ管理システムは distutilsに機能を拡張するものである。
  • パッケージ管理について理解するにはまず distutilsの基本は理解しておいたほうがよいかもしれない。
  • しかしパッケージ作成に実際に使うのは distutils の拡張であるsetuptools だろうから、distutilsの仕様をそこまで細かく理解しておく必要はあまりないかも。

基本

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

from distutils.coreimport setupsetup(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.pypython 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 の使い方

  • PyPI から最新版をダウンロードしてインストール

    • easy_install SQLObject
  • アーカイブをダウンロードしてインストール

  • User site directory へインストール

    • 前述の ez_setup.py に --user を付けて setuptoolsとそれに付随する easy_install を User site directoryにインストールした場合は、 easy_installによってインストールされるパッケージもデフォルトで User sitedirectory にインストールされる。
    • /usr/bin/easy_install のような環境にインストールされているeasy_install を利用してUser site directoryにパッケージをインストールしたい場合には、 --userオプションをつければよい。 ただ、Mac OS に付随しているsetuptools は古いのか --user が何故か使えない...ので、easy_install 自体を User site directoryに自分でインストールしてそちらを使うほうが良い模様。
    • その他の使い方

文献

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における最もモダンなパッケージ管理方法だと思います。

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

  • wget "https://bootstrap.pypa.io/get-pip.py"
  • rootにインストールする場合

    • sudo python get-pip.py
  • 非rootで User site directory にインストール場合

    • python get-pip.py --user
  • pip 自体をアップデートする

    • pip install -U pip

使い方

  • PyPI から最新版をダウンロードしてインストール

    • pip install SQLObject
  • User site directory へインストール

    • pip install --user SQLObject
    • easy_install と違って --user 付きでインストールした pipもデフォルトでは root にパッケージをインストールしようとするので、 User site directoryにインストールしたい場合は--user は省略できない。
  • パッケージを更新

    • pip install <packagename> --update
  • 更新があるパッケージを表示

    • pip list --outdated

Wheels

インストール

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

Wheelの作成

  • setup.py が setuptools を使って書かれていれば、 wheelをインストールすることで bdist_wheel が使えるようになります。

その他

  • virtualenv

    • Python の isolated な仮想環境をvirtualenv ENVコマンド一発で作り出す超便利ツール。
    • 仮想環境毎に別々のパッケージがインストールできるので、クリーンな環境を作ったり、アプリケーションによって異なるバージョンのパッケージを使ったりするのに便利。
    • root権限がないユーザがパッケージを入れるのにも便利ではあるが、2.6以降はUser site directory があるので virtualenvを使わなくても非rootユーザ毎にパッケージを入れるのは簡単。

参考文献

最終更新: 2016/6/29

[8]ページ先頭

©2009-2025 Movatter.jp