【问题标题】:Python ModuleNotFound issue in VSCodeVSCode 中的 Python ModuleNotFound 问题
【发布时间】:2021-08-14 05:55:56
【问题描述】:

我从项目主文件夹中的子文件夹导入模块时遇到问题。

项目结构为:

project_folder/
|-- main.py
|
|-- tools/
    |-- script.py
|
|-- utils/
    |--__init__.py
    |--misc.py

当我尝试从 utils.misc 模块导入函数时,我得到了一个 ModuleNotFoundError(使用 VSCode),但是当我使用 Spyder 时,我可以毫无问题地运行代码。

我在script.py中用来导入的语句是:

from utils.misc import my_function

我该如何解决这个问题?

请查看下面的错误快照:

我还将${workpsaceFolder}添加到cwd配置中,并将项目根文件夹添加到launch.json文件中的PYTHONPATH中(见下文)。但是,当我打印 sys.path 时,project_folder 仍然无法显示。

更新: 下面看项目结构截图和报错

【问题讨论】:

    标签: python visual-studio-code


    【解决方案1】:

    您是否更改了launch.json 文件中的cwd(official docs) 配置?它默认为to ${workspaceFolder}。那么你采取的导入应该可以工作。

    更新

    {
          "name": "Python: Current File",
          "type": "python",
          "request": "launch",
          "program": "${file}",
          "console": "integratedTerminal",
          "env": {
            "PYTHONPATH": "${workspaceFolder}"
          },
          "cwd": "${workspaceFolder}",
    }
    

    添加env 配置。

    更新

      "env": {
        "PYTHONPATH": "${workspaceFolder}"
      },
    

    当您使用Code Runner 时将不起作用。

    更新: 您需要使用terminal(F5) 而不是Code Runner 运行代码。或者像这样:

    并确保在运行代码之前保存文件。

    更新: 下面看项目结构截图和报错

    【讨论】:

    • cwd 设置为${workspaceFolder},这是我项目的根目录,但仍然无法找到该模块。
    • 您可以使用“F12”或“ctrl+click”导航到“from utils.misc import my_function”中的杂项吗?你能成功运行它吗?如果可能的话,你能提供一张关于它的图片吗?
    • 它运行成功。好像我无法在 cmets 中附加照片。
    • 您可以更新问题以附上照片吗?它看起来像棉绒的问题。您应该检查提示错误的内容。如果它是语言服务器,请尝试切换到另一个与您正在使用的 linter 相同的服务器。
    • 它在普通终端而不是代码运行器中工作吗?
    【解决方案2】:

    只需在工作目录的根目录中添加.env 文件(在我的情况下为real_root_dir

    • 在VSCode文件夹中打开的是real_root_dir

    • 项目树是

    real_root_dir
    ├── .env
    ├── other_project
    │   └── c.py
    └── project_root
        ├── a.py
        ├── b
        │   ├── __init__.py
        │   └── b.py
        └── run.py
    
    • .env 文件的内容是
    PYTHONPATH=project_root:other_project
    
    • run.py代码
    from a import A
    from b.b import B
    from c import C
    
    print(A)
    print(B)
    print(C)
    

    有了这个配置,VSCode 甚至会找到C 并允许跳转到它,但是python 仍然不知道C,所以运行输出将是:

    Traceback (most recent call last):
      File "/Users/sergei/temp/real_root_dir/project_root/run.py", line 3, in <module>
        from c import C
    ModuleNotFoundError: No module named 'c'
    

    当然,在一般情况下导入外部C模块是不正常的。
    但是AB 将与python 解释器和VSCode 一起正常工作。

    【讨论】:

    • 您能否说明我应该如何添加.env 配置?我应该将它添加到launch.json 文件中还是有其他方法可以做到?
    • @NIM4 抱歉解释不够。 .env 只是一个文件。我更新了项目树,所以现在你可以检查你需要放置它的位置
    • 我尝试了这个,不幸的是它没有工作。在PYTHONPATH=project_root:other_project 中,project_rootother_project 是完整目录吗? : 还代表什么?感谢您的帮助
    • : 是目录分隔符。 stackoverflow.com/questions/39682688/… project_rootother_project 是与 real_root_dir 相关的相对路径
    • 谢谢,但似乎没有解决问题
    猜你喜欢
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2021-02-28
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多