Python模块和Python包之间有什么区别?
模块是单个文件(一个或多个文件),可在一个导入下导入并使用。例如
import my_module
包是目录中提供包层次结构的模块的集合。
from my_package.timing.danger.internets import function_of_love
任何Python文件都是模块,其名称是文件的基础名称,不带.py扩展名。甲包是Python模块的集合:而一个模块是一个Python文件,一个包是含有一个额外的Python模块的目录__init__.py文件中,一个包从恰好包含一堆Python脚本的一个目录区分开。包可以嵌套到任何深度,只要相应的目录包含它们自己的__init__.py文件即可。
.py
__init__.py
模块和软件包之间的区别似乎仅在文件系统级别上存在。导入模块或包时,Python创建的相应对象始终为type module。但是请注意,当你导入软件包时,仅__init__.py该软件包文件中的变量/函数/类是直接可见的,子软件包或模块则不可见。例如,考虑xmlPython标准库中的包:其xml目录包含一个__init__.py文件和四个子目录;子目录etree包含一个__init__.py文件,以及其他ElementTree.py文件。查看当你尝试以交互方式导入包/模块时会发生什么:
type module
xmlPython
etree
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语言编写的,但是我认为你并不是要考虑问题中的那些模块。