Ubuntu Jaunty に upgrade した。
幾つかの拡張モジュールが動かなくなったのを期に、常用のPython環境を自分でビルドしたものからvirtualenvに変更。 .bashrc で PATH に追加した。
すると、meldをはじめ幾つかのパッケージが動かなくなった。見てみると、 #!/usr/bin/env python って…そこは #!/usr/bin/python として欲しかったな。
でも、virtualenv実行時に --no-site-packages をした覚えはない。 virtualenv だとディストリビューションパッケージはそのまま流用できると思って virtualenv したのに…と思って、 site.py とかを除いてみた。
Ubuntu では、 Python非標準パッケージを /usr/lib/python2.6/dist-packages にインストールしていた。普通は site-packages で、virtualenvもsite-packagesを期待しているので、うまくディストリビューションパッケージをimportできない。
virtualenv の lib/python2.6/site.py に次の修正を行って対策完了。
--- site.py.old 2009-04-22 13:46:01.000000000 +0900 +++ site.py 2009-04-22 13:26:57.000000000 +0900 @@ -215,7 +215,7 @@ sitedirs = [os.path.join(prefix, "lib", "python" + sys.version[:3], - "site-packages"), + "dist-packages"), os.path.join(prefix, "lib", "site-python"), os.path.join(prefix, "python" + sys.version[:3], "lib-dynload")] lib64_dir = os.path.join(prefix, "lib64", "python" + sys.version[:3], "site-packages")
先にに書いた方法だと、逆に virtual/lib/python2.6/site-packages がパスに追加されない。
正しくはこう。
--- site.py.old 2009-04-22 13:46:01.000000000 +0900 +++ site.py 2009-04-23 13:40:38.000000000 +0900 @@ -212,10 +212,15 @@ "python" + sys.version[:3], "site-packages")] elif os.sep == '/': - sitedirs = [os.path.join(prefix, + sitedirs = [ + os.path.join(prefix, "lib", "python" + sys.version[:3], "site-packages"), + os.path.join(prefix, + "lib", + "python" + sys.version[:3], + "dist-packages"), os.path.join(prefix, "lib", "site-python"), os.path.join(prefix, "python" + sys.version[:3], "lib-dynload")] lib64_dir = os.path.join(prefix, "lib64", "python" + sys.version[:3], "site-packages")