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

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

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

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

Python

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

解決済

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

tam1006
tam1006

総合スコア26

Vim

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

Python

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

1回答

0評価

0クリップ

65閲覧

投稿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をそのまま導入しています。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Vim

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

Python

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