1

通过通常的coc.nvim++设置, coc-pythonNeoVimjedi应该使用系统 Python 模块来运行它自己的插件,但 Jedi 应该能够自动完成安装在活动虚拟环境中的 Python 模块。我该如何设置?

我已经在全球范围内安装了 NeoVim 和pip install-ed Pylint 和 Jedi。我已经安装coc.nvimcoc-python在 NeoVim 中没有问题。我有系统 Python 3 路径~/.vimrc

let g:python3_host_prog = '/bin/python'

以及以下内容~/coc-settings.json

"python.pythonPath": "/bin/python",
"python.jediEnabled": true,
"python.jediPath": "/usr/lib/python3.9/site-packages",
"python.linting.pylintEnabled": true,
"python.linting.pylintPath": "/bin/pylint",
"python.linting.flake8Enabled": false

当我创建一个虚拟环境时,激活它,安装pygame然后在其中运行 NeoVim:

➜  python3 -m venv myenv && myenv/bin/activate
➜  pip install pygame
➜  nvim

linter 和 Python 3 提供程序都可以正常工作。然而,Jedi 完成了本地代码的成员,但没有完成pygame的成员,除非我也安装pygame在虚拟环境之外,即:

➜  deactivate
➜  pip install pygame
➜  myenv/bin/activate
➜  nvim

但是必须两次安装每个 Python 模块,这超出了使用虚拟环境的目的。

4

1 回答 1

1

找到了。在coc-settings.json

"python.pythonPath": "python",

NeoVim 必须始终使用/bin/python,但传递给 Jedi 的路径必须指向虚拟环境中的 Python 3,当它处于活动状态时,/bin/python当它不处于活动状态时。将 CoC 的 Python 路径设置为python让我们env来处理它:

➜  myenv/bin/activate
➜  which python
/home/test/foobar/myenv/bin/python
➜  deactivate
➜  which python
/bin/python
于 2021-02-18T14:13:43.053 回答