ChatGPT解决这个技术问题 Extra ChatGPT

Python中的模块和库有什么区别?

我有 Java 背景,我是 Python 新手。在继续之前,我想确保我正确理解了 Python 术语。

我对模块的理解是:一个脚本,可以被很多脚本导入,方便阅读。就像在java中你有一个类,这个类可以被许多其他类导入。

我对库的理解是:一个库包含许多模块,这些模块按其用途分开。

我的问题是:库是否像包一样,你有一个包,例如名为 food,然后:

巧克力.py 糖果.py 饼干.py

包含在 food 包中?

或者库是否使用包,所以如果我们有另一个包 drink

牛奶.py

果汁.py

包含在包装中。 library 包含两个包?

此外,应用程序编程接口 (API) 通常包含一组库,位于层次结构的顶部:

API 库包模块脚本

所以一个 API 将由 2-5 组成?

Python 使用术语“包”而不是“库”(标准库除外)。
这是一篇很好的文章,解释了模块、包、库和python 上下文中的框架:learnpython.com/blog/…

B
Bakuriu

来自The Python Tutorial - Modules

模块:模块是包含 Python 定义和语句的文件。文件名是后缀.py的模块名。

包:包是一种通过使用“带点的模块名称”来构建 Python 模块名称空间的方式。

如果您阅读 import 语句的文档会提供更多详细信息,例如:

Python只有一种模块对象,所有模块都是这种类型,不管模块是用Python、C还是其他方式实现的。为了帮助组织模块并提供命名层次结构,Python 有一个包的概念。您可以将包视为文件系统上的目录,将模块视为目录中的文件,但不要过于字面地理解这个类比,因为包和模块不必源自文件系统。出于本文档的目的,我们将使用这个方便的目录和文件类比。与文件系统目录一样,包是分层组织的,包本身可能包含子包以及常规模块。请务必记住,所有包都是模块,但并非所有模块都是包。或者换句话说,包只是一种特殊的模块。具体来说,任何包含 __path__ 属性的模块都被视为一个包。

因此,术语 module 指的是特定实体:它是一个类,其实例是您在 python 程序中使用的 module 对象。以此类推,它还用于指代“创建”这些实例的文件系统中的文件。

术语脚本用于指代要执行的模块。它与“程序”或“应用程序”具有相同的含义,但通常用于描述简单和小型的程序(即最多数百行的单个文件)。编写脚本需要几分钟或几个小时。

术语库只是一堆代码的通用术语,其设计目的是供许多应用程序使用。它提供了一些可供特定应用程序使用的通用功能。

当模块/包/其他东西被“发布”时,人们通常将其称为库。库通常包含一个包或多个相关包,但它甚至可以是一个模块。

库通常不提供任何特定功能,即您不能“运行库”。

API 可以根据上下文有不同的含义。例如:

它可以定义像 DB API 或缓冲区协议这样的协议。

它可以定义如何与应用程序交互(例如 Python/C API)

当与库/包相关时,它只是该库为其功能提供的接口(函数集/类/常量等)

在任何情况下,API 都不是 python 代码。这是一个或多或少正式的描述。


K
Kimvais

只有包和模块具有特定于 Python 的明确定义的含义。

API 本身并不是代码的集合——它更像是一个“协议”规范,各个部分(通常是库)如何相互通信。 python中有一些值得注意的“标准”API。例如 DB API 在我看来,库是任何不是应用程序的东西——在 python 中,库是一个模块——通常带有子模块。库的范围是相当多变的——例如 python 标准库很大(有很多子模块),而 PyPi 中有很多单一用途的库,例如集合的反向移植。OrderedDict for py < 2.7 一个包是一个公共命名空间下的 Python 模块集合。在实践中,通过将多个 python 模块放置在具有特殊 __init__.py 模块(文件)的目录中来创建一个。模块是要导入的单个 python 代码文件。这有点简化,因为在实践中相当多的模块会检测它们何时作为脚本运行并在这种情况下执行一些特殊操作。脚本是一个 Python 代码文件,旨在作为“主”程序执行。如果您有一组跨越多个文件的代码,那么您可能有一个应用程序而不是脚本。


