【发布时间】:2021-01-22 14:35:49
【问题描述】:
我在 neovim (0.5) 中使用 pyright LSP。它可以工作,但似乎只选择标准 python 安装中可用的包。对于不在基本 python 中但在我的 pyenv 环境中的包,它不会自动完成。在 VSCode 中,这很容易通过选择解释器来完成。
如何在 Neovim 中设置 Pyright LSP 使用的虚拟环境或 pyenv 版本?
【问题讨论】:
我在 neovim (0.5) 中使用 pyright LSP。它可以工作,但似乎只选择标准 python 安装中可用的包。对于不在基本 python 中但在我的 pyenv 环境中的包,它不会自动完成。在 VSCode 中,这很容易通过选择解释器来完成。
如何在 Neovim 中设置 Pyright LSP 使用的虚拟环境或 pyenv 版本?
【问题讨论】:
这实际上不是一个答案,在 nvim-lsp 中存在这个问题,他们在其中探索了一些替代方案,结果证明 nvim(或 pyright,我不确切知道)不尊重/加载 pyenv local .python-版本文件。另一种方法是使用常规 venv。在运行 nvim 之前使用 pyenv shell myvenv 也可以,但它违背了 .python-version 文件的便利性。也许有一种方法可以在 bashrc/zshrc/config.fish 中使用一些脚本加载正确的 venv,但这又不是那么方便,恕我直言。
https://github.com/neovim/nvim-lspconfig/issues/717
编辑:找到了一个好的解决方案
有一种使用 pyenv virtualenvs 获得 pyright 工作的简单方法:
在你的项目的根目录下创建pyrightconfig.json文件,并粘贴以下内容,用你的用户和venv替换USERNAME和MY-VENV,假设你的pyenv安装在~/.pyenv。它在.python-version 之外添加了另一个文件,但它很简单,不会弄乱你的 shell 配置。
{
"venvPath": "/home/USERNAME/.pyenv/versions/",
"venv": "MY-VENV"
}
您可以在此处查看完整文档: https://github.com/microsoft/pyright/blob/master/docs/configuration.md
编辑 2: 查看我创建的这个插件pyenv-pyright。 有了它,您可以设置 pyright 以仅通过一个命令使用 pyenv venvs:
pyenv local my-venv
pyenv pyright
或
pyenv pyright my-venv
这将使用您选择的 pyenv virtualenv 自动创建/更新 pyrightconfig.json 文件。它是克服 neovim+pyright+pyenv virtualenvs 设置的便捷方法。
https://github.com/alefpereira/pyenv-pyright
【讨论】:
pyrightconfig.json 文件也适用于我。但是,我在项目根目录中使用了本地 .venv,所以我必须将 venvPath 设置为“。”和 venv 到 '.venv' 让它工作