Visual Studio 代码 pylint:无法导入 'protorpc'

Visual Studio Code pylint: Unable to import 'protorpc'

我正在使用 pylint in Visual Studio Code to develop a Google App Engine (GAE) Cloud Endpoint API in Python. I'm unable to resolve a lint error. I don't know what's causing the error, but at a guess, pylint 找不到 protorpc 库?

Troubleshooting Linting 中推荐的修复方法是将工作区设置配置为指向完全限定的 python 可执行文件。我已经这样做了,但是 lint 错误仍然存​​在。

protorpc 本身安装到:

~/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0/protorpc

...这包含无法导入的 remote.py 模块:

__init__.py             generate_python.py      protojson.py            transport.py
definition.py           google_imports.py       protourlencode.py       util.py
descriptor.py           message_types.py        registry.py             webapp
generate.py             messages.py             remote.py               wsgi
generate_proto.py       protobuf.py             static

我已将此路径添加到 $PYTHONPATH(连同 kitchen sink):

export GOOGLE_CLOUD_SDK=~/google-cloud-sdk
export APPENGINE_PATH=$GOOGLE_CLOUD_SDK/platform/google_appengine

export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib/googlecloudsdk
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib/googlecloudsdk/api_lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/platform/google_appengine/lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/platform/google_appengine/lib/protorpc-1.0/protorpc

应用程序在本地和部署时运行,所以这似乎只是一个 lint 错误,但令人沮丧的是我无法解决它。

Using third-party libraries 状态:

The Python runtime in the standard environment includes the Python standard library, the App Engine libraries, and a few bundled third-party packages.

因此,我 假设 'the App Engine libraries' 包括 protorpc,但我不确定。此外,Adding the Cloud Endpoints Frameworks library to the sample API 只需要将 google-endpoints 安装到应用程序的 lib 目录:

pip install -t lib google-endpoints --extra-index-url=https://gapi-pypi.appspot.com/admin/nurpc-dev --ignore-installed

我的意思是,我认为我没有安装任何东西,而且我认为我的(网络)应用程序的 lib 目录中没有遗漏任何东西。

打开 Visual Studio 代码 (settings.json) 的设置文件并将库路径添加到 "python.autoComplete.extraPaths" 列表。

"python.autoComplete.extraPaths": [
    "~/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2",
    "~/google-cloud-sdk/platform/google_appengine",
    "~/google-cloud-sdk/lib",
    "~/google-cloud-sdk/platform/google_appengine/lib/endpoints-1.0",
    "~/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0"
],

我通过将 protorpc 库添加到 $PYTHONPATH 环境变量来解决这个问题。具体来说,我指向安装在我的 App Engine 目录:

中的库
export PYTHONPATH=$PYTHONPATH:/Users/jackwootton/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0

将此添加到 ~/.bash_profile 后,重新启动我的机器和 Visual Studio 代码,导入错误消失了。

为了完整起见,我没有修改与Python相关的任何Visual Studio代码设置。完整 ~/.bash_profile 个文件:

export PATH=/Users/jackwootton/protoc3/bin:$PATH

export PYTHONPATH=/Users/jackwootton/google-cloud-sdk/platform/google_appengine

export PYTHONPATH=$PYTHONPATH:/Users/jackwootton/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0

# The next line updates PATH for the Google Cloud SDK.
if [ -f '/Users/jackwootton/google-cloud-sdk/path.bash.inc' ]; then source '/Users/jackwootton/google-cloud-sdk/path.bash.inc'; fi

# The next line enables shell command completion for gcloud.
if [ -f '/Users/jackwootton/google-cloud-sdk/completion.bash.inc' ]; then source '/Users/jackwootton/google-cloud-sdk/completion.bash.inc'; fi

更改库路径对我有用。点击 Ctrl + Shift + P 并输入 python interpreter 并选择显示的可用选项之一。一个是熟悉的(正如之前运行良好的 virtualenv 所指出的那样)并且它有效。记下您正在使用的 python 版本,2.7 或 3.x 并相应地选择

