0

我是 VS Code 在 Windows 上进行 python 开发的新手,我的 pylint 找不到包。这是我的项目目录结构。

workspace/    <- This is VS Code workspace (E:\workspace)
  .vscode/
    launch.json
    settings.json    
  project1/
    mypackge/
      __init__.py          <- In here, I wrote: `import mypackage.first_sub_pkg`
      first_sub_pkg/
        __init__.py        <- In here, I wrote: `from .second_sub_pkg.mymodule import MyClass`
        second_sub_pkg/
          __init__.py      <- In here, I wrote: `from .mymodule import MyClass`
          mymodule.py    <- This module has class: `MyClass`
    test_script/
      mytest.py
  project2/
  etc.../

我编写了 mytest.py 脚本代码,例如:

from mypackge.first_sub_package import MyClass

我使用 C:/Anaconda3/python.exe 作为 python 解释器

当我单击 VS Code 右上角的按钮▷(在终端中运行 Python 文件)时,我收到此错误消息

PS E:\workspace> & c:/Anaconda3/python.exe e:/workspace/project1/test_script/mytest.py
Traceback (most recent call last):
  File "e:/workspace/project1/test_script/mytest.py", line 1, in <module>
    from first_sub_pkg.second_sub_pkg import MyClass
ModuleNotFoundError: No module named 'first_sub_pkg'

另外,我添加了 workspace/.vscode/launch.json ,例如:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "pythonPath": "${command:python.interpreterPath}",
            "env": {
                "PYTHONPATH": "${workspaceFolder};E:/workspace/project1"
            }
        }
    ]
}

和 workspace/.vscode/settings.json 像:

{
    "python.autoComplete.extraPaths": [
        "E:/workspace",
        "E:/workspace/project1",
        "E:/workspace/project1/first_sub_pkg",
    ],
    "python.pythonPath": "c:/Anaconda3/python.exe",
    "terminal.integrated.shell.windows": "C:/windows/System32/WindowsPowerShell/v1.0/powershell.exe",
    "python.linter": "pyLint",
    "python.linting.pylintPath": "pylint"
}

我的用户 settings.json 文件是这样的:

{
    "python.autoComplete.extraPaths": [
        "E:/workspace",
        "E:/workspace/project1",
        "E:/workspace/project1/first_sub_pkg",
    ]
}

我已经在 Eclipse + pydev 环境下运行过这个测试脚本,运行没有问题。但不知何故,VSC 无法导入我的模块。

我似乎是系统路径问题,因为当我运行 python 并将 'E:/workspace/project1' 附加到系统路径 ( import sys; sys.path.append('E:/workspace/project1');) 时它运行良好,但我无法找到解决问题的方法。(在 Windows 设置中添加系统变量也不起作用)。

我错过了什么?有人请帮助我。我搜索了2天,但一无所获。

4

3 回答 3

0

first_sub_pkg与文件不在同一目录中mytest.py。您首先必须向上移动一个级别,project1/然后mypackage/再继续进行其余的导入。所以你做的进口mytest.py应该是这样的:

from ..mypakage.first_sub_pkg.second_sub_pkg.third_sub_pkg.mymodule import MyClass

为什么你有这么多子目录我不知道,但是你的目录结构很快就会变得非常混乱。编码时请牢记python的禅意。

于 2020-07-15T11:54:34.677 回答
0

解决方案:

一:

更改此语句:mytest.py 中的“from first_sub_pkg.second_sub_pkg import MyClass”

到“从 mypackage.first_sub_pkg.second_sub_pkg.third_sub_pkg.mymodule 导入 MyClass”。

二:

从“PYTHONPATH”更改 lanuch.json 中的“env”:“${workspaceFolder};E:/workspace/project1”

到“PYTHONPATH”:“${workspaceFolder};${workspaceFolder}/project1/mypackge”。

解释:

Python 只能搜索 PYTHONPATH 中的路径。如果模块嵌套在路径中你需要使用'.' 连接文件夹直到指向模块文件。

于 2020-07-20T01:59:54.063 回答
0

这个 sulotion 不适用于 mac。

  1. 打开vs代码按ctrl+shift+p

在此处输入图像描述

  1. 输入:Python:选择解释器

  2. 选择您的环境并再次运行代码。(rjz 是我的环境名称) 在此处输入图像描述

  3. 如果这不能解决,您需要使用 CMD 使用 conda 或 pip 安装包。在我的情况下,使用 VS 代码终端安装软件包并不能解决问题。

  • 对于某些软件包,您需要使用 vs code 终端期望 CMD 进行安装。
于 2021-06-15T17:21:13.230 回答