【问题标题】:How to resolve ModuleNotFoundError?如何解决 ModuleNotFoundError?
【发布时间】:2020-05-16 20:44:38
【问题描述】:

我想在 main.py 中导入 abc.pyabc.py 本身导入 xyz.pypqr.py。 以下是我的项目结构:

main_folder
    |
    +--main.py
    |
    +--inside_folder
        |
        +--sub_folder
            |
            +--abc.py
            |
            +--xyz.py
            |
            +--subsub_folder
                |
                +--pqr.py

为此: 我在 main.py 中写了以下几行: from inside_folder.sub_folder import abc 而 abc.py 包含

from inside_folder.sub_folder.subsub_folder import pqr 
from inside_folder.sub_Folder import xyz

我还尝试从 abc.py 文件中不带 inside_folder.sub_folder 部分导入,但是这样做会报告 ModuleNotFoundError

请帮我解决这个问题。

注意: 我已将 init.py 添加到所有文件夹中。仍然无法解决错误。

【问题讨论】:

  • 您错过了为您的packages 添加__init__.py 文件。
  • @KlausD。我忘了提,但是所有文件夹都有__init__.py文件

标签: python package python-import python-module


【解决方案1】:

如果您使用的是 python2,如果每个文件夹都有 __init__.py 文件和以下代码,您不会发现上述文件夹结构有任何问题 ma​​in.py

from inside_folder.sub_folder import abc

abc.py

from subsub_folder import pqr 
import xyz

但如果您使用的是 python 3,则需要将您的 abc.py 更改为

from .subsub_folder import pqr 
from . import xyz

【讨论】:

    【解决方案2】:
    • 您的包(充当单个 python 命名空间的文件夹)可能应该有一个 __init__.py 文件来将它们声明为包,尽管 IIRC it's not quite necessary anymore in some cases 这样做更容易
    • from inside_folder.sub_folder import abc 完全错误,遵循 PEP 328 这告诉 Python 寻找顶级 inside_folder。您需要在此处使用 相对导入,以便 Python 为导入文件(又名 from .inside_folder.sub_folder)查找 sibling
    • 虽然假设您完全在您向我们展示的树之外并正在执行 from main_folder import main.py 或运行 python -mmain_package.main,但 PYTHONPATH 的设置将有所不同
    • 您显示的结构与您的导入不匹配,abc.py sub_folder 旁边,不在其中

    【讨论】:

    • 其实sub_folder下面的所有文件和文件夹都在sub_folder里面。我的markdown编辑技巧很差。有人编辑不正确。
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 2021-07-31
    • 2021-11-13
    • 2021-05-13
    • 2022-07-12
    • 1970-01-01
    • 2023-01-27
    • 2020-10-29
    相关资源
    最近更新 更多