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
所以我正在尝试从导入其子包的包中导入模块。这是示例代码:
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