[python]MacPortsで入れたPythonでeasy_install

前回は2.5、2.6、3.x系など、バージョンの違い : うえちょこ@ぼろぐにてSnowLeopard標準のPython 2.6ではなく、GAE用にMacPortsを利用してPython 2.5とpython_selectをインストールしました

さて、Pythonにはphpでいうpear/peclコマンド、perlでいうcpanコマンドに当たるようなeasy_installというコマンドがあるようです。PyPI(Python Package Index)というレポジトリから文字通り簡単にライブラリが追加できるコマンドのようです。このコマンドはsetuptoolsというパッケージ(なのかな?)に含まれています。あーありがち – Pyに触ってみたの途中にある比較表が分かりやすいです。

このeasy_installというコマンドもどうやらPythonのインストール環境に依存しているようです。つまりMacPortsで入れたPython専用にeasy_installコマンドがちゃんと用意されています。といってもこれもMacPortsでインストールする必要があります。たとえば、私がインストールしたPython 2.5用のeasy_installコマンドはpy25-setuptoolsというパッケージに含まれています。インストールは以下のような感じになります。
[shcode]
sudo port install py25-setuptools
[/shcode]

インストールしたeasy_installコマンドのパスを確認しておきましょう。普通のeasy_installコマンドは、デフォルトではSnowLeopardに標準で入っているpython26-apple用のものです。
[shcode]
$ which easy_install
/usr/bin/easy_install
[/shcode]
MacPortsで入れたPythonのeasy_installコマンドは別のところにあります。
[shcode]
$ ls /opt/local/bin/easy_install-2.5
/opt/local/bin/easy_install-2.5
[/shcode]

本当にコマンドが違うものなのかどうか、以下のような実験をしてみました(Mac OS X 10.6.4)。

    • 「sudo python_select python25」でMacPortsでインストールしたPython 2.5に切り替え
    • 「sudo /opt/local/bin/easy_install-2.5 django」でDjangoライブラリをインストール
    • 「python」でインタプリタ起動
    • 「>>> import django」でdjangoモジュールを読み込んでもエラーはでない。
    • 「>>> quit()」でインタプリタ終了
    • 「sudo python_select python26-apple」でSnowLeopard標準のPython 2.6に切り替え
    • 「python」でインタプリタ起動
    • 「>>> import django」でdjangoモジュールを読み込むと、「ImportError: No module named django」で読み込めない。
    • 「>>> quit()」でインタプリタ終了
    • 「sudo python_select python25」でMacPortsでインストールしたPython 2.5に切り替え
    • 「sudo /opt/local/bin/easy_install-2.5 django」でDjangoライブラリをインストール
    • 「python」でインタプリタ起動
    • 「>>> import django」でdjangoモジュールを読み込んでもエラーはでない。
    • 「>>> quit()」でインタプリタ終了

ということで、インストールした環境に応じてeasy_installコマンドは違いますので注意しましょう。

参考:あーありがち – Pyに触ってみた

About: uechoco


One thought on “[python]MacPortsで入れたPythonでeasy_install”

  1. > 「sudo python_select python25」でMacPortsでインストールしたPython 2.5に切り替え
    このときのコマンドは 「sudo port select –set python python25」 ではありませんか?

Comments are closed.