pythonパッケージ管理についてのまとめ(distutils,setuptools,distribute,pip,easy_install)[2014年版]
前提
pythonのパッケージ管理は、進化の歴史がとてもややこしいので混乱を招きがちです。 Web上の情報には古いものも多いです。このため、pythonのパッケージ管理に関するブログ記事等を参考にする場合は、記事の記載日時を確認して、なるべく新しい情報を参考にした方が良いです。古い情報と新しい情報で逆の事が書いてあったりするので、気をつけないと混乱します(例えば、distributeを使え!という情報、distributeを使うな!という情報の両方があったりします)。
先に結論
結局pythonのパッケージ管理には何を使えば良いの?という疑問に対して、手っ取り早く結論を書いてしまうと、
- setuptools
- pip
を導入すれば問題ないと思います(2014年7月時点)。
pythonのパッケージ管理について
はじめに
pythonのパッケージ管理では、setup.py, distutil, distutil2, setuptools, distribute, pip, easy_installなど色々なキーワードが出てきて、それぞれが何を意味しているのかが分かりにくいと思うので、それぞれについての説明を以下に記載します。
setup.py
- setup.pyはpyhonモジュールを配布する際に必ず必要なスクリプトファイル
- ファイル内部ではsetup関数を使ってモジュールをビルドしている
- setup関数はPython標準モジュールのdistutilsで定義されている
distutils、setuptools、distribute、distutils2
- distutilsを拡張するために開発されたのがsetuptools
- setuptoolsの開発が滞ったため、setuptoolsをforkして登場したのがdistribute
- distributeの機能をpython標準のdistutilsにバックポートしようとしたものがdistutils2
- distutils2はpython3.3ではpackagingと呼ばれている
- しかしながら、distutils2(packaging)の開発は停止してしまっている(latest-releaseが2012年3月)
- setuptoolsが開発再開し、distributeの内容がバックポートされたのが最新のsetuptools(Ver0.7以降)
歴史としては以下の通り。
distutils -> setuptools -> distribute -> distutils2 -> setuptools(Ver0.7以降)
easy_install、pip
- easy_installはsetuptoolsを便利に使うためのスクリプト
- pip は easy_installを置き換えて更に便利にしようとして開発されたもの
- すなわち、pipはeasy_install と同様の機能を提供する(easy_installには無いアンインストールの機能なども提供する)
- easy_installとの互換性がないので、使うのであればどちらか一方にした方が良い
まとめ
上に記載したような状況なので、まずsetuptoolsを使うというのは、特に悩む余地もないと思います。 easy_installを使うか、pipを使うかは自由に選べば良いと思いますが、virturalenvと一緒に使うことなどを考えると個人的にはpipが便利だと思いpipを使ってます。
参考URL
- Differences between distribute, distutils, setuptools and distutils2?(stackoverflowでのやりとり)
- Flimm氏の回答[answered Feb 7 '13 at 14:37]が非常に参考になる
- 元の質問は2011年に投稿されており色々と議論があるが、古い情報を鵜呑みにするのはヤメてね、との記載があり2013年時点での最新情報をまとめてくれている(2014年7月時点でもこの状況は同じ)。
As of July 2013, all of the other answers to this question are two years out-of-date. When you come across advice on Python packaging issues, remember to look at the date of publication, and don't trust out-of-date information.
- setuptoolsを使うときはsetuptoolsではなくてdistributeを使え!
- 2011年の記事ですが、2013.11.11時点で下記内容を追記してくれている
この記事はもう古いので、いまはdistributeではなくてsetuptoolsをインストールしてください。setuptoolsはプロジェクトが再始動してdistributeよりも新しい実装になっています。
Python パッケージ管理技術まとめ (pip, setuptools, easy_install, etc)
- pythonのパッケージ管理全般についてまとまっていて分かり易い。
-
- pipの導入方法、使い方に関する分かり易い記事。
-
- distributeはsetuptoolsにマージされたから、そっち使ってねという記載あり。
-
- distributeからsetuptoolsへの移行方法など