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

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文件,包可以嵌套到任意深度。

模块和包之间的区别似乎只在文件系统级别上。 当你导入一个模块或者一个包时,由Python创build的相应的对象总是具有types的module 。 但是,请注意,导入包时,只能直接看到该包的__init__.py文件中的variables/函数/类, 而不是子包或模块。 例如,考虑Python标准库中的xml包:它的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编写,但我不认为你的意思是考虑那些在你的问题。

从Python文档( 这里 ):

记住所有包是模块是很重要的,但并不是所有的模块都是包。 换句话说,软件包只是一种特殊的模块。 具体而言,包含__path__属性的任何模块都被视为一个包。

包的术语定义见这里 。

名称中带短划线的Python文件(如my-file.py )不能使用简单的import语句import 。 代码方面, import my-file是相同的import my - file ,这将引发exception。 这样的文件更好地表征为脚本,而可导入的文件是模块

迟到的答案还有一个定义:

A package is represented by an imported top-entity which could either be a self-contained module, or the '__init__.py' special module as the top-entity from a set of modules within a sub directory structure.

所以物理上一个包是一个分配单元,它提供一个或多个模块。

所以,你回想起你的教科书上内容页面上章节分为几个单元的地方。 所以说不同的章节有不同的概念,它们有着相同的目标,或者是同一个理论的部分,然后把这些部分聚合在一起,形成模块。 同样,在编程中,当不同的function聚集在一起时,它们被分离并命名为模块。