もた日記

くだらないことを真面目にやる

Vimメモ : Pythonの動的リンクでライブラリがロードできない

wonderwall.hatenablog.com

pyenvでバージョン管理をしている環境でjedi-vimをインストールしたがVimを起動すると下記エラーが表示されて使えなかった。

function jedi#init_python の処理中にエラーが検出されました:
行    7:
Error: jedi-vim failed to initialize Python: jedi-vim requires Vim with support for Python 2 or 3. (in function jedi#init_python[3]..<SNR>109_init_python, 行 52)

下記コマンドの実行結果では+python3/dynとなっている。

$ vim --version | grep python
+cryptv          +linebreak       -python          +vreplace
+cscope          +lispindent      +python3/dyn     +wildignore

だが、Vim:echo has('python3')を実行すると1ではなく0が返ってきて、:python3 print("test")を実行すると以下のようにライブラリがロードできないと言われる。

E370: ライブラリ libpython3.5m.so.1.0 をロードできませんでした
E263: このコマンドは無効です,ごめんなさい: Pythonライブラリをロードできませんでした.



いろいろ調べたところ下記記事の方法で解決できた。

lambdalisue.hatenablog.com

最初にLD_LIBRARY_PATHにライブラリのパスを追加する方法を試してみたが、git cloneを実行すると何もせずに終了するという謎の挙動になったので-rpathを指定する方法を採用した。
具体的には./configureするときに-rpathオプションでライブラリのパスを指定してVimを再コンパイル。この方法で無事解決した。

$ LDFLAGS="-Wl,-rpath=${HOME}/.pyenv/versions/anaconda3-4.1.1/lib" ./configure --prefix=/usr/local --with-features=huge 
  --enable-multibyte
  --enable-rubyinterp=dynamic
  --enable-python3interp=dynamic
  --enable-luainterp=dynamic
  --enable-cscope
  --enable-fail-if-missing
$ make

入門 Python 3

入門 Python 3