任何Python文件都是模块,它的名称是文件的基本名称,而不是.py分机。一个包装是Python模块的集合:虽然模块是单个Python文件,但是包是包含额外的Python模块的目录。__init__.py文件,以区分包和刚好包含大量Python脚本的目录。包可以嵌套到任意深度,只要相应的目录包含它们自己的__init__.py档案。
模块和包之间的区别似乎只存在于文件系统级别。当您导入模块或包时,Python创建的相应对象总是类型。module..但是,请注意,当您导入包时,只有变量/函数/类在__init__.py该包的文件是直接可见的,不子包或模块。例如,考虑xmlPython标准库中的包:xml目录包含__init__.py文件和四个子目录;子目录etree包含__init__.py文件,以及,除其他外,ElementTree.py档案。查看当您尝试交互导入包/模块时会发生什么:>>> import xml>>> type(xml)>>> xml.etree.ElementTreeTraceback (most recent call last):
File "", line 1, in AttributeError: 'module' object has no attribute 'etree'
>>> import xml.etree>>> type(xml.etree)>>> xml.etree.ElementTreeTraceback (most recent call last):
File "", line 1, in AttributeError: 'module' object has no attribute 'ElementTree'
>>> import xml.etree.ElementTree>>> type(xml.etree.ElementTree)>>> xml.etree.ElementTree.parse
在Python中也有内置模块,如sys,这是用C写的,但我不认为你想考虑问题中的那些。