__init__.py中可以设置外界通过包名所能访问的模块。
import ...
语句导入包后,就可以通过.
访问我们指定对外提供的模块了。from ... import ...
直接导入包内的模块时,不论导入的模块是否在__init__.py中被指定了,都可以正常被导入。testPackage/__init__.py
from . import send_module
from . import receive_module
testPackage/receive_module.py
def receive():
print("receive function")
testPackage/send_module.py
def send():
print("send function")
main.py
import testPackage
testPackage.receive_module.receive()
testPackage.send_module.send()
在示例1的基础上,修改testPackage/__init__.py
为:
#from . import send_module
from . import receive_module
这时再次执行时会报错module 'testPackage' has no attribute 'send_module'
,因为此时只能通过testPackage
这个包名访问receive_module
而不能访问send_module
。
在示例2的基础上,修改main.py
为:
import testPackage
from testPackage import send_module
testPackage.receive_module.receive()
testPackage.send_module.send()
send_module.send()
这时再次执行时就不会报错了。