VisualStudio 代码 pylint: 无法导入“ protorpc”

我在 VisualStudio 代码中使用 皮林特来开发 Google App Engine (GAE) Python 中的云端点 API。我无法解决线头错误。我不知道是什么导致了这个错误,但是我猜测,皮林特找不到 protorpc库?

enter image description here

排线故障排除中推荐的修复方法是将工作区设置配置为指向完全合格的 Python 可执行文件。我已经这样做了,但是线头错误仍然存在。

enter image description here

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(以及 厨房水槽) :

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 错误,但令人沮丧的是,我无法解决这个问题。

使用第三方图书馆 说明:

标准环境中的 Python 运行时包括 Python 标准库,App Engine 库,以及一些捆绑的 第三方软件包。

因此,我 假设’应用程序引擎库’包括 protorpc,但我不确定。此外,将云端点框架库添加到示例 API 中只要求将 google 端点安装到应用程序的 lib 目录中:

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

我的观点是,我不认为我没有安装什么东西,我也不认为我在我的(web)应用程序的 lib 目录中遗漏了什么。

173107 次浏览

打开 VisualStudio 代码(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"
],

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

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

在将其添加到 ~/.bash_profile并重新启动计算机和 VisualStudio 代码之后,导入错误消失了。

为了完整起见,我修改了所有与 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,然后选择显示的可用选项之一。其中一个很熟悉(指向之前运行良好的 Virtual alenv) ,而且它运行良好。请注意您正在使用的 python 版本,无论是2.7还是3.x,并做出相应的选择

我没有尝试所有的可能性,但至少我有这样的印象,这可能是一个与 Python 版本相关的问题。不知道为什么,我只是相信自己的直觉。

因此,我只是将 pythonPath 更改为 python3(默认值: python) :

"python.pythonPath": "python3"

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

pip3 install <package> --user

在重新启动代码之后,一切看起来都很正常。

天凯

可视化工作室的默认设置应该与解释器路径相同。

更改 VS 代码默认设置: < em > windows: File > Preferences > Settings

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

找到合适的翻译: Windows: Ctrl + Shift + P-> select 解释器:

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

首先,我将检查 python3的路径,它居住

enter image description here

然后在 VS 代码设置中添加路径,例如:

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

我面临着同样的问题(VS 代码)。通过以下方法解决

1)从命令面板中选择解释器命令(Ctrl + Shift + P)

2)搜寻「选择传译员」

3)选择已安装的 python 目录

档号:-https://code.visualstudio.com/docs/python/environments#_select-an-environment

我仍然得到这些错误,即使在确认正确的 pythonpylint正在使用我的虚拟环境。

最后我发现,在 Visual Studio Code 中,我是 A)打开我的项目目录,即 B)我的 Python 虚拟环境所在的位置,但是我是 C)从更深的两个层次运行我的主 Python 程序。这三样东西需要同步,一切才能正常运转。

以下是我的建议:

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

  2. 选择 Terminal menu > New Terminal,并在同一目录中直接创建一个虚拟环境。

    python3 -m venv env
    
  3. Install pylint in the virtual environment. If you select any Python file in the sidebar, Visual Studio Code will offer to do this for you. Alternatively, source env/bin/activate then pip install pylint.

  4. In the blue bottom bar of the editor window, choose the Python interpreter env/bin/python. Alternatively, go to Settings and set "Python: Python Path." This sets python.pythonPath in Settings.json.

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

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

对于另一个有点小麻烦的人,你可以和他一起去

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

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

我的 vscode 也出现了同样的错误,我在那里安装了一个库,并且在终端上运行时代码还能正常工作,但是由于某些原因,vscode pylint 无法选择已安装的软件包返回这个臭名昭著的错误:

无法导入‘ somLibrary.somModule’pylint (import-error)

这个问题可能是由于多个 Python 安装引起的。基本上,您已经在其中一个上安装了一个库/包,并且 vscode pylint 已经安装并从另一个安装运行。例如,在 macOS 和许多 Linux 发行版上,默认安装了 Python2,当您安装 Python3时,这可能会导致混淆。同样在 Windows 上,Chocolatey 包管理器可能会造成一些混乱,最终导致多个 Python 安装。如果你在一台 * nix 机器上(例如,macOS,GNU/Linux,BSD...) ,使用 which命令,如果你在 Windows 上,使用 where命令找到安装的 Python 解释器。例如,在 * nix 机器上:

which python3

还有视窗

where python

然后你可能会想卸载那些你不想要的。以及您要使用的一个检查,如果包导致上述问题是安装

python -c "import someLibrary"

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

pip install someLibrary

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

我发现上述解决方案非常有用,尤其是 jrc 的 Python 的虚拟环境解释。

在我的例子中,我使用 Docker 并编辑“本地”文件(而不是直接在 Docker 中)。 所以我安装了微软的 远程开发扩展。

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

详情请参阅 https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

我应该说,一开始并不容易。 对我有用的是..。
1. 起步码头
2. 在 vscode 中,Remote-Container: 附加到正在运行的容器
3. 将文件夹 /code/<path-to-code-folder>从计算机根目录添加到 vscode

然后安装 python 扩展 + 皮林特

花了几个小时试图修复导入本地模块的错误:

    Unable to import '<module>'

终于明白了:

  1. 首先,选择正确的 python 路径。(对于虚拟环境,它将是 venv/bin/python)。你可以通过击打

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

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

重新启动 VS 代码,错误应该消失!

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

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")

其他解决方案不适合我(多个工作区)

创建包含以下内容的 ~/.vscode/workspace.env

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

进入工作区设置: ⌘ / CtrlPWorkspace Settings

在这里添加下一个配置行:

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

重新装弹。


这个解决方案比 @ Jack更好,因为它不为所有系统修改全局变量,只为您的项目工作区修改全局变量。

在我的例子中,我尝试了 flake8,bandit,但没有成功,最终我卸载了名为 python (pylance)的扩展,一切都运行良好。

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

PYTHONPATH=.

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

有关更多信息,请参见 https://code.visualstudio.com/docs/python/environments#_environment-variable-definitions-file

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

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

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