Visual Studio Code pylint:无法导入“protorpc”

Posted

技术标签:

【中文标题】Visual Studio Code pylint:无法导入“protorpc”【英文标题】:Visual Studio Code pylint: Unable to import 'protorpc' 【发布时间】:2017-09-20 08:41:22 【问题描述】:

我在Visual Studio Code 中使用pylint 来开发Google App Engine (GAE) Cloud Endpoint API in Python。我无法解决 lint 错误。我不知道是什么导致了错误,但猜测是,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 状态:

标准环境中的 Python 运行时包括 Python 标准库、App Engine 库和一些捆绑的 第三方包。

因此,我假设“App Engine 库”包括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 目录中没有任何东西。

【问题讨论】:

如果莫拉德的帖子是答案,建议将其标记为更好地帮助社区的解决方案。如果您已经解决了问题,您也可以发布自己的答案并将其标记为解决方案。请注意,在 App Engine 中使用第三方库时,您必须vendor them 才能正确安装和使用它们。 【参考方案1】:

打开 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"
],

【讨论】:

你需要用你的程序文件路径替换~还是这样就可以了? @JoelHarkes ~ 扩展至您的 $HOME 目录。看看tilde expansion。 ~ 不使用 Pylance。使用绝对值。【参考方案2】:

我通过将 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

【讨论】:

这个解决方案非常不稳定,因为它需要修改这个特定项目的全局变量。我试图仅在 vscode 工作区的上下文中设置 PYTHONPATH,但没有运气【参考方案3】:

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

【讨论】:

不知道为什么,但这对我有用。终于解脱了! ^.^ 我遇到了同样的问题。看起来 VSCode linter 扩展使用了 Visual Studio 安装的 python 解释器——而不是我自己安装的。 选择在您的虚拟环境中使用的 Python 解释器。如果您使用的是pipenv,请运行pipenv --venv 以查找您的环境的文件夹。然后将解释器路径设置为folder you found/bin/python。您可能需要重新启动 VS Code Cmd + shift + P for macOS【参考方案4】:

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

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

"python.pythonPath": "python3"

我用

重新安装了依赖项(包括pylint!!!)
pip3 install <package> --user

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

HTH 启

【讨论】:

【参考方案5】:

visual studio 默认设置应该和解释器路径一样。

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


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

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

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

【讨论】:

【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:

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

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

2) 搜索“选择口译员”

3) 选择安装的python目录

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

【讨论】:

【参考方案8】:

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

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

以下是我的建议:

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

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

    python3 -m venv env
    

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

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

【讨论】:

只想点赞这条评论。第 4 步实际上适用于我的情况。原来我需要从底部蓝色菜单栏中的 virtualenv 目录中选择正确的 python 解释器。【参考方案9】:

根据您的情况,将以下代码添加到 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\")'"
]

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

【讨论】:

TKS。我有很多路径要包括在内。这个解决了我的问题。 尽管使用了 VSCode ROS 扩展并因此将 settings.json 配置为 "python.autoComplete.extraPaths": ["/opt/ros/melodic/lib/python2.7/dist-packages"],但我在 ROS 开发中遇到了上述 linting 错误。不幸的是,您的建议没有奏效,但将[MASTER] init-hook='import sys; sys.path.append("/opt/ros/melodic/lib/python2.7/dist-packages")' 添加到~/.pylintrc 终于成功了。 我尝试了 all,这是唯一对我有用的修复方法。【参考方案10】:

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

无法导入 'someLibrary.someModule' 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

在 Windows 上

where python

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

python -c "import someLibrary"

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

pip install someLibrary

然后在 vscode 上按 P 如果您在 Mac 上,然后按 CtrlShift P 在其他操作系统上。然后键入选择&gt;python: Select Interpreter 选项并选择您知道已安装该库的那个。此时 vscode 可能会要求您再次安装 pyling,您只需继续安装即可。

【讨论】:

【参考方案11】:

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

就我而言,我使用的是 Docker 并正在编辑“本地”文件(不是直接在 docker 内)。 所以我安装了微软的Remote Development扩展。

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/&lt;path-to-code-folder&gt;添加到vscode中

然后安装python扩展+pylint

【讨论】:

【参考方案12】:

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

    Unable to import '<module>'

终于想通了:

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

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

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

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

【讨论】:

【参考方案13】:

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

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

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

2:然后:

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

完成。

【讨论】:

【参考方案14】:

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

【讨论】:

【参考方案15】:

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

pylint --generate-rcfile

然后使用以下命令更新密钥init-hook=

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

【讨论】:

唯一对我有用的东西。虽然第一个命令将配置打印到终端,所以我要添加一个必须将其转储到.pylintrcpylint --generate-rcfile &gt; .pylintrc【参考方案16】:

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

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

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

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

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

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

重新加载窗口。


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

【讨论】:

【参考方案17】:

在我的情况下,我尝试了 flake8,bandit,没有工作,最终我卸载了名为 python (pylance) 的扩展,一切正常。

【讨论】:

【参考方案18】:

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

PYTHONPATH=.

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

欲了解更多信息,请参阅https://code.visualstudio.com/docs/python/environments#_environment-variable-definitions-file

【讨论】:

【参考方案19】:

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

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

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

【讨论】:

以上是关于Visual Studio Code pylint:无法导入“protorpc”的主要内容,如果未能解决你的问题,请参考以下文章

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

Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法

带有 PyLint 和 autoPep8 的 Visual Studio 代码:如何避免 PyLint 抱怨我的行长?

为啥 python Visual Studio 代码中没有显示 pylint 的错误曲线?

开发环境安装 Visual Studio Code 开发环境 ( 下载 Visual Studio Code 安装器 | Visual Studio Code )

visual studio code 怎么用