質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2180閲覧

neovimで、virtualenvで設定したpythonで補完をしたい

tam1006

総合スコア28

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/06/23 13:57

前提

これまでvscodeを使っていましたが、neovimを使おうと思い設定をしているのですが、pyenvのvirtualenvを用いた設定が上手くできません。つまり、編集しているフォルダのvirtualenvで指定されているpythonに応じて、pythonのファイルの補完が変わってほしいです。例えば、numpyをインストールしている仮想環境では、import numpy as npにneovim上で警告が表示されず、numpyをインストールしていない仮想環境では、neovim上で警告が表示されてほしいです。

行ったこと

:help provider-python

をしてみると、

PYTHON VIRTUALENVS python-virtualenv If you plan to use per-project virtualenvs often, you should assign one virtualenv for Neovim and hard-code the interpreter path via g:python3_host_prog so that the "pynvim" package is not required for each virtualenv. Example using pyenv: pyenv install 3.4.4 pyenv virtualenv 3.4.4 py3nvim pyenv activate py3nvim python3 -m pip install pynvim pyenv which python # Note the path The last command reports the interpreter path, add it to your init.vim: let g:python3_host_prog = '/path/to/py3nvim/bin/python'

とりあえず、neovimのPluginなどで使う用に、neovimだけで使うvirtualenvを用意すれば良いということのようなので、バージョンだけ自分の環境に合わせて言われた通りに行いました。

pyenv virtualenv 3.8.13 neovim3 pyenv activate neovim3 python3 -m pip install pynvim pyenv which python # Note the path

最後のpyenv which pythonで出てきたパスを用いて、

let g:python3_host_prog = '/path/to/py3nvim/bin/python'

と設定しました。

そして:checkhealthをすると、

## Python 3 provider (optional) - INFO: pyenv: Path: /opt/homebrew/Cellar/pyenv/2.3.1/libexec/pyenv - INFO: pyenv: Root: /opt/homebrew/var/pyenv - INFO: Using: g:python3_host_prog = "/opt/homebrew/var/pyenv/versions/neovim3/bin/python" - INFO: Executable: /opt/homebrew/var/pyenv/versions/neovim3/bin/python - INFO: Python version: 3.8.13 - INFO: pynvim version: 0.4.3 - OK: Latest pynvim is installed.

と、ここまでは問題ありません。

また、virtualenvを設定していないフォルダ(.python-versionが今の階層よりも上にないフォルダ)では、上の出力に続いて、

## Python virtualenv - OK: no $VIRTUAL_ENV

となり、見た目通り何も問題がないのですが、実際の開発で用いるように、virtualenvを設定しているフォルダにおいては、

## Python virtualenv - WARNING: $VIRTUAL_ENV is set to: /opt/homebrew/var/pyenv/versions/3.10.3/envs/{VIRTUALENV_NAME} And its /bin directory contains: python, python3, python3.10 But $PATH yields this python executable: /opt/homebrew/var/pyenv/versions/{VIRTUALENV_NAME}/bin/python And $PATH in subshells yields this python executable: /opt/homebrew/var/pyenv/versions/{VIRTUALENV_NAME}/bin/python And $PATH yields this python3 executable: /opt/homebrew/var/pyenv/versions/{VIRTUALENV_NAME}/bin/python3 And $PATH in subshells yields this python3 executable: /opt/homebrew/var/pyenv/versions/{VIRTUALENV_NAME}/bin/python3 And $PATH yields this python3.10 executable: /opt/homebrew/var/pyenv/versions/{VIRTUALENV_NAME}/bin/python3.10 And $PATH in subshells yields this python3.10 executable: /opt/homebrew/var/pyenv/versions/{VIRTUALENV_NAME}/bin/python3.10 So invoking Python may lead to unexpected results. - ADVICE: ▏ - $PATH ambiguities arise if the virtualenv is not properly activated prior to launching Nvim. Close Nvim, activate the virtualenv, check that invoking Python from the command line launches the correct one, then relaunch Nvim. ▏ - $PATH ambiguities in subshells typically are caused by your shell config overriding the $PATH previously set by the virtualenv. Either prevent them from doing so, or use this workaround: https://vi.stackexchange.com/ a/34996

というような警告が表示されます。
警告で、So invoking Python may lead to unexpected results. とあるように、このままだと、virtualenvで指定しているpythonのバージョンで補完が効きません。
つまり、例えば、virtualenvで指定しているpythonでは、numpyが入っているとして、次の.pyファイルをnvimで作ると、

import numpy as np
import numpy as np ●● "np" is not accessed

というようにneovimの機能で警告が表示されてしまいます。

実現したいこと

先程の、Python virtualenv におけるWARNINGを解決したいです。

補足情報(FW/ツールのバージョンなど)

環境は、
M1
Mac OS Monterey: 12.4
NEOVIM_VERSION=0.7.0
NVM_VERSION=0.39.1
NODE_VERSION=18.0.0

また、Ubuntu20.04でも試しましたが、全く同様の問題が生じました。

init.vimなどはhttps://github.com/Optixal/neovim-init.vimをそのまま導入しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

↓自分と同じ問題の解決策
https://stackoverflow.com/questions/65847159/how-to-set-python-interpreter-in-neovim-for-python-language-server-depending-on

↓上のstackoverflowの回答者の方が作ったpyenvのプラグイン
https://github.com/alefpereira/pyenv-pyright

このpyenvのプラグインを用いることでうまく動きました。
要するに、.python-versionのあるフォルダに以下の構造のpyrightconfig.jsonというファイルを作成すると良いとのことです。

{
"venvPath": "/home/USERNAME/.pyenv/versions/",
"venv": "MY-VENV"
}

投稿2022/06/24 12:15

tam1006

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問