Python-包

136 阅读1分钟
  • 包导入示例:

  • dir1要么是我们工作所在目录的子目录,要么就是位于模块搜索路径(sys.path)的一个目录的子目录,无论哪一种,dir1容器都不需要__init__.py文件
  • 当python向下搜索路径时,import语句会在每个目录首次遍历时,执行该目录的初始化文件.print语句加在这里,可以跟踪他们的执行.就像模块一样,也可以传递给reload.
>>> import dir1.dir2.mod
dir1 init
dir2 init
in mod.py
>>> import dir1.dir2.mod
>>> 
>>> from imp import reload

Warning (from warnings module):
  File "__main__", line 1
DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
>>> from imp import reload
>>> reload(dir1)
dir1 init
<module 'dir1' from 'E:\\code\\dir1\\__init__.py'>
>>> 

>>> dir2
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    dir2
NameError: name 'dir2' is not defined
>>> reload(dir2)
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    reload(dir2)
NameError: name 'dir2' is not defined
>>> dir1.dir2
<module 'dir1.dir2' from 'E:\\code\\dir1\\dir2\\__init__.py'>
>>> dir1.dir2.mod
<module 'dir1.dir2.mod' from 'E:\\code\\dir1\\dir2\\mod.py'>
>>> 
>>> dir1.x
1
>>> dir1.dir2.y
2
>>> dir1.dir2.mod.z
3
>>> 
>>> from dir1.dir2 import mod
>>> mod.z
3
>>> from dir1.dir2.mod import z
>>> z
3
>>> import dir1.dir2.mod as mod
>>> mod.z
3
>>> 
  • 相对导入