macで蛇使い入門記:パッケージ管理
easy_install
さて、Pythonにおけるパッケージ(モジュール)管理システム*1はeasy_installって言う奴みたいです。このパッケージ管理システムもmacにデフォで入っていたり、Pythonの各バージョン用のものがあったり、となかなか複雑です。
ちょいと探しただけで、以下の3つが見つかりました。恐らくですが、右の括弧内に書いたそれぞれのpython用のものであろうと思います。
- /usr/bin/easy_install (/usr/bin/python 用?)
- /usr/bin/easy_install-2.5 (/usr/bin/python2.5 用?)
- /usr/bin/easy_install-2.6 (/usr/bin/python2.6 用?)
py26-(setuptools|distribute)
とりあえず、python本体はmacportsで入れたpython26を使おうと思っているので、それ用のeasy_installを手に入れるべきな気がしました。そして、ここがまだよく分かってないのですが、easy_installを含むportsパッケージは「py26-setuptools」や「py26-distribute」という奴らしい*2です。
$ port search setuptools py-setuptools @0.6c11 (python, devel) distutils enhancement for build and distribution py25-distribute @0.6.14 (python, devel) Replacement for setuptools py25-setuptools @0.6c11 (python, devel) distutils enhancement for build and distribution py26-distribute @0.6.14 (python, devel) Replacement for setuptools py26-setuptools @0.6c11 (python, devel) distutils enhancement for build and distribution py27-distribute @0.6.14 (python, devel) Replacement for setuptools py27-setuptools @0.6c11 (python, devel) distutils enhancement for build and distribution py31-distribute @0.6.14 (python, devel) Replacement for setuptools Found 8 ports.
ちょっと調べた情報は以下のような感じ。というわけで、とりあえず distribute 入れてみましょか。
- 元祖はsetuptools
- setuptoolsは最近メンテされていない、そして設計が古いらしい
- 後追いで来たのがdistribute
前回、python25, python26, python31 の3種類をportsでインストールしたので、それぞれのdistributeをインストールしてみる。
$ sudo port install py25-distribute py26-distribute py31-distribute
easy_installの切替
何事もなく成功したような気がする。とりあえず、前回と同じ感じで図解!
Python本体は、python_selectでシャキシャキと切り替えられるけど、easy_installがついてこない。なので、シンボリックリンク /opt/local/bin/easy_install の行き先を自力で切り替える必要があるっぽい。やー、めんどいけど。初心者には対応方法がわからんので、とりあえずがんばれ俺。python26なので、 /opt/local/bin/easy_install-2.6 に向いていればおk。かな。
$ python_select -spython26 $ ll `which easy_install`lrwxr-xr-x 1 root admin 31B 10 12 23:02 /opt/local/bin/easy_install@ -> /opt/local/bin/easy_install-2.6
easy_installの中身をのぞき見る
怖い物見たさで、easy_install のshebangを見てみる。
$ head -n1 `which easy_install` #!/opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python $ /opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python -V Python 2.6.6
…どこ向いてんだよオイオイオイオイ。また新しいpython実行ファイルや。しかし一応v2.6.6っぽい…。いいのかな…。まぁ、いいことにしよう。
なぜなら…。
この環境は直接は使わない
この先話すことのちょいと先取りになるけども。JavaにおけるMaven(2 or 3)は、1つのライブラリ(例えばcommons-langとか)でも複数のバージョンをインストール*3することができる。
が、Pythonのライブラリ(モジュールというらしい)は、インストールすると、常にclasspath上に乗っかってしまって、いつでも参照できる状態になる。つまり、同じライブラリの複数のバージョンを同時にインストールできないのだと思う(ちょっと不安だw)。
そして一般的に、1つのマシン上に複数のPythonプロジェクト*4が同居することになる。各々のプロジェクトで、使いたいPythonのバージョンや、インストールしておきたいPythonモジュールの種類やバージョンは異なるだろう。
Javaでは、classpathに入れるjarの種類を切り替えればいいので、簡単に環境を切り替えられる。しかしPythonではそうはいかないのだ。それを回避するために、virtualenvという仕組みを使う。
プロジェクト毎に「仮想Python環境」を作って、その環境下で開発するのだ。ちなみに、「仮想Python環境」の反対語は「グローバルPython環境」って言うのかな。上記のeasy_installでモジュールをインストールすると、そのモジュールは「グローバルPython環境」に入る。そしてグローバル環境に入ったモジュールは*5仮想環境からも参照できる。できてしまう。まぁ、メリットなのかデメリットなのかは状況次第だが。
というわけで、あーんまりグローバル環境にモジュールをインストールしない方がいいんじゃないかな、と思っている。
さて、次回はvirtualenvの話をする、多分。恐らく。