一尘不染

Python模块和Python包之间有什么区别?

python

Python模块和Python包之间有什么区别?


阅读 473

收藏
2020-02-18

共2个答案

一尘不染

模块是单个文件(一个或多个文件),可在一个导入下导入并使用。例如

import my_module

包是目录中提供包层次结构的模块的集合。

from my_package.timing.danger.internets import function_of_love
2020-02-18
一尘不染

任何Python文件都是模块,其名称是文件的基础名称,不带.py扩展名。甲包是Python模块的集合:而一个模块是一个Python文件,一个包是含有一个额外的Python模块的目录__init__.py文件中,一个包从恰好包含一堆Python脚本的一个目录区分开。包可以嵌套到任何深度,只要相应的目录包含它们自己的__init__.py文件即可。

模块和软件包之间的区别似乎仅在文件系统级别上存在。导入模块或包时,Python创建的相应对象始终为type module。但是请注意,当你导入软件包时,仅__init__.py该软件包文件中的变量/函数/类是直接可见的,子软件包或模块则不可见。例如,考虑xmlPython标准库中的包:其xml目录包含一个__init__.py文件和四个子目录;子目录etree包含一个__init__.py文件,以及其他ElementTree.py文件。查看当你尝试以交互方式导入包/模块时会发生什么:

>>> import xml
>>> type(xml)
<type 'module'>
>>> xml.etree.ElementTree
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'etree'
>>> import xml.etree
>>> type(xml.etree)
<type 'module'>
>>> xml.etree.ElementTree
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'ElementTree'
>>> import xml.etree.ElementTree
>>> type(xml.etree.ElementTree)
<type 'module'>
>>> xml.etree.ElementTree.parse
<function parse at 0x00B135B0>

在Python中,还存在一些内置模块(例如)sys,这些模块都是用C语言编写的,但是我认为你并不是要考虑问题中的那些模块。

2020-02-18