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


86

我具有Java的背景知识,并且是Python的新手。在继续之前,我想确保我正确理解Python术语。

我对模块的理解是:一个可以被许多脚本导入的脚本,使阅读更加容易。就像在Java中一样,您有一个类,并且该类可以被许多其他类导入。

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

我的问题是:库是否像软件包,您有一个名为的软件包food,然后:

  • Chocolate.py
  • sweets.py
  • biscuts.py

food包装中是否包含?

还是图书馆使用软件包,所以如果我们有另一个软件包drink

  • 牛奶
  • juice.py

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

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

  1. API
  2. 图书馆
  3. 模组
  4. 脚本

因此,API将由2-5构成吗?


3
Python使用术语“包”而不是“库”(标准库除外)。
John Zwinck

Answers:


75

Python教程-模块

  • 模块

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

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

如果您阅读该文档的import声明,则会提供更多详细信息,例如:

Python只有一种类型的模块对象,并且所有模块都是这种类型的,而不管该模块是用Python,C还是其他方式实现的。为了帮助组织模块并提供命名层次结构,Python提供了包的概念。

您可以将包视为文件系统上的目录,而将模块视为目录中的文件,但是不要从字面上看这样的类比,因为包和模块不需要源自文件系统。出于本文档的目的,我们将使用目录和文件的这种便利类比。像文件系统目录一样,程序包是按层次结构组织的,并且程序包本身可能包含子程序包以及常规模块。

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

因此,该术语module指的是特定实体:这是一个类,其实例是module您在python程序中使用的对象。类似地,它也用于引用文件系统中创建这些实例的文件。

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

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

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

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

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

  • 它可以定义一个协议,例如DB API缓冲协议
  • 它可以定义如何与应用程序进行交互(例如Python/C API
  • 当与库/包相关时,它只是该库提供的用于其功能(函数/类/常量等的集合)的接口。

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


37

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

  1. 一个API不是代码的集合本身-它更像一个“协议”说明书中的各个部件(通常库)如何与彼此通信。python中有一些值得注意的“标准” API。例如DB API

  2. 我认为,是不是应用程序的任何东西-在python中,库是模块-通常带有子模块。库的范围相当变量-例如Python标准库是巨大的(有相当多的子模块),同时也有很多单个目的库中的PyPI,例如的反向移植collections.OrderedDict为PY <2.7

  3. 是python模块在一个共同的命名空间的集合。实际上,是通过将多个python模块放置在具有特殊__init__.py模块(文件)的目录中来创建的。

  4. 模块是其旨在被Python代码的单个文件导入。这有点简化,因为在实践中,有很多模块会检测何时以脚本形式运行,并在这种情况下执行一些特殊操作。

  5. 脚本是,是为了将Python代码的单个文件执行作为“主”程序。

  6. 如果您有一组跨多个文件的代码,则可能有一个应用程序而不是脚本。


1

库:它是模块的集合。

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

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

在非正式的语言发言,A模块被设定,它被用于一个特定的目的,并且可以在其他程序中使用,因为它是行的代码,以避免DRY(d on't ř EPEAT Ÿ我们自己)作为一个团队和聚焦上主要要求。资源

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

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

脚本表示单个文件中的一系列命令。


0

我将尝试不使用最早的初学者会使用的术语来回答这个问题,并解释为什么或如何不同地使用它们,以及最“正式”和/或最易理解或统一使用的术语。

这可能会造成混淆,我将自己的思维弄得很辛苦,所以不要考虑太多。无论如何,上下文非常重要。

-通常会引用通用库或以类似格式和用途创建的另一个集合。通用库是“标准”,流行和广泛使用的模块的总和,可以将之视为单个文件工具,无论是现在还是通过快捷方式都可以使事情成为可能或更快。通用库是大多数人在安装Python时启用的选项。由于它的名称为“ Python General Library”,因此经常用于类似的结构和构想。Witch只是简单地将一堆模块,甚至包打包在一起,通常在一个列表中。该列表通常是下载它们。通常,它只是相关文件,具有相似的兴趣。这是描述它的最简单方法。

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

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

Python包中最常使用的是模块,因为包名称是用于连接所有部件的模块的名称。因此,您可以输入一个包,因为它是一个模块,也允许它调用其他模块,这些模块不是包,因为它们仅执行特定功能,或者任务不涉及其他文件。程序包有一个目标,并且每个模块一起工作以实现最终目标。

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

请记住,可以安装模块和软件包。库通常是用于列出或格式化一组模块和软件包的通用术语。很像Pythons的通用库。层次结构不起作用,API并不真正属于您,如果您可以将它们放在任何地方,并且每个涉及脚本,模块和包的商品,worl库都是一个通用词,可以轻松应用于许多事物,这​​也使API能够坐在上面或下面。有些模块可以基于其他代码,这是我认为这是唯一一次与纯Python相关的讨论有关的模块。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.