読者です 読者をやめる 読者になる 読者になる

Blank File

LinuxとかPythonとかVimとか、趣味でいじる感じで

Debian: vimでPythonとPython3の両方使えるようになってた(ように見えたけどそうでもなかった)

Vim Python Python3 Debian

やったことの垂れ流しです。最終的に、目的のこと(jediでvirtualenvにインストールされたパッケージの補完)はできませんでした。

経緯

以前はDebianUbuntuでは自前でvimをビルドしても+Pythonと+Python3を同時に有効にできないなどの問題がありました。

Debian系のLinuxでPython 2.xと3.xが同時利用できない問題の原因と対策 · Issue #301 · vim-jp/issues

先ほどの記事で「virtualenvでjedi(とRope)の動作が怪しい」と書きましたが、これの原因もvimの+python3が無効かつシステムのpythonを読んでいたためだったようです。

(参考)ラフなラボ: python2.7のvirtualenv(wrapper)でpython3環境使った時のjedi-vimで補完が効かなくてハマった話

ちなみに私が使ってるvimこことほぼ同じ手順と設定です。 Debianなので(最近vim側で対応したから?)pythonのpath設定がなかったりいくつかオプションが違いますが概ねこのとおりです。

というわけでDebian系だとPython2/3系をvimで同時に使うのはかなり面倒なことを覚悟して諦めかけたのですが、vim7.3の末期のパッチでこれ関係の対応が入ったような記憶がほんのりとあったり、Ubuntuの方でも対応が入っていたようなので、勢いでとりあえず+pythonと+python3でビルドしてみました。

Vimのビルド

vimのソースは最新で7.4.169を使いました。とりあえずconfigureをそのまま貼ります。ビルドとコンパイルの意味の違いはよくわかっていません。

./configure \
    --with-features=huge \
    --enable-multibyte \
    --enable-gui=gtk2 \
    --enable-perlinterp \
    --enable-pythoninterp \
    --enable-python3interp \
    --enable-rubyinterp \
    --enable-tclinterp \
    --enable-luainterp=dynamic \
    --with-lua-prefix=/usr \
    --enable-gpm \
    --enable-acl \
    --enable-cscope \
    --enable-fontset \
    --enable-xim \
    --enable-fail-if-missing

--enable-pythoninterp--enable-python3interpを同時に入れましたが普通に通りました。 Makeまで済ませて起動して、:versionを確認してみると、

f:id:h-miyako:20140209073346p:plain

ちゃんと+python/dyn, +python3/dynで有効になっています。私はダイナミックとスタティックの違いがよくわかっていないので動けばいいです。

動作確認

動けばいいのですが、オプションで有効になっていてもいざ実行すると動かなかったりするので、ついでに簡単に動かしてみました。

f:id:h-miyako:20140209074713g:plain

・・・どっちか片方しか使えないみたいですね。このあと再起動して、:python3 print('A')したらちゃんと動きました。その後の:ptyhon print 'A'は同じエラーでダメでしたけど。

・・・

気を取り直して、あらかじめ作っておいたpython3環境をjmcantrell/vim-virtualenv:VirtualEnvActivateしてみます。とりあえずエラーは出ませんでした。コードを書いてみるとjediで補完はできている感じです。が、この環境だけにとりあえずインストールしたewaveとかは補完候補にあがりません・・・どこから補完候補引っ張ってきてるんでしょうか。Shougo/neocomplete.vimを併用していたのでそっちを無効にして、補完は完全にjediだけの状態にしましたが結果は変わらず。なんとなくシステムのpython2っぽいです(調べるのが面倒になった)。

完全に冒頭で参考に挙げさせていただいたラフなラボさんと同じ症状です。コメント欄で指摘があるように、venvの利用も考えてみます。 でもあれ確か自動でpip入れてくれないんですよね・・・

とりあえずここまでにしておきます。補完関係は片っ端からシステムのほうに入れるという手段もあるので・・・

余談ですが、jediの補完そのままだと使いにくいですね。neocompleteの偉大さがわかりました。

追記

Debianの方でも一応議論はされたんですね。 #729924 - vim: Add Python 3 support - Debian Bug report logs

ざっと流し読みした感じ、vimがpython2と3を同時に使うにはDebianpython周りに修正が入らないと無理っぽく、しかもその修正を入れるつもりは無さそうです。嫌なら他のdistro使えと。かっこいい。RHEL系はアレな気配なのでArchLinuxでも試してみようかな・・・まぁ個人的にはそんなに問題になってないのでこれが原因で他系統のディストリに変えることはないと思います。