VimのPythonインターフェースから使うpythonは変更しにくくPYTHONPATHもちょっと違う

追記

このエントリーで書いてるquickrun.vimは古いものでした。
別のリポジトリで公開されているものがあり、巷でquickrunといえばその別のを指すみたいです。詳しくはどうやら古いquickrunを使っていたらしい事に気がついた - kanonjiの日記をみてください。このエントリーを見て古い方を入れちゃった方がいたら申し訳ないです。


Vimで書いたコードを直ぐ実行できるquickrun.vimプラグインを導入してみた - kanonjiの日記quickrun.vimを入れてから、Macにデフォルトで入ってたvimの代わりにMacVimをコマンドラインでも使うようにしました。すると、前は出てなかったエラーが出るようになったので、ちょっと調べてます。

Error detected while processing /path/to/.vim/bundle/quickrun/autoload/quickrun.vim:
line 549:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named threading

\rでquickrun使ったら、こんなエラーメッセージが出ます。ただ、動作はするようですぐ消えてしまいます。見るからにPythonのエラーメッセージです。

調べた事

quickrun.vimPythonインターフェースを使っている

if has('python')
python <

https://github.com/ujihisa/quickrun/blob/5d231832d94ed95dbab37994da8d90646ca4be4c/autoload/quickrun.vim#L515

ちょうどエラーの箇所がここです。if has('python')〜endifなので、Pythonインターフェースが使えないなら何もしないっぽいので、エラーが出つつも動いてるのはこれが理由っぽい。

Pythonインターフェースと素のPythonではPYTHONPATHが違う
if has('python')
python <<EOM
import sys 
print sys.version
print sys.path
EOM
endif

.vimrcにPythonインターフェースでsys.pathを出力するように仕込んでみました。

$ vim
'import site' failed; use -v for traceback
2.5.1 (r251:54863, May  5 2011, 18:37:34) 
[GCC 4.0.1 (Apple Inc. build 5465)]
['/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python25.zip',
'/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.5/',
'/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.5/plat-darwin',
'/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.5/plat-mac',
'/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.5/plat-mac/lib-scriptpackages',
'/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.5/../../Extras/lib/python',
'/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.5/lib-tk',
'/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.5/lib-dynload']

これがPythonインタフェースからのPYTHONPATH。

$ /usr/bin/python
Python 2.5.1 (r251:54863, May  5 2011, 18:37:34) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.path
['',
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip',
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5',
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin',
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac',
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages',
'/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python',
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk',
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload',
'/Library/Python/2.5/site-packages',
'/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC']

こっちが普通にPythonを起動した場合のPYTHONPATH。

  1. Pythonインターフェースの方には/Library/Python/2.5/site-packagesが無い。
  2. 似てるパスだけど〜〜/Versions/2.6/〜〜〜〜/Versions/2.5/〜〜の違いがある。

大きく分けてこんな違いがあって、とにかくPYTHONPATHは違うものを使っている様子。

Pythonのバージョン

上記でsys.pathを出すとき、ついでにsys.versionを出してみてます。これは同じバージョンを示しているので、Macのデフォルトである/usr/bin/pythonが使われているのが分かります。

$ type python
python is /Users/myuser/.pythonbrew/pythons/Python-2.7.2/bin/python

ただ、MacBookにはpythonbrewを入れてあって、自分の使うシェルではPATHはここに通ってます。そのシェルからvimを起動しているけど、どうやらPythonインターフェースから使うPythonには、このPATHは関係ないみたいです。

Pythonインターフェースが使うPythonVimコンパイル時に指定する必要があるらしい

http://lingr.com/room/vim/archives/2012/02-14#message-7799991で教えてもらいました。
そうするとMacVimはバイナリでダウンロードしてるので、実行するPythonをpythonbrewのにするのは、ちょっと無理そう。