我没有尝试过所有的可能性,但至少我觉得这可能是一个 python 版本相关的问题。不知道为什么,我就是相信自己的直觉。

因此我将python路径更改为python3(默认值:python):

"python.pythonPath": "python3"

我重新安装了依赖项(包括 pylint!!!)

pip3 install <package> --user

...重新启动 vs code 后,一切看起来都很好。

HTH启

visual studio默认设置应与解释器路径相同。

Change VS code default setting: windows:文件 > 首选项 > 设置

{
    "python.pythonPath": "C:\Users\Anaconda3\pythonw.exe",
    "workbench.startupEditor": "newUntitledFile"
}

找到合适的口译员: windows: Ctrl+Shift+P->select 解释器:

该解释器的路径应与您正在使用的版本相同。

首先我会检查 python3 它所在的路径

然后在 VS Code 设置中添加该路径,例如:

"python.pythonPath": "/usr/local/bin/python3"

我遇到了同样的问题 (VS Code)。已通过以下方法解决

1) Select 命令面板中的解释器命令 (Ctrl+Shift+P)

2) 搜索 "Select Interpreter"

3) Select安装的python目录

参考:- https://code.visualstudio.com/docs/python/environments#_select-an-environment

即使在确认从我的虚拟环境中使用了正确的 pythonpylint 后,我仍然收到这些错误。

最终我发现在 Visual Studio 代码中我是 A) 打开我的项目目录,这是 B) 我的 Python 虚拟环境所在的位置,但我是 C) 运行 我的主要 Python 程序从两个层次更深。这三件事需要同步才能正常工作。

以下是我的推荐:

  1. 在 Visual Studio 代码中,打开包含主 Python 程序的目录。 (这可能是也可能不是项目目录的顶层。)

  2. Select终端菜单>新建终端,直接在同一目录下创建虚拟环境

    python3 -m venv env
    
  3. 在虚拟环境中安装pylint。如果您 select 侧边栏中的任何 Python 文件,Visual Studio Code 将为您执行此操作。或者,source env/bin/activate 然后 pip install pylint.

  4. 在编辑器 window 的蓝色底栏中,选择 Python 解释器 env/bin/python。或者,转到“设置”并设置 "Python: Python Path." 这会在 Settings.json 中设置 python.pythonPath

对于您的情况,将以下代码添加到 vscode 的 settings.json

"python.linting.pylintArgs": [
    "--init-hook='import sys; sys.path.append(\"~/google-cloud-sdk/platform/google_appengine/lib\")'"
]

对于其他使用 pip 包有问题的人,您可以使用

"python.linting.pylintArgs": [
    "--init-hook='import sys; sys.path.append(\"/usr/local/lib/python3.7/dist-packages\")'"
]

您应该将上面的 python3.7 替换为您的 python 版本。

我在 vscode 上遇到了同样的错误,我安装了一个库,当 运行 来自终端时代码工作,但由于某种原因,vscode pylint 是无法选择返回臭名昭著的错误的已安装软件包:

Unable to import 'someLibrary.someModule' pylint(import-error)

问题可能是由于多个 Python 安装引起的。基本上你已经在一个上安装了 library/package,并且安装了 vscode pylint 和另一个安装的 运行。例如,在 macOS 和许多 Linux 发行版上,默认安装了 Python2,当您安装 Python3 时,这可能会引起混淆。此外,在 windows 上,Chocolatey 包管理器可能会造成一些混乱,您最终会安装多个 Python。要确定您是否在 *nix machine 上(即 macOS、GNU/Linux、BSD...),请使用 which命令,如果您在 Windows 上,请使用 where 命令查找已安装的 Python 解释器。例如,在 *nix machines:

which python3

以及 Windows

where python

那么您可能想要卸载那些您不想要的。以及您要使用的那个检查导致上述问题的软件包是否由

