【问题标题】:Python: ModuleNotFoundError encountered when importing modules from nested foldersPython:从嵌套文件夹导入模块时遇到 ModuleNotFoundError
【发布时间】:2022-10-16 13:16:26
【问题描述】:

因此,我在尝试在子包中导入模块时遇到ModuleNotFoundError,该模块在其目录下导入另一个子包(因此它是主目录的子子包)。我在子目录和子目录下都放了空的__init__.py 文件。代码在 Python 3.9.7 中运行。

这是结构的样子:

|- main.py
|- subpackage/
   |- __init__.py
   |- submod.py
   |- subsubpackage/
      |- __init__.py
      |_ subsubmod.py

编码

main.py,我有:

from subpackage import submod

def main():
    x = submod.test_func(3)
    print(x)

if __name__ == 'main':
    main()

submod.py,我想在subsubpackage/下导入subsubmod.py,所以我有:

from subsubpackage import subsubmod

def test_func(a):
    return subsubmod.addone(a)

最后,在subsubmod.py

def addone(x):
    return x+1

错误信息:

现在如果我运行main.py,我得到了

Traceback (most recent call last):

File "/Users/anonymous/test/main.py", line 1, in 
<module>
from subpackage import submod

File "/Users/anonymous/test/subpackage/submod.py", 
line 1, in <module>
from subsubpackage import subsubmod

ModuleNotFoundError: No module named 'subsubpackage'

我的问题和困惑

我不确定我做错了什么。我意识到submod.py 可以单独运行,所以似乎import 出现多个子目录时会出现问题?我想知道是否有办法解决这个问题,或者我应该使用不同的结构来组织我的脚本。

【问题讨论】:

    标签: python python-3.x python-import


    【解决方案1】:

    在包名前加一个点对我有用。

    from .subsubpackage import subsubmod
    

    看起来当你在一个包中时,如果你不使用相对导入,它会在其他地方寻找你的包。

    您可以在这里找到更多信息:
    Python documents about import system
    StackOverflow question about relative imports

    【讨论】:

      【解决方案2】:

      这个问题不断出现在 Stack Overflow 上,我可以理解为什么。所以今天我花时间创建了一个嵌套项目,其中包含 1 个顶部模块和 2 个嵌套子模块,其中都有类。并且在顶层模块中还创建了另一个类。这也被python视为一个模块。但它与顶层模块位于同一个顶层文件夹中。

      带有 main.py 的根目录(将导入 Hdlhelper) | |-- HdlHelper/ |-- HdlHelper.py |-- TestHdlHelperClass.py |-- VerilogHelper/ | |-- __init__.py | |-- 设置.py | |-- VerilogHelper.py |-- VhdlHelper/ |-- __init__.py |-- 设置.py |-- VhdlHelper.py

      将添加更多的类和文件,然后在 Github 上发布我的嵌套模块和类代码。将在此处发布存储库 url 以供将来参考。

      【讨论】:

        猜你喜欢
        • 2016-05-18
        • 1970-01-01
        • 2021-12-05
        • 2013-08-26
        • 2021-10-23
        • 1970-01-01
        • 1970-01-01
        • 2019-09-25
        • 2013-03-25
        相关资源
        最近更新 更多