所以在 matplotlib.pyplot 中,matplotlib 是包,pyplot 是模块,对吧? @Kimvais
@舒布yes
P
Premraj

库:它是模块的集合。

(库要么包含内置模块(用 C 编写)+ 用 python 编写的模块)。

模块:可用于构建更复杂结构的一组标准化部件或独立单元中的每一个。

用非正式的语言来说,模块是一组用于特定目的的代码行,可以按原样在其他程序中使用,以避免 DRY(Don't R 重复Y我们自己)作为一个团队并专注于主要需求。 source

API 是其他应用程序无需直接访问即可与您的库进行交互的接口。

包基本上是一个包含文件的目录。

脚本是指单个文件中的一系列命令。


M
Mizat

我将尝试在不使用初学者最早使用的术语的情况下回答这个问题,并解释他们为什么或如何使用不同的术语,以及这些术语的最“官方”和/或最容易理解或统一的用法。

这可能会让人感到困惑,我把自己的想法弄糊涂了,所以不要想太多。无论如何,上下文很重要。

图书馆——通常是指通用图书馆或以类似格式和用途创建的其他馆藏。通用库是“标准”、流行和广泛使用的模块的总和,现在可以将其视为单个文件工具,或者使事情成为可能或更快的捷径。通用库是大多数人在安装 Python 时启用的选项。因为它有这个名称“Python 通用库”,所以它经常以类似的结构和想法使用。 Witch 只是拥有一堆模块,甚至可能是组合在一起的包,通常在一个列表中。该列表通常用于下载它们。通常它只是相关的文件,具有相似的兴趣。这是描述它的最简单的方式。

模块 - 模块指的是一个文件。该文件“在其中”有脚本,文件名是模块的名称,Python 文件以 .py 结尾。文件包含的所有代码都是一起运行的代码,通过使用函数、字符串等来实现。您可能最常看到的主要模块很受欢迎,因为它们是可以从其他文件/模块获取信息的特殊模块。这很令人困惑,因为文件名和模块名相同,只需删除 .py。实际上,它只是您可以用作某人编写的快捷方式的代码,以使某些事情变得更容易或成为可能。

包 - 这是一个通常有时使用的术语,尽管上下文有所不同。根据我的经验,最常见的用途是组合在一起的多个模块(或文件)。为什么将它们组合在一起可能有几个原因,那就是上下文很重要。这些是我注意到使用术语包的方式。它们是一组已下载、创建和/或存储的模块。这可能都是真的,或者只有 1 个,但实际上它只是一个引用其他文件的文件,需要采用正确的结构或格式,并且整个总和是包本身,已安装或可能已包含在python通用库。一个包可以包含模块(.py 文件),因为它们相互依赖,有时可能无法正常工作,或者根本无法正常工作。包的每个部分(模块/文件)总是有一个共同的目标,所有部分的总和就是包本身。

Python 包中最常见的是模块,因为包名是用于连接所有部分的模块的名称。所以你可以输入一个包,因为它是一个模块,也允许它调用其他模块,这些模块不是包,因为它们只执行某个功能,或者任务不涉及其他文件。包有一个目标,每个模块协同工作以实现该最终目标。

大多数混淆来自简单的文件文件名或文件前缀,用作模块名称,然后再次用作包名称。

记住可以安装模块和包。库通常是列出或格式化一组模块和包的通用术语。很像 Python 的通用库。层次结构是行不通的,API 不属于真正的,如果你这样做了,它们可能在任何地方和每一个涉及脚本、模块和包的产品中,worl library 是一个如此笼统的词,很容易应用于许多事物,也使 API 能够坐在上面或下面。一些模块可以基于其他代码,这是唯一一次我认为它与纯 Python 相关的讨论有关。