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创建的相应对象总是具有类型的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语言编写,但我认为你不打算考虑你的问题。


来自Python术语表:

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

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

链接地址: http://www.djcxy.com/p/54821.html

上一篇: What's the difference between a Python module and a Python package?

下一篇: Importing files from different folder