やりたいこと
vim8でdeoplete.nvimを動かす
やったこと
- deopleteのGithubREADMEに従いインストール
- requirmentsに従い
pip install neovim
- requirmentsに従い
期待してたこと
- vim起動時にエラーが出ない
- neocomplete.vimを使ってたときのように、適宜補完が効く
実際に起こったこと
- vim起動時、以下のエラーが出る
[vim-hug-neovim-rpc] failed executing: pythonx import neovim [vim-hug-neovim-rpc] Vim(pythonx):Traceback (most recent call last): 続けるにはENTERを押すかコマンドを入力してください`
解決法
pip install neovim
のかわりに、
pacman -S python-neovim
すればいいのかな?
まったく自信ないです。
参考
調査メモ(読む価値ないです)
python全くわからんが、一応パッケージはインストールされてるっぽい?
~ $ python Python 3.6.5 (default, Apr 14 2018, 13:17:30) [GCC 7.3.1 20180406] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import neovim >>> import greenlet >>>
vimでもpython認識してるっぽい
:echo('pythonx') #=> 1 :echo('python3') #=> 1 :echo('python') #=> 1 :echo('python2') #=> 0
vimでgreenletが読み込めない。 ファイル開いたらバイナリっぽかった
:pythonx import neovim Traceback (most recent call last): File "<string>", line 1, in <module> File "/usr/lib/python3.6/site-packages/neovim/__init__.py", line 11, in <module> from .msgpack_rpc import (ErrorResponse, child_session, socket_session, File "/usr/lib/python3.6/site-packages/neovim/msgpack_rpc/__init__.py", line 10, in <module> from .session import ErrorResponse, Session File "/usr/lib/python3.6/site-packages/neovim/msgpack_rpc/session.py", line 6, in <module> import greenlet ImportError: /usr/lib/python3.6/site-packages/greenlet.cpython-36m-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
ほかの普通の?パッケージだとimportできるっぽい
:pythonx import pycurl #=> エラー出ない
https://bbs.archlinux.org/viewtopic.php?id=232873を見ると、greenletはpacman経由でも入れることが可能で、そちらだと動くっぽい?
sudo pacman -S python-greenlet :pythonx import greenlet #=> エラー出ない
neovimをpipで入れて、依存してるgreenletはpacmanで入れるって、大丈夫なのか?
なんかpacmanのリポジトリにpython-neovimってあるな。それ入れればいいか。
しかし、既存ディレクトリと衝突し、インストールできないとのこと。ログは以下の通り。
~ $ sudo pacman -S python-neovim 依存関係を解決しています... 衝突するパッケージがないか確認しています... パッケージ (4) neovim-0.2.2-5 python-greenlet-0.4.13-1 python-msgpack-0.5.6-1 python-neovim-0.2.6-1 合計インストール容量: 18.82 MiB :: インストールを行いますか? [Y/n] Y (4/4) キーリングのキーを確認 [##########] 100% (4/4) パッケージの整合性をチェック [##########] 100% (4/4) パッケージファイルのロード [##########] 100% (4/4) ファイルの衝突をチェック [##########] 100% エラー: 処理を完了できませんでした (衝突しているファイル) python-msgpack: /usr/lib/python3.6/site-packages/msgpack/__init__.py がファイルシステムに存在しています python-msgpack: /usr/lib/python3.6/site-packages/msgpack/__pycache__/__init__.cpython-36.pyc がファイルシステムに存在しています python-msgpack: /usr/lib/python3.6/site-packages/msgpack/__pycache__/_version.cpython-36.pyc がファイルシステムに存在しています python-msgpack: /usr/lib/python3.6/site-packages/msgpack/__pycache__/exceptions.cpython-36.pyc がファイルシステムに存在しています python-msgpack: /usr/lib/python3.6/site-packages/msgpack/__pycache__/fallback.cpython-36.pyc がファイルシステムに存在しています python-msgpack: /usr/lib/python3.6/site-packages/msgpack/_packer.cpython-36m-x86_64-linux-gnu.so がファイルシステムに存在しています python-msgpack: /usr/lib/python3.6/site-packages/msgpack/_unpacker.cpython-36m-x86_64-linux-gnu.so がファイルシステムに存在しています python-msgpack: /usr/lib/python3.6/site-packages/msgpack/_version.py がファイルシステムに存在しています python-msgpack: /usr/lib/python3.6/site-packages/msgpack/exceptions.py がファイルシステムに存在しています python-msgpack: /usr/lib/python3.6/site-packages/msgpack/fallback.py がファイルシステムに存在しています エラーが発生したため、パッケージは更新されませんでした。
メモにとってないが、いままでの調査中に、pipやらpacmanやらでneovimとgreenletを入れたり消したりしたような気がしている。衝突の原因はそれな気がする。
どういう副作用が出るかまったくわからないが、/usr/lib/python3.6/site-packages/msgpackディレクトリをmsgpack.bkにリネームした。おすすめしません。その後sudo pacman -S python-neovim
したらうまくいった。
差分は以下の通り。なんか違うね。
/u/l/p/site-packages $ diff msgpack msgpack.bk 共通のサブディレクトリー: msgpack/__pycache__ と msgpack.bk/__pycache__ バイナリーファイル msgpack/_packer.cpython-36m-x86_64-linux-gnu.so とmsgpack.bk/_packer.cpython-36m-x86_64-linux-gnu.so は異なります バイナリーファイル msgpack/_unpacker.cpython-36m-x86_64-linux-gnu.so とmsgpack.bk/_unpacker.cpython-36m-x86_64-linux-gnu.so は異なります
最後に念の為入れ直す。
sudo pacman -R python-neovim sudo pacman -R python-greenlet sudo pacman -S python-neovim
(いま知ったが、pacman -R
には--recursive
オプションがある。sudo pacman -Rs <package>
のほうがよかったか。)
以上で完了。vimは期待通り動く。なんかいろいろゴミを残している気がする。でももう面倒だからいいや。