78

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

在此处输入图像描述

故障排除 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(连同厨房水槽):

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 库和一些捆绑的第三方包。

因此,我假设“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

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

4

19 回答 19

152

更改库路径对我有用。点击Ctrl + Shift + P并键入python interpreter并选择显示的可用选项之一。一个很熟悉(正如前面提到的一个运行良好的 virtualenv)并且它工作正常。记下您正在使用的 python 版本,2.7 或 3.x 并相应地选择

于 2018-06-24T13:45:31.740 回答
49

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

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

2) 搜索“选择口译员”

3)选择安装的python目录

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

于 2018-08-14T05:31:00.043 回答
37

打开 Visual Studio Code ( 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"
],
于 2017-05-04T19:34:23.460 回答
16

对于您的情况,请将以下代码添加到 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版本替换上面。

于 2019-04-30T06:58:35.680 回答
10

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

    Unable to import '<module>'

终于想通了:

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

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

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

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

于 2020-07-11T11:26:59.373 回答
5

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

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

"python.pythonPath": "python3"

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

pip3 install <package> --user

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

HTH 凯

于 2018-07-10T08:06:28.467 回答
5

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

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

以下是我的建议:

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

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

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

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

于 2019-03-21T15:29:02.277 回答
3

Visual Studio 默认设置应与解释器路径相同。

更改 VS 代码默认设置: windows:文件 > 首选项 > 设置

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

找到正确的解释器:windows: Ctrl+ Shift+ P-> 选择解释器:

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

于 2018-07-15T00:26:53.740 回答
3

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

在此处输入图像描述

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

"python.pythonPath": "/usr/local/bin/python3"
于 2018-07-21T09:50:45.050 回答
1

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

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

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

为了完整起见,我没有修改任何与 Python 相关的 Visual Studio Code 设置。完整~/.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
于 2017-06-26T16:33:13.330 回答
1

我发现上述解决方案非常有用。特别是 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. 启动
docker 2. 在 vscode 中,远程容器:附加到正在运行的容器
3./code/<path-to-code-folder>从机器的根目录添加文件夹到 vscode

然后安装python扩展+ pylint

于 2020-05-02T11:21:46.967 回答
1

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

pylint --generate-rcfile

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

import sys; sys.path.append("your_project_location")
于 2021-03-01T21:30:50.693 回答
1

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

PYTHONPATH=.

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

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

于 2021-09-12T22:17:51.947 回答
0

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

无法导入“someLibrary.someModule”pylint(导入错误)

由于多个 Python 安装,可能会出现此问题。基本上,您已经在其中安装了一个库/包,并且已安装 vscode pylint 并从另一个安装运行。例如,在 macOS 和许多 Linux 发行版上,默认情况下安装了 Python2,而当您安装 Python3 时,这可能会导致混淆。同样在 Windows 上,Chocolatey 包管理器可能会导致一些混乱,最终您会安装多个 Python。要确定您是否在 *nix 机器上(即 macOS、GNU/Linux、BSD...),请使用该which命令,如果您在 Windows 上,请使用该where命令查找已安装的 Python 解释器。例如,在 *nix 机器上:

which python3

在 Windows 上

where python

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

python -c "import someLibrary"

如果您遇到错误,那么您应该安装它,例如pip

pip install someLibrary

然后在 vscode 上按⌘</kbd>⇧</kbd>P if you are on a mac and CtrlShiftP on other operating systems. Then type-select the >python: Select Interpreter option and select the one you know have the library installed. At this moment vscode might asks you to install pyling again, which you just go on with.

于 2020-02-21T23:11:49.573 回答
0

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

1:首先在终端中编写此代码:

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

2:然后:

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

完毕。

于 2020-11-14T15:22:37.640 回答
0

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

于 2020-12-03T08:40:57.827 回答
0

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

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

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

转到工作区设置:⌘ / Ctrl⇧</kbd>PWorkspace Settings.

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

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

重新加载窗口。


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

于 2021-03-19T07:18:51.393 回答
0

就我而言,我尝试了 flake8、bandit,但没有成功,最终我卸载了名为 python (pylance) 的扩展,一切正常。

于 2021-07-11T19:29:48.270 回答
0

在我的情况下,这些包被安装在全局 Python 安装路径中,而不是在 venv 中,即使我在安装时激活了虚拟环境。

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

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

于 2021-12-02T17:23:54.443 回答