はじめに
Debian 12 にアップグレードして Neovim を起動したら以下のようなエラーが出るようになりました。
[deoplete] deoplete requires Python3 support("+python3"). VimEnter Autocommands for "*"..function deoplete#enable[9]..deoplete#initialize[1]..deoplete#init#_initialize[15]..deoplete#init#_channel[59]..VimEnter Autocommands for "*"..function deoplete#enable[9]..deoplete#initialize[1]..deoplete#init#_initialize[15]..deoplete#init#_channel[42]..deoplete#init#_python_version_check の処理中にエラーが検出されました: 行 8: E319: No "python3" provider found. Run ":checkhealth provider"
どうも Python の環境に問題がありそうです。
解決手順
:checkhealth provider
を実行しろ、と言われているので実行してみたら以下のような出力がありました。
============================================================================== provider: health#provider#check Clipboard (optional) ~ - WARNING No clipboard tool found. Clipboard registers (`"+` and `"*`) will not work. - ADVICE: - :help |clipboard| Python 3 provider (optional) ~ - WARNING No Python executable found that can `import neovim`. Using the first available executable for diagnostics. - WARNING Could not load Python 3: /usr/bin/python3 does not have the "neovim" module. python3.10 not found in search path or not executable. python3.9 not found in search path or not executable. python3.8 not found in search path or not executable. python3.7 not found in search path or not executable. python not found in search path or not executable. - ADVICE: - See :help |provider-python| for more information. - You may disable this provider (and warning) by adding `let g:loaded_python3_provider = 0` to your init.vim - Executable: Not found Python virtualenv ~ - OK no $VIRTUAL_ENV Ruby provider (optional) ~ - WARNING `ruby` and `gem` must be in $PATH. - ADVICE: - Install Ruby and verify that `ruby` and `gem` commands work. Node.js provider (optional) ~ - Node.js: v18.14.0 - WARNING Missing "neovim" npm (or yarn, pnpm) package. - ADVICE: - Run in shell: npm install -g neovim - Run in shell (if you use yarn): yarn global add neovim - Run in shell (if you use pnpm): pnpm install -g neovim - You may disable this provider (and warning) by adding `let g:loaded_node_provider = 0` to your init.vim Perl provider (optional) ~ - WARNING "Neovim::Ext" cpan module is not installed - ADVICE: - See :help |provider-perl| for more information. - You may disable this provider (and warning) by adding `let g:loaded_perl_provider = 0` to your init.vim
いくつかの provider があるようですが、Python3 のところで /usr/bin/python3 does not have the "neovim" module.
といったような出力ありました。
仮想環境を作成します。
% python3 -m venv ~/.local/venv
仮想環境を有効化します。
% cd ~/.local/venv % source bin/activate (venv) %
パスが通り、使えるようになりました。
(venv) % which python3 /home/dshimizu/.local/venv/bin/python3
~/.config/nvim/init.vim
を開き、以下の設定を追加します。
let g:python3_host_prog = '~/.local/venv/bin/python3'
この状態で Neovim を起動すると以下のようなエラーが出ます。
[deoplete] deoplete failed to load. Try the :UpdateRemotePlugins command and restart Neovim. See also :checkhealth.
:UpdateRemotePlugins
を実行すると以下のようなエラーが出ました。
function remote#host#UpdateRemotePlugins[6]..<SNR>103_RegistrationCommands[15]..remote#host#Require[10]..provider#pythonx#Require[12]..provider#Poll, 行 7 Vim(if):Error invoking 'poll' on channel 7:^@ch 7 was closed by the client function remote#host#UpdateRemotePlugins[6]..<SNR>103_RegistrationCommands[15]..remote#host#Require[10]..provider#pythonx#Require[12]..provider#Poll, 行 17 Failed to load python3 host. You can try to see what happened by starting nvim with $NVIM_PYTHON_LOG_FILE set and opening the generated log file. Also, the host stderr is available in messages. remote/host: generated rplugin manifest: /home/dshimizu/.local/share/nvim/rplugin.vim
:checkhealth
を実行すると以下のようなエラーが出ました。
============================================================================== deoplete: health#deoplete#check deoplete.nvim ~ - OK exists("v:t_list") was successful - OK has("timers") was successful - OK has("python3") was successful - OK Require Python 3.6.1+ was successful - OK Require msgpack 1.0.0+ was successful - If you're still having problems, try the following commands: - $ export NVIM_PYTHON_LOG_FILE=/tmp/log - $ export NVIM_PYTHON_LOG_LEVEL=DEBUG - $ nvim - $ cat /tmp/log_{PID} - and then create an issue on github ============================================================================== nvim: require("nvim.health").check() Configuration ~ - OK no issues found Runtime ~ - OK $VIMRUNTIME: /home/daisukeshimizu/.local/neovim/share/nvim/runtime Performance ~ - OK Build type: Release Remote Plugins ~ - OK Up to date terminal ~ - key_backspace (kbs) terminfo entry: `key_backspace=\177` - key_dc (kdch1) terminfo entry: `key_dc=\E[3~` - $SSH_TTY="/dev/pts/0" ============================================================================== provider: health#provider#check Clipboard (optional) ~ - WARNING No clipboard tool found. Clipboard registers (`"+` and `"*`) will not work. - ADVICE: - :help |clipboard| Python 3 provider (optional) ~ - Using: g:python3_host_prog = "~/.local/venv/bin/python3" - Executable: /home/dshimizu/.local/venv/bin/python3 - ERROR Command error (job=9, exit code 1): `'/home/dshimizu/.local/venv/bin/python3' -c 'import sys; sys.path = [p for p in sys.path if p != ""]; import neovim; print(neovim.__file__)'` (in '/home/dshimizu/.local/venv') stderr: Traceback (most recent call last): File "<string>", line 1, in <module>ModuleNotFoundError: No module named 'neovim' - Python version: 3.11.2 - pynvim version: unable to load neovim Python module - ERROR pynvim is not installed. Error: unable to load neovim Python module - ADVICE: - Run in shell: /home/dshimizu/.local/venv/bin/python3 -m pip install pynvim Python virtualenv ~ - $VIRTUAL_ENV is set to: /home/dshimizu/.local/venv - Python version: 3.11.2 - OK $VIRTUAL_ENV provides :!python. Ruby provider (optional) ~ - WARNING `ruby` and `gem` must be in $PATH. - ADVICE: - Install Ruby and verify that `ruby` and `gem` commands work. Node.js provider (optional) ~ - Node.js: v18.14.0 - WARNING Missing "neovim" npm (or yarn, pnpm) package. - ADVICE: - Run in shell: npm install -g neovim - Run in shell (if you use yarn): yarn global add neovim - Run in shell (if you use pnpm): pnpm install -g neovim - You may disable this provider (and warning) by adding `let g:loaded_node_provider = 0` to your init.vim Perl provider (optional) ~ - WARNING "Neovim::Ext" cpan module is not installed - ADVICE: - See :help |provider-perl| for more information. - You may disable this provider (and warning) by adding `let g:loaded_perl_provider = 0` to your init.vim ============================================================================== vim.lsp: require("vim.lsp.health").check() - LSP log level : WARN - Log path: /home/dshimizu/.local/state/nvim/lsp.log - Log size: 2620 KB vim.lsp: Active Clients ~ - copilot (id=1, root_dir=nil) ============================================================================== vim.treesitter: require("vim.treesitter.health").check() - Nvim runtime ABI version: 14 - OK Parser: c ABI: 13, path: /home/dshimizu/.local/neovim/lib/nvim/parser/c.so - OK Parser: lua ABI: 13, path: /home/dshimizu/.local/neovim/lib/nvim/parser/lua.so - OK Parser: query ABI: 14, path: /home/dshimizu/.local/neovim/lib/nvim/parser/query.so - OK Parser: vim ABI: 14, path: /home/dshimizu/.local/neovim/lib/nvim/parser/vim.so - OK Parser: vimdoc ABI: 14, path: /home/dshimizu/.local/neovim/lib/nvim/parser/vimdoc.so
Python の neovim モジュールが見つからない、といったような出力があるので、Python3 の venv 仮想環境が有効な状態で pip でパッケージをインストールします。
(venv) % python3 -m pip install pynvim
この状態で再度 Neovim を起動して、:UpdateRemotePlugins
を実行すると、エラーが出ることなく利用可能になりました。
$HOEM/.local/share/nvim/rplugin.vim
というファイルに Python3 プラグインの情報が追記されていました。
% cat /home/dshimizu/.local/share/nvim/rplugin.vim " perl plugins " node plugins " python3 plugins call remote#host#RegisterPlugin('python3', '/home/dshimizu/.config/nvim/dein/.cache/init.vim/.dein/rplugin/python3/deoplete', [ \ {'sync': v:false, 'name': '_deoplete_init', 'type': 'function', 'opts': {}}, \ ]) " ruby plugins " python plugins
まとめ
Debian 12 にアップグレードしたら Python3 が PEP 668 に則る形になり pip でのグローバルなインストールができなくなったことで Neovim プラグインでエラーが出るようになっていました。それを修正する手順を記載しました。