読者です 読者をやめる 読者になる 読者になる

pythonパッケージ管理についてのまとめ(distutils,setuptools,distribute,pip,easy_install)[2014年版]

Python

前提

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

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.

この記事はもう古いので、いまはdistributeではなくてsetuptoolsをインストールしてください。setuptoolsはプロジェクトが再始動してdistributeよりも新しい実装になっています。