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】:即使在确认我的虚拟环境中使用了正确的 python
和 pylint
之后,我仍然收到这些错误。
最终我发现在 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 在其他操作系统上。然后键入选择>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/<path-to-code-folder>
添加到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")
【讨论】:
唯一对我有用的东西。虽然第一个命令将配置打印到终端,所以我要添加一个必须将其转储到.pylintrc
:pylint --generate-rcfile > .pylintrc
【参考方案16】:
其他不适合我的解决方案(多个工作区)
使用以下内容创建~/.vscode/workspace.env
PYTHONPATH=$PYTHONPATH:/Users/jackwootton/protoc3/bin
进入工作区设置:⌘ / Ctrl⇧P → Workspace Settings
.
在那里添加下一个配置行:
"python.envFile": "/Users/jackwootton/.vscode/workspace.env",
重新加载窗口。
这个解决方案比@Jack 更好,因为它不会修改所有系统的全局变量,只是为您的项目工作区修改。
【讨论】:
【参考方案17】:在我的情况下,我尝试了 flake8,bandit,没有工作,最终我卸载了名为 python (pylance) 的扩展,一切正常。
【讨论】:
【参考方案18】:最简单的解决方案是在您的项目根目录中创建一个.env
文件,其中包含以下内容:
PYTHONPATH=.
您不需要__init__.py
文件。即使您的代码在src
目录中,并且在tests
子目录中进行单元测试,它也可以工作。这有助于pylint
和pytest
找到所有模块。
欲了解更多信息,请参阅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 )