Vim/NeovimでPythonの実行パスを設定・確認する方法
Python製の補完・LSPクライアントプラグインを導入すると、たいてい「Python providerが見つかりません」といった警告に出会います。プラグインを個別に疑う前に、まずPython連携そのものが有効になっているかを確認・設定しておくと解決が早くなります。
目次(10項目)
Pythonのパスを指定する
Vim・Neovimいずれでも、設定方法は共通で次のオプションを使います。
let g:python3_host_prog = '{Python3実行ファイルのパス}'
これを設定ファイル(.vimrc / init.vim / init.lua)に記載します。
" Linux/Mac
let g:python3_host_prog = '/usr/bin/python3'
" Windows
let g:python3_host_prog = 'C:\Python312\python.exe'
Python2向けのg:python_host_progという設定も存在しますが、Python 2自体がすでにサポート終了しているため、新規に設定する意味はほぼありません。古い記事でこの設定を見かけても、今から導入する必要はありません。
設定値を確認する
:echo g:python3_host_prog
指定したパスがそのまま表示されればOKです。ただし、このコマンドはあくまで「設定した値」を表示するだけで、そのパスが実際に有効かまでは保証しません。
Pythonが有効になっているか確認する
設定したパスが実際に認識されているかは、次のいずれかの方法で確認できます。
| 方法 | 実行 | 分かること |
|---|---|---|
| has()関数 | :echo has('python3') | 1なら有効、0なら無効 |
| 実行して確認 | :py3 print('OK') | エラーなくOKが出れば有効 |
| Neovimのみ | :checkhealth provider | 実際に使われているパスとバージョンまで明示 |
Neovimなら:checkhealthが最も確実
Neovimには:checkhealthコマンドがあり、Python連携の状態もここでまとめて確認できます。複数バージョンのPythonをインストールしている環境だとhas('python3')だけでは判断しづらいことがありますが、checkhealthなら実際に使われているパスとバージョンが明示されるので確実です。困ったら、まずこちらを実行するのが確実です。
g:python3_host_progでパスを明示し、Neovimなら:checkhealth providerで最終確認するのが最も迷いにくくなります。
Python連携を無効化したい場合
そもそもPython連携するプラグインを使っておらず、checkhealthの警告が煩わしいだけという場合は、次の設定で無効化できます。
let g:loaded_python3_provider = 0
無効化しておけば、起動時のプロバイダ探索処理自体が省略されるため、わずかながら起動も速くなります。
仮想環境を切り替えるたびにPython連携が壊れて困っていましたが、pyenvなどでバージョンを切り替えず、専用のPython実行ファイルを1つ用意してg:python3_host_progで固定するようにしたら安定しました。仮想環境と紐付けようとすると環境を切り替えるたびに設定し直す羽目になるので、Neovim用は専用に分けておくのがおすすめです。
指すべきPythonと pynvim
g:python3_host_prog に指定するPythonには、pynvim が入っている必要があります。パスだけ合っていても、そのPythonに pynvim が無ければ連携は動きません。
python3 -m pip install --user pynvim
:echo has('python3') " 1 なら使える
プロジェクトごとの仮想環境を指定するのは避けてください。仮想環境を切り替えるたびにNeovimの連携が壊れますし、その環境に pynvim を入れることになってプロジェクトの依存関係も汚れます。Neovim専用の仮想環境を1つ作ってそこを指すか、システムのPythonを指すのが定石です。
起動が遅いと感じたら
g:python3_host_prog を指定していないと、Neovimは起動時に使えるPythonを自分で探します。パスの通った場所を順に見ていくので、環境によってはこれが数十ミリ秒から数百ミリ秒の待ち時間になります。
明示的にパスを書いておけば探索が省かれます。使っていないなら無効化するのがいちばん速く、let g:loaded_python3_provider = 0 を書けば探索そのものが走りません。起動時間が気になる人は、Ruby・Node・Perlの各プロバイダも同じ形で無効化できます。
Vim側はビルド時に決まっている
Neovimは外部プロセスとしてPythonを呼びますが、Vimは本体にPythonを組み込む方式です。そのため、使っているVimがPythonを組み込んでビルドされていなければ、パスを指定しても使えません。
vim --version | grep python
" +python3 なら使える / -python3 なら使えない
-python3 と表示された場合は、Pythonを有効にしてビルドされたVimを入れ直すことになります。パッケージ管理システムによっては別のパッケージ名で提供されているので、そちらを探してください。Neovimの状態確認はcheckhealthの記事にまとめています。
まとめ
Python連携で困ったら、g:python3_host_progでパスを明示し、has('python3')または:checkhealth providerで状態を確認します。この2段階を押さえておけば、大半のPython連携トラブルは切り分けられます。設定した内容が効いているかは:checkhealthで確認できます。設定そのものをどのファイルに書くかは設定ファイルの配置場所を見てください。