【问题标题】:Visual Studio Code pylint: Unable to import 'protorpc'Visual Studio Code pylint:无法导入“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 才能正确安装和使用它们。

标签: python python-2.7 google-app-engine visual-studio-code protorpc


【解决方案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 程序。这三件事需要同步才能正常工作。

          以下是我的建议:

          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 路径”。这会在 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>'
              

              终于想通了:

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

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

              3. 最重要的一步: 在包含您的模块文件的文件夹中添加一个空的 __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 并重新安装来解决这个问题。

                          【讨论】:

                            猜你喜欢
                            • 2019-03-31
                            • 1970-01-01
                            • 2017-12-16
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2020-06-05
                            相关资源
                            最近更新 更多