环境:python3.8
目录:
test\
module1\
__init__.py
mod1.py
module2\
mod2.py
main.py
__init__.py
的目录,为什么?我想检查 init .py的工作原理,因此我将module1
和module2
导入main.py
# test\main.py
from module1 import mod1
from module2 import mod2
在我的期望中,第2行应该发生错误,因为我没有在__init__.py
中创建module2
但是它们都可以导入。
现在,我对__init__.py
的工作原理感到困惑
__init__.py
我尝试通过以下方式在mod1.py
中导入main.py
:
# test\main.py
import module1
module.mod1.mod1_print() # mod1_print() is a function which is defined in mod1.py
所以我将mod1.py
导入test\module1\__init__.py
中:
# test\module1\__init__.py
import mod1
但是当我执行main.py
时,出现此错误:
D:\>"C:/Program Files/Python38/python.exe" d:/test/main.py
Traceback (most recent call last):
File "d:/test/main.py", line 2, in <module>
import module1
File "d:\test\module1\__init__.py", line 1, in <module>
import mod1
ModuleNotFoundError: No module named 'mod1'
我的问题是:
如果我要以mod_print()
的形式导入module.mod1.mod1_print()
,该怎么办?
答案 0 :(得分:2)
Python 3.3+具有Implicit Namespace Packages,允许它创建没有__init__.py
文件的软件包。
允许隐式名称空间包意味着可以完全放弃提供 init .py文件的要求,并且可以将受影响的部分安装到公共目录中,也可以根据需要将其拆分为多个目录。
答案 1 :(得分:1)
__init__.py
的要求。module1/__init__.py
中尝试类似的操作:import module1.mod1