如何根据pyenv / virtualenv在neovim中为python语言服务器设置python解释器

问题描述

我在 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 文件,并粘贴以下内容,将 USERNAME 和 MY-VENV 替换为你的用户和 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