Python 模块和 Python 包之间有什么区别?
另请参阅: “包”和“模块”之间有什么区别(对于其他语言)
原文由 Dave 发布,翻译遵循 CC BY-SA 4.0 许可协议
Python 模块和 Python 包之间有什么区别?
另请参阅: “包”和“模块”之间有什么区别(对于其他语言)
原文由 Dave 发布,翻译遵循 CC BY-SA 4.0 许可协议
任何 Python 文件都是一个 模块,它的名称是文件的基本名称,没有 .py
扩展名。 包 是 Python 模块的集合:虽然模块是单个 Python 文件,但包是 Python 模块的目录,其中包含一个额外的 __init__.py
文件,以区分包和恰好包含的目录一堆 Python 脚本。包可以嵌套到任何深度,前提是相应的目录包含它们自己的 __init__.py
文件。
模块和包之间的区别似乎只存在于文件系统级别。当您导入模块或包时,Python 创建的相应对象始终是类型 module
。但是请注意,当您导入一个包时,只有该包的 __init__.py
文件中的变量/函数/类是直接可见的, 而不是 子包或模块。例如,考虑 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 语言编写的,但我认为您不打算考虑问题中的那些。
原文由 Giulio Piancastelli 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.3k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
2 回答968 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
模块是在一次导入下导入并使用的单个文件(或多个文件)。例如
包是目录中模块的集合,它们给出了包层次结构。
模块文档
包介绍