タイトルの通り、vimでpythonを書きたくて vim + jedi + virtualenv + vim-virtualenv で環境を作ったものの、うまいこと補完がされなくて困ってました。とっても。何週間かハマってemacsに乗り換えようと何度も思ったけどようやっと解決したのでメモ。
解決方法がひっじょーーーーにださいのでうまい方法があれば教えてください。 (vim-virtualenvにpatchが正当かもしんない)
発生条件
- システムのpythonとvirtualenvで入れたpythoのバージョンが違う
[baba@bbair2012 ~]$ /usr/bin/python -V
Python 2.7.2
[baba@bbair2012 ~]$ ~/.virtualenvs/sandbox2.6/bin/python -V
Python 2.6.8
対策
正しいバージョン番号へシンボリックリンクを作成
workonした状態で↓を実行すればOK!
cat <&1 | sed -E 's/.*([0-9]\.[0-9])\..*/\1/')
VIRTUALENV_PYTHON_VERSION=\$(python -V 2>&1 | sed -E 's/.*([0-9]\.[0-9])\..*/\1/')
VIRTUALENV_LIB_PREFIX=\$(which python | sed -E 's@(.*)/bin/python@\1/lib/python@')
ln -s \${VIRTUALENV_LIB_PREFIX:?}\${VIRTUALENV_PYTHON_VERSION:?} \${VIRTUALENV_LIB_PREFIX:?}\${SYSTEM_PYTHON_VERSION:?}
FIN
・・・というのだけだとさすがにアレなので少し丁寧に書くとこんなかんじ。
[baba@bbair2012 ~]$ cd ~/.virtualenvs/sandbox2.6/lib/
[baba@bbair2012 lib]$ ls -al
total 0
drwxr-xr-x 3 baba staff 102 5 11 15:29 .
drwxr-xr-x 5 baba staff 170 5 3 10:09 ..
drwxr-xr-x 48 baba staff 1632 5 3 10:09 python2.6
[baba@bbair2012 lib]$ ln -s python2.6 python2.7
[baba@bbair2012 lib]$ ls -al
total 8
drwxr-xr-x 4 baba staff 136 5 11 15:29 .
drwxr-xr-x 5 baba staff 170 5 3 10:09 ..
drwxr-xr-x 48 baba staff 1632 5 3 10:09 python2.6
lrwxr-xr-x 1 baba staff 9 5 11 15:29 python2.7 -> python2.6
ちなみに動作確認方法は↓。
これでvirtualenv配下の lib/python2.7/site-packages/setuptools-0.6c11-py2.6.egg
とかが読み込まれてればokです。
[baba@bbair2012 ~]$ workon sandbox2.6
(sandbox2.6)[baba@bbair2012 ~]$ vim -c "set filetype=python" -c "python import sys;print sys.path"
この問題はまぁvirtualenvの activate_this.py
がダサいといえばダサいんだけど、それよりもコンパイル時に指定したpythonを固定で使い続けちゃうvimがイケてないなぁ。なんだかなぁ。なんだかねぇ。。。。
ともあれ、これでまだvimを使える。ヨカッタヨカッタ