Visual Studio Code pylint:无法导入'protorpc'

Jac*_*ack 31 python google-app-engine visual-studio python-2.7 protorpc

我在Visual Studio Code中使用pylint来开发Python中的Google App Engine(GAE)Cloud Endpoint API.我无法解决lint错误.我不知道是什么导致了错误,但是猜测,pylint找不到库?protorpc

在此输入图像描述

故障排除Linting中的建议修复是将工作空间设置配置为指向完全限定的python可执行文件.我已经这样做了,但皮棉错误仍然存​​在.

在此输入图像描述

protorpc 本身安装到:

~/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0/protorpc
Run Code Online (Sandbox Code Playgroud)

...这包含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
Run Code Online (Sandbox Code Playgroud)

我已将此路径添加到$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
Run Code Online (Sandbox Code Playgroud)

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

使用第三方库声明:

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

因此,我认为 "App Engine库"包括protorpc,但我不确定.此外,将Cloud Endpoints Frameworks库添加到示例API只需要将 google-endpoints安装到应用程序的lib目录:

pip install -t lib google-endpoints --extra-index-url=https://gapi-pypi.appspot.com/admin/nurpc-dev --ignore-installed
Run Code Online (Sandbox Code Playgroud)

我的观点是,我不认为我没有安装任何东西,我认为我在我的(网络)应用程序的lib目录中遗漏了任何东西.

Iva*_*_ug 55

改变库路径对我有用.点击Ctrl + Shift + P并打字python interpreter并选择其中一个可用的.一个人很熟悉(正如早前工作得很好的virtualenv所指出的那样)并且它起作用了.记下你正在使用的python版本,2.7或3.x并相应地选择

  • 不知道为什么,但这对我有用。终于解脱了!^.^ (3认同)
  • 我遇到过同样的问题。看来 VSCode linter 扩展使用了 Visual Studio 安装的 python 解释器 - 而不是我自己安装的。 (2认同)
  • 选择您的虚拟环境中使用的 Python 解释器。如果您使用的是“pipenv”,请运行“pipenv --venv”来查找您的环境的文件夹。然后将解释器路径设置为“{您找到的文件夹}/bin/python”。您可能需要重新启动 VS Code (2认同)

小智 24

我遇到了同样的问题(VS Code).由以下方法解决

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

2)搜索"选择解释器"

3)选择已安装的python目录

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


wiz*_*awu 16

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

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

对于其他在 pip 包方面遇到麻烦的人,您可以使用

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

你应该python3.7用你的python版本替换上面的。


Mor*_*rad 12

打开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"
],
Run Code Online (Sandbox Code Playgroud)


小智 9

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

    Unable to import '<module>'
Run Code Online (Sandbox Code Playgroud)

终于想通了:

  1. 首先,选择正确的python路径。(在虚拟环境的情况下,它将是 venv/bin/python)。你可以通过点击来做到这一点

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

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

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


小智 5

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

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

"python.pythonPath": "python3"
Run Code Online (Sandbox Code Playgroud)

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

pip3 install <package> --user
Run Code Online (Sandbox Code Playgroud)

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

HTH凯


jrc*_*jrc 5

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

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

以下是我的建议:

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

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

    python3 -m venv env
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在虚拟环境中安装pylint。如果您在侧栏中选择任何 Python 文件,Visual Studio Code 将提供为您执行此操作。或者,source env/bin/activate那么pip install pylint

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


wis*_*cky 5

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

PYTHONPATH=.
Run Code Online (Sandbox Code Playgroud)

你不需要__init__.py文件。即使您的代码位于src目录中并且单元测试位于tests子目录中,它也可以工作。这有助于pylint找到pytest所有模块。

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