Python中的包与模块是一样的吗?

1 个回答|177 次阅读
Coco老师 - 公众号:量位学堂Qbit编程
擅长:编程教育

不一样。

在python中,一个.py文件就称之为一个模块(Module)。

如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

示例:

张三写了两个模块:m1.py 和 m2.py;李四也写了俩个模块:m1.py 和 m2.py 。为了避免它们冲突,我们可以通过包来组织模块,我们选择一个顶层包名,比如 zhangsan,按照如下目录存放

zhangsan
├─ __init__.py
├─ m1.py
└─ m2.py

只要李四的顶层包名与张三的不同,那所有模块都不冲突了。

现在,m1.py模块的名称就是zhangsan.m1 , m2.py模块名称就是zhangsan.m2。

请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。

__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是zhangsan。

类似的,可以有多级目录,组成多级层次的包结构。比如如下的目录结构:

mycompany
 ├─ web
 │  ├─ __init__.py
 │  ├─ utils.py
 │  └─ www.py
 ├─ __init__.py
 ├─ abc.py
 └─ xyz.py

文件www.py的模块名就是mycompany.web.www