Visual Studio 代码 pylint:无法导入 'protorpc'
Visual Studio Code pylint: Unable to import 'protorpc'
我正在使用 pylint in Visual Studio Code to develop a Google App Engine (GAE) Cloud Endpoint API in Python. I'm unable to resolve a lint error. I don't know what's causing the error, but at a guess, 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 状态:
The Python runtime in the standard environment includes the Python
standard library, the App Engine libraries, and a few bundled
third-party packages.
因此,我 假设 'the App Engine libraries' 包括 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 目录中没有遗漏任何东西。
打开 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"
],
我通过将 protorpc 库添加到 $PYTHONPATH
环境变量来解决这个问题。具体来说,我指向安装在我的 App Engine 目录:
中的库
export PYTHONPATH=$PYTHONPATH:/Users/jackwootton/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0
将此添加到 ~/.bash_profile
后,重新启动我的机器和 Visual Studio 代码,导入错误消失了。
为了完整起见,我没有修改与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
并选择显示的可用选项之一。一个是熟悉的(正如之前运行良好的 virtualenv 所指出的那样)并且它有效。记下您正在使用的 python 版本,2.7 或 3.x 并相应地选择
我没有尝试过所有的可能性,但至少我觉得这可能是一个 python 版本相关的问题。不知道为什么,我就是相信自己的直觉。
因此我将python路径更改为python3(默认值:python):
"python.pythonPath": "python3"
我重新安装了依赖项(包括 pylint!!!)
pip3 install <package> --user
...重新启动 vs code 后,一切看起来都很好。
HTH启
visual studio默认设置应与解释器路径相同。
Change VS code default setting: windows:文件 > 首选项 > 设置
{
"python.pythonPath": "C:\Users\Anaconda3\pythonw.exe",
"workbench.startupEditor": "newUntitledFile"
}
找到合适的口译员:
windows: Ctrl+Shift+P->select 解释器:
该解释器的路径应与您正在使用的版本相同。
首先我会检查 python3
它所在的路径
然后在 VS Code 设置中添加该路径,例如:
"python.pythonPath": "/usr/local/bin/python3"
我遇到了同样的问题 (VS Code)。已通过以下方法解决
1) Select 命令面板中的解释器命令 (Ctrl+Shift+P)
2) 搜索 "Select Interpreter"
3) Select安装的python目录
参考:- https://code.visualstudio.com/docs/python/environments#_select-an-environment
即使在确认从我的虚拟环境中使用了正确的 python
和 pylint
后,我仍然收到这些错误。
最终我发现在 Visual Studio 代码中我是 A) 打开我的项目目录,这是 B) 我的 Python 虚拟环境所在的位置,但我是 C) 运行 我的主要 Python 程序从两个层次更深。这三件事需要同步才能正常工作。
以下是我的推荐:
在 Visual Studio 代码中,打开包含主 Python 程序的目录。 (这可能是也可能不是项目目录的顶层。)
Select终端菜单>新建终端,直接在同一目录下创建虚拟环境
python3 -m venv env
在虚拟环境中安装pylint。如果您 select 侧边栏中的任何 Python 文件,Visual Studio Code 将为您执行此操作。或者,source env/bin/activate
然后 pip install pylint
.
在编辑器 window 的蓝色底栏中,选择 Python 解释器 env/bin/python
。或者,转到“设置”并设置 "Python: Python Path." 这会在 Settings.json 中设置 python.pythonPath
。
对于您的情况,将以下代码添加到 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 版本。
我在 vscode 上遇到了同样的错误,我安装了一个库,当 运行 来自终端时代码工作,但由于某种原因,vscode pylint 是无法选择返回臭名昭著的错误的已安装软件包:
Unable to import 'someLibrary.someModule' pylint(import-error)
问题可能是由于多个 Python 安装引起的。基本上你已经在一个上安装了 library/package,并且安装了 vscode pylint 和另一个安装的 运行。例如,在 macOS 和许多 Linux 发行版上,默认安装了 Python2,当您安装 Python3 时,这可能会引起混淆。此外,在 windows 上,Chocolatey 包管理器可能会造成一些混乱,您最终会安装多个 Python。要确定您是否在 *nix machine 上(即 macOS、GNU/Linux、BSD...),请使用 which
命令,如果您在 Windows 上,请使用 where
命令查找已安装的 Python 解释器。例如,在 *nix machines:
which python3
以及 Windows
where python
那么您可能想要卸载那些您不想要的。以及您要使用的那个检查导致上述问题的软件包是否由
安装
python -c "import someLibrary"
如果你得到一个错误,那么你应该安装它,例如 pip
:
pip install someLibrary
然后在 vscode 上按 ⌘⇧P 如果你在a mac 和 CtrlShiftP 在其他操作系统上。然后键入-select >python: Select Interpreter
选项和select 你知道安装了库的选项。此时 vscode 可能会要求您再次安装 pyling,您只需继续安装即可。
我发现上述解决方案非常有用。特别是 jrc.Python 的虚拟环境 解释。
就我而言,我正在使用 Docker 并正在编辑 'local' 文件(不直接在 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
花了几个小时试图修复导入本地模块的错误。代码执行正常,但 pylint 显示:
Unable to import '<module>'
最后想通了:
首先,select正确的python路径。 (在虚拟环境的情况下,它将是 venv/bin/python)。你可以点击
确保您的 pylint 路径与您在步骤 1 中选择的 python 路径相同。(您可以从激活的 venv 中打开 VS Code终端,因此它会自动执行这两个步骤)
最重要的一步:在包含模块文件的文件夹中添加一个空的__init__.py文件。虽然 python3 不需要这个文件来导入模块,但我认为 pylint 仍然需要它来进行 linting。
重新启动 VS Code,错误应该消失了!
我通过以下步骤解决了这个错误:
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")
Other solutions not working for me (multiple workspaces)
使用以下内容创建~/.vscode/workspace.env
PYTHONPATH=$PYTHONPATH:/Users/jackwootton/protoc3/bin
转到工作区设置:⌘ / Ctrl⇧P → Workspace Settings
.
在此处添加下一个配置行:
"python.envFile": "/Users/jackwootton/.vscode/workspace.env",
重新加载Window。
此解决方案优于 ,因为它不会修改所有系统的全局变量,仅针对您的项目工作区。
就我而言,我尝试了 flake8,bandit,但没有用,最终我卸载了名为 python (pylance) 的扩展程序,并且一切正常。
最简单的解决方案是在您的项目根目录中创建一个 .env
文件,内容如下:
PYTHONPATH=.
您不需要 __init__.py
个文件。即使您的代码在 src
目录中,并且在 tests
子目录中进行单元测试,它也能正常工作。这有助于 pylint
和 pytest
找到所有模块。
有关详细信息,请参阅 https://code.visualstudio.com/docs/python/environments#_environment-variable-definitions-file
在我的例子中,包安装在全局 Python 安装路径中,而不是在 venv 中,即使我在安装时激活了虚拟环境。
当我切换到基本环境时(通过单击所选解释器左下角的状态字段)并且看到可以导入包时,我可以看到这一点。
我只能通过删除 venv 并重新安装来解决这个问题。
我正在使用 pylint in Visual Studio Code to develop a Google App Engine (GAE) Cloud Endpoint API in Python. I'm unable to resolve a lint error. I don't know what's causing the error, but at a guess, 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 状态:
The Python runtime in the standard environment includes the Python standard library, the App Engine libraries, and a few bundled third-party packages.
因此,我 假设 'the App Engine libraries' 包括 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 目录中没有遗漏任何东西。
打开 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"
],
我通过将 protorpc 库添加到 $PYTHONPATH
环境变量来解决这个问题。具体来说,我指向安装在我的 App Engine 目录:
export PYTHONPATH=$PYTHONPATH:/Users/jackwootton/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0
将此添加到 ~/.bash_profile
后,重新启动我的机器和 Visual Studio 代码,导入错误消失了。
为了完整起见,我没有修改与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
并选择显示的可用选项之一。一个是熟悉的(正如之前运行良好的 virtualenv 所指出的那样)并且它有效。记下您正在使用的 python 版本,2.7 或 3.x 并相应地选择
我没有尝试过所有的可能性,但至少我觉得这可能是一个 python 版本相关的问题。不知道为什么,我就是相信自己的直觉。
因此我将python路径更改为python3(默认值:python):
"python.pythonPath": "python3"
我重新安装了依赖项(包括 pylint!!!)
pip3 install <package> --user
...重新启动 vs code 后,一切看起来都很好。
HTH启
visual studio默认设置应与解释器路径相同。
Change VS code default setting: windows:文件 > 首选项 > 设置
{
"python.pythonPath": "C:\Users\Anaconda3\pythonw.exe",
"workbench.startupEditor": "newUntitledFile"
}
找到合适的口译员: windows: Ctrl+Shift+P->select 解释器:
该解释器的路径应与您正在使用的版本相同。
首先我会检查 python3
它所在的路径
然后在 VS Code 设置中添加该路径,例如:
"python.pythonPath": "/usr/local/bin/python3"
我遇到了同样的问题 (VS Code)。已通过以下方法解决
1) Select 命令面板中的解释器命令 (Ctrl+Shift+P)
2) 搜索 "Select Interpreter"
3) Select安装的python目录
参考:- https://code.visualstudio.com/docs/python/environments#_select-an-environment
即使在确认从我的虚拟环境中使用了正确的 python
和 pylint
后,我仍然收到这些错误。
最终我发现在 Visual Studio 代码中我是 A) 打开我的项目目录,这是 B) 我的 Python 虚拟环境所在的位置,但我是 C) 运行 我的主要 Python 程序从两个层次更深。这三件事需要同步才能正常工作。
以下是我的推荐:
在 Visual Studio 代码中,打开包含主 Python 程序的目录。 (这可能是也可能不是项目目录的顶层。)
Select终端菜单>新建终端,直接在同一目录下创建虚拟环境
python3 -m venv env
在虚拟环境中安装pylint。如果您 select 侧边栏中的任何 Python 文件,Visual Studio Code 将为您执行此操作。或者,
source env/bin/activate
然后pip install pylint
.在编辑器 window 的蓝色底栏中,选择 Python 解释器
env/bin/python
。或者,转到“设置”并设置 "Python: Python Path." 这会在 Settings.json 中设置python.pythonPath
。
对于您的情况,将以下代码添加到 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 版本。
我在 vscode 上遇到了同样的错误,我安装了一个库,当 运行 来自终端时代码工作,但由于某种原因,vscode pylint 是无法选择返回臭名昭著的错误的已安装软件包:
Unable to import 'someLibrary.someModule' pylint(import-error)
问题可能是由于多个 Python 安装引起的。基本上你已经在一个上安装了 library/package,并且安装了 vscode pylint 和另一个安装的 运行。例如,在 macOS 和许多 Linux 发行版上,默认安装了 Python2,当您安装 Python3 时,这可能会引起混淆。此外,在 windows 上,Chocolatey 包管理器可能会造成一些混乱,您最终会安装多个 Python。要确定您是否在 *nix machine 上(即 macOS、GNU/Linux、BSD...),请使用 which
命令,如果您在 Windows 上,请使用 where
命令查找已安装的 Python 解释器。例如,在 *nix machines:
which python3
以及 Windows
where python
那么您可能想要卸载那些您不想要的。以及您要使用的那个检查导致上述问题的软件包是否由
安装python -c "import someLibrary"
如果你得到一个错误,那么你应该安装它,例如 pip
:
pip install someLibrary
然后在 vscode 上按 ⌘⇧P 如果你在a mac 和 CtrlShiftP 在其他操作系统上。然后键入-select >python: Select Interpreter
选项和select 你知道安装了库的选项。此时 vscode 可能会要求您再次安装 pyling,您只需继续安装即可。
我发现上述解决方案非常有用。特别是 jrc.Python 的虚拟环境 解释。
就我而言,我正在使用 Docker 并正在编辑 'local' 文件(不直接在 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
花了几个小时试图修复导入本地模块的错误。代码执行正常,但 pylint 显示:
Unable to import '<module>'
最后想通了:
首先,select正确的python路径。 (在虚拟环境的情况下,它将是 venv/bin/python)。你可以点击
确保您的 pylint 路径与您在步骤 1 中选择的 python 路径相同。(您可以从激活的 venv 中打开 VS Code终端,因此它会自动执行这两个步骤)
最重要的一步:在包含模块文件的文件夹中添加一个空的__init__.py文件。虽然 python3 不需要这个文件来导入模块,但我认为 pylint 仍然需要它来进行 linting。
重新启动 VS Code,错误应该消失了!
我通过以下步骤解决了这个错误:
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")
Other solutions not working for me (multiple workspaces)
使用以下内容创建~/.vscode/workspace.env
PYTHONPATH=$PYTHONPATH:/Users/jackwootton/protoc3/bin
转到工作区设置:⌘ / Ctrl⇧P → Workspace Settings
.
在此处添加下一个配置行:
"python.envFile": "/Users/jackwootton/.vscode/workspace.env",
重新加载Window。
此解决方案优于
就我而言,我尝试了 flake8,bandit,但没有用,最终我卸载了名为 python (pylance) 的扩展程序,并且一切正常。
最简单的解决方案是在您的项目根目录中创建一个 .env
文件,内容如下:
PYTHONPATH=.
您不需要 __init__.py
个文件。即使您的代码在 src
目录中,并且在 tests
子目录中进行单元测试,它也能正常工作。这有助于 pylint
和 pytest
找到所有模块。
有关详细信息,请参阅 https://code.visualstudio.com/docs/python/environments#_environment-variable-definitions-file
在我的例子中,包安装在全局 Python 安装路径中,而不是在 venv 中,即使我在安装时激活了虚拟环境。
当我切换到基本环境时(通过单击所选解释器左下角的状态字段)并且看到可以导入包时,我可以看到这一点。
我只能通过删除 venv 并重新安装来解决这个问题。