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

另请参阅:“包”和“模块”之间的区别(对于其他语言)


当前回答

模块:模块是一个简单的Python文件,扩展名为(.py),包含函数和全局变量的集合。它是一个可执行文件,Python中的Package概念用于排列所有模块。

例如:将代码保存在名为demo(module.py)的文件中。

def myModule1(name):
    print("My Module name is: "+ name)

导入演示模块模块并在其中使用myModule1函数。

import demo_module
  
demo_module.myModule1("Math")

解决方案:

我的模块名称是:数学

包:包是包含模块集合的基本目录。该目录包含Python模块以及一个(__init.py__)文件,解释器使用该文件将其识别为包。该包只不过是一个命名空间。在包中,有子包。

例如:

学生(套餐)

|__init__.py(构造函数)

|details.py(模块)

|marks.py(模块)

|collegeDetails.py(模块)

|demo_module.py(模块)

包是一组组织成目录以形成包目录的模块。

from Student import details, collegeDetails, demo_module

其他回答

我知道,现在太晚了,但对一些人来说,一个简单的答案就足够了:

模块是文件,

包是一个文件夹。

迟来的答案,还有另一个定义:

包由导入的顶级实体表示,该顶级实体可以是一个独立模块,或__init__.py特殊模块作为子目录结构中的一组模块中的顶级实体。

因此,包实际上是一个分发单元,它提供一个或多个模块。

从Python词汇表中:

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

名称中带有破折号的Python文件(如my-file.py)不能用简单的import语句导入。代码方面,importmyfile与importmy-file相同,这会引发异常。这样的文件更好地被描述为脚本,而可导入的文件是模块。

模块:模块是一个简单的Python文件,扩展名为(.py),包含函数和全局变量的集合。它是一个可执行文件,Python中的Package概念用于排列所有模块。

例如:将代码保存在名为demo(module.py)的文件中。

def myModule1(name):
    print("My Module name is: "+ name)

导入演示模块模块并在其中使用myModule1函数。

import demo_module
  
demo_module.myModule1("Math")

解决方案:

我的模块名称是:数学

包:包是包含模块集合的基本目录。该目录包含Python模块以及一个(__init.py__)文件,解释器使用该文件将其识别为包。该包只不过是一个命名空间。在包中,有子包。

例如:

学生(套餐)

|__init__.py(构造函数)

|details.py(模块)

|marks.py(模块)

|collegeDetails.py(模块)

|demo_module.py(模块)

包是一组组织成目录以形成包目录的模块。

from Student import details, collegeDetails, demo_module

任何Python文件都是一个模块,其名称是文件的基本名称,不带.py扩展名。包是Python模块的集合:虽然模块是单个Python文件,但包是包含额外__init__.py文件的Python模块目录,以区分包和恰好包含一堆Python脚本的目录。只要相应的目录包含自己的__init__.py文件,包可以嵌套到任何深度。

模块和包之间的区别似乎只在文件系统级别上存在。当您导入模块或包时,Python创建的相应对象总是模块类型。但是,请注意,当您导入包时,只有该包的__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编写的,但我不认为您打算在问题中考虑这些模块。