Python3 如何导入导入子目录文件的子目录文件?

Python3 how do I import subdirectory file that imports subsubdirectory file?

所以我正在尝试从导入其子包的包中导入模块。这是示例代码:

main_directory
    - main.py
    subdirectory
        - __init__.py
        - test.py
        subsubdirectory
            - __init__.py
            - test2.py

main.py:
    from subdirectory import test
    test.foo1()

test.py:
    from subsubdirectory import test2
    def foo1():
        print("foo1")
        test2.foo2()

test2.py:
    def foo2():
        print("foo2")

在这种情况下,如果我改变

from subsubdirectory import test2

from .subsubdirectory import test2

因为我猜它是直接路径,所以它可以工作? 但是当我移动到我的子目录和 运行 python3 test.py 时它会抛出错误:

ModuleNotFoundError: No module named '__main__.subsubdirectory'; '__main__' is not a package

你能解释一下发生了什么吗?

如果你想使用相对导入,你必须运行脚本包方式。

由于main_directory中没有__init__.py,所以包裹是subdirectory

cd ./main_directory/
python -m subdirectory.test
python -m subdirectory.subsubdirectory.test2

如果你想 main_directory 作为包名,你必须在 main_directory 中添加 __init__.py,然后,你的 运行 脚本:

cd ./main_directory/../
python -m main_directory.subdirectory.test
python -m main_directory.subdirectory.subsubdirectory.test2