MacPorts版Pythonでvirtualenv

MacPortsPythonでvirtualenvを使おうとしてはまったので解決方法を記しておきます.問題は

$ virtualenv --no-site-packages env

が使えないということです.Upgrade 1.9.7 -> 2.0b1 without Virtualenv - TurboGears | Google グループによると,これはMacPortsPythonの問題で,9月に報告されているけど何の返信も無い.MacPorts版はいろいろいじってるから,トラブルを避けるために公式のPythonを使いなさいとのこと.

公式版Pythonをインストール

公式サイトからPython 2.5.4のMac版をダウンロードしてインストールしました.公式版Pythonはバイナリを/usr/local/bin/に,ライブラリを/Library/Frameworks/Python.framework/に,サードパーティのパッケージを/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/にインストールします.元々インストールされているApplePythonMacPortsPythonと重複することはありません.
公式版Pythonとsetuptoolsでいくなら,MacPortsPythonを無効にしてやればOKです.公式版Pythonを使いつつパッケージはMacPortsで管理したい人は以下のコマンドは実行せずに進んでください.

$ sudo port deactivate python25

公式版PythonMacPortsのパッケージ使う

setuptoolsはインストール後の管理機能が不十分なので,パッケージはMacPortsからインストールするようにします.MacPortsPythonは有効にしておく必要があります.公式版には少なくとも以下のパッケージは含まれているので,MacPortsから無効にしてください.他にもあるかもしれませんが….

  • readline
  • hashlib
  • zlib
  • sqlite3

まず,ハードリンクを削除してMacPortsPythonを優先的に使用しないようにします.

$ sudo rm /opt/local/bin/python

次にMacPorts版のsite-packagesにシンボリックリンクを張ります.

$ cd /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5
$ sudo mv site-packages site-packages.orig
$ sudo ln -s /opt/local/lib/python2.5/site-packages/ site-packages

最後にvirtualenvのコマンドを編集し,1行目のshebangを変更します.

$ sudo vim /opt/local/bin/virtualenv
#!/opt/local/Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python

を次のようにします.

#!/usr/local/bin/python

IPython等のコマンドも同様に変更してください.これで使えるようになりました.

$ virtualenv --no-site-packages env

とすると,全てうまくいくはずです.