dshimizu/blog/alpha

とりとめのないITブログ

Debian 11 を 12 にアップグレードしたら Neovim でエラーが出るようになった

はじめに

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 プラグインでエラーが出るようになっていました。それを修正する手順を記載しました。

参考