1、每个目录下需要建立一个__iniit__.py
的文件,空文件也可以,这样才可以引入该目录下的模块。
2、__init__.py
文件定义了包的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在
3、目录名就是包名
4、__all__
在from ... import *
的情况下使用
目录组织如下:
m1
--__init__.py
--test1.py
--m2
--__init__py
--test2.py
>>> import m1.test1
>>> m1.test1.test1()
m1.test1
>>> from m1.test1 import test1
>>> test1()
m1.test1
>>> from m1 import test1
>>> test1.test1()
m1.test1
>>> print(m1.__name__)
m1
>>> print(m1.test1.__name__)
m1.test1
>>> from m1.m2 import test2
>>> test2.test2()
m1.m2.test2
>>> import m1.m2
>>> m1.m2.test2.test2()
m1.m2.test2
>>> import m1.m2.test2
>>> m1.m2.test2.test2()
m1.m2.test2
>>> from m1.m2.test2 import test2
>>> test2()
m1.m2.test2
>>>
>>> import m1.test1 as t1
>>> t1.test1()
m1.test1
包下的__init__.py文件内容为空,导入包是无法使用的
>>> from m1 import *
>>> m1.test1.test1()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'm1' has no attribute 'test1'
>>>
下面来为__init__.py写内容
(base) [myhaspl@localhost m1]$ pwd
/home/myhaspl/learn/learnpy/learn2/m1
(base) [myhaspl@localhost m1]$ cat __init__.py
import m1.test1
(base) [myhaspl@localhost m1]$
>>> import m1
>>> m1.test1.test1()
m1.test1
(base) [myhaspl@localhost learn2]$ cat ./m1/m2/__init__.py
import m1.m2.test2
(base) [myhaspl@localhost learn2]$
>>> import m1.m2
>>> m1.m2.test2
<module 'm1.m2.test2' from '/home/myhaspl/learn/learnpy/learn2/m1/m2/test2.py'>
>>> m1.m2.test2.test2()
m1.m2.test2
在m1目录下再加入test11.py
然后,修改m1/__init__.py
,加入__all__
以及test11.py
(base) [myhaspl@localhost learn2]$ cat m1/__init__.py
import m1.test1
import m1.test11
__all__ = ["test1","test11"]
>>> from m1 import *
>>> test1
<module 'm1.test1' from '/home/myhaspl/learn/learnpy/learn2/m1/test1.py'>
>>> test11
<module 'm1.test11' from '/home/myhaspl/learn/learnpy/learn2/m1/test11.py'>
>>>
接着,修改m2目录的__init__.py文件。
(base) [myhaspl@localhost learn2]$ cat m1/m2/__init__.py
import m1.m2.test2
__all__=["test2"]
(base) [myhaspl@localhost learn2]$
>>> from m1.m2 import *
>>> test2
<module 'm1.m2.test2' from '/home/myhaspl/learn/learnpy/learn2/m1/m2/test2.py'>
>>>