安装
python -c "import someLibrary"

如果你得到一个错误,那么你应该安装它,例如 pip:

pip install someLibrary

然后在 vscode 上按 P 如果你在a mac 和 CtrlShiftP 在其他操作系统上。然后键入-select >python: Select Interpreter 选项和select 你知道安装了库的选项。此时 vscode 可能会要求您再次安装 pyling,您只需继续安装即可。

我发现上述解决方案非常有用。特别是 jrc.Python 的虚拟环境 解释。

就我而言,我正在使用 Docker 并正在编辑 'local' 文件(不直接在 docker 中)。 所以我安装了微软的远程开发扩展。

ext install ms-vscode-remote.vscode-remote-extensionpack

可以在 https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

找到更多详细信息

应该说,一开始玩起来并不容易。 对我有用的是...
1.开始docker
2. 在 vscode 中,远程容器:附加到 运行 容器
3. 添加文件夹 /code/<path-to-code-folder> 从机器的根目录到 vscode

然后安装 python 扩展 + pylint

花了几个小时试图修复导入本地模块的错误。代码执行正常,但 pylint 显示:

    Unable to import '<module>'

最后想通了:

  1. 首先,select正确的python路径。 (在虚拟环境的情况下,它将是 venv/bin/python)。你可以点击

  2. 确保您的 pylint 路径与您在步骤 1 中选择的 python 路径相同。(您可以从激活的 venv 中打开 VS Code终端,因此它会自动执行这两个步骤)

  3. 最重要的一步:在包含模块文件的文件夹中添加一个空的__init__.py文件。虽然 python3 不需要这个文件来导入模块,但我认为 pylint 仍然需要它来进行 linting。

重新启动 VS Code,错误应该消失了!

我通过以下步骤解决了这个错误:

1 : 首先在终端中写入这段代码 :

...$ which python3
/usr/bin/python3

2 : 然后 :

"python.pythonPath": "/users/bin/python",

完成。

我对 pyodbc 有同样的问题,我的 Ubuntu 上有两个版本的 python(python3.8 和 python3.9),问题是:安装包在 python3.8 位置,但我的翻译是针对 python3.9。我在命令面板中安装了 python3.8 解释器并修复了它。

另一种解决方案是使用命令在项目位置生成 pylintrc:(此命令默认将内容打印到终端而不是实际创建文件,您需要将输出转储到 .pylintrc)

pylint --generate-rcfile

然后更新密钥 init-hook= 使用:

import sys; sys.path.append("your_project_location")

Other solutions not working for me (multiple workspaces)

使用以下内容创建~/.vscode/workspace.env

PYTHONPATH=$PYTHONPATH:/Users/jackwootton/protoc3/bin

转到工作区设置:⌘ / CtrlPWorkspace Settings.

在此处添加下一个配置行:

"python.envFile": "/Users/jackwootton/.vscode/workspace.env",

重新加载Window。


此解决方案优于 ,因为它不会修改所有系统的全局变量,仅针对您的项目工作区。

就我而言,我尝试了 flake8,bandit,但没有用,最终我卸载了名为 python (pylance) 的扩展程序,并且一切正常。

最简单的解决方案是在您的项目根目录中创建一个 .env 文件,内容如下:

PYTHONPATH=.

您不需要 __init__.py 个文件。即使您的代码在 src 目录中,并且在 tests 子目录中进行单元测试,它也能正常工作。这有助于 pylintpytest 找到所有模块。

有关详细信息,请参阅 https://code.visualstudio.com/docs/python/environments#_environment-variable-definitions-file

在我的例子中,包安装在全局 Python 安装路径中,而不是在 venv 中,即使我在安装时激活了虚拟环境。

当我切换到基本环境时(通过单击所选解释器左下角的状态字段)并且看到可以导入包时,我可以看到这一点。

我只能通过删除 venv 并重新安装来解决这个问题。