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

我有 Java 背景,对 Python 也是新手。在继续之前,我希望确保正确理解 Python 术语。

我对 模组的理解是: 一个可以通过许多脚本导入的脚本,以便于阅读。就像在 Java 中一样,你有一个类,这个类可以被许多其他的类导入。

我对 图书馆的理解是: 一个库包含许多 modules,这些 modules由它的使用分隔开来。

My question is: Are libraries like packages, where you have a package e.g. called food, then:

  • 巧克力味的
  • 小甜甜 Py
  • biscuts.py

是否包含在 food软件包中?

或者库使用软件包,所以如果我们有另一个软件包 drink:

  • Milk Py
  • Juice Py

library包含两个包?

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

  1. 空气污染指数
  2. 图书馆
  3. 包裹
  4. 模组
  5. 剧本

所以一个 API 将包括所有从2-5?

114895 次浏览

只有 包裹模组具有特定于 Python 的定义良好的含义。

  1. 空气污染指数 不是代码 本质上的集合-它更像一个“协议”规范,各个部分(通常是库)如何彼此通信。在 python 中有一些值得注意的“标准”API。例如 数据库 API

  2. 在我看来,图书馆是任何不是 申请的东西-在 python 中,库是 模组-通常是 子模组。库的作用域是相当多变的——例如,Python 标准库非常庞大(有相当多的子模块) ,而 PyPi 中有很多单一用途的库,例如 对于 py < 2.7的 collections.OrderedDict的 backport

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

  4. A 模块 is a single file of python code that is meant to be 进口的. This is a bit of a simplification since in practice quite a few modules detect when they are run as script and do something special in that case.

  5. script是一个 Python 代码的单个文件,意味着 处决作为‘ main’程序。

  6. If you have a set of code that spans multiple files, you probably have an 申请 instead of script.

来自 Python 教程-模块

  • 单元 :

    A module is a file containing Python definitions and statements. The file name is the module name with the suffix .py appended.

  • 包装 :

    包是通过使用“虚线模块名称”来构造 Python 模块名称空间的一种方法。

如果您阅读了 import语句的文档,您会发现更多的细节,例如:

Python 只有一种 module object类型,所有模块都是这种类型 type, regardless of whether the module is implemented in Python, C, or 帮助组织模块并提供命名 Python 有一个包的概念。

您可以将包视为文件系统上的目录,并且 模块作为目录中的文件,但不要采用这种类比 因为包和模块不需要来自文件 系统。出于本文档的目的,我们将使用 目录和文件的方便类比。类似文件系统 directories, packages are organized hierarchically, and packages may 它们本身包含子包和常规模块。

请记住,< strong > 所有的包都是模块,但不是 所有的模块都是软件包。或者换句话说,软件包只是一个 特殊类型的模块。具体来说,任何包含 __path__属性被认为是一个包

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

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

术语 图书馆只是一个通用术语,指的是一组旨在被许多应用程序使用的代码。它提供了一些可供特定应用程序使用的通用功能。

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

Libraries usually do not provide any specific functionality, i.e. you cannot "run a library".

The API can have different meanings depending on the context. For example:

  • 它可以定义像 数据库 API缓冲协议这样的协议。
  • 它可以定义如何与应用程序交互(例如 Python/C API)
  • 当与一个库/包相关时,它仅仅是该库为其功能提供的接口(一组函数/类/常量等)

在任何情况下,API 都是 没有 python 代码。

库: 它是模块的集合。

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

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

在非正式语言中,模块是一组用于特定目的的代码行,可以用于其他程序,以避免 DRY (Don’t Repeat 为什么ourself)作为一个团队,并关注主要需求。来源

API 是其他应用程序无需直接访问就可以与库交互的接口。

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

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

I will try to answer this without using terms the earliest of beginners would use,and explain why or how they used differently, along with the most "official" and/or most understood or uniform use of the terms.

这可能会令人困惑,我困惑自己努力思考,所以不要想太多。不管怎样,环境很重要。

Library -通常指的是使用类似格式和用法创建的常规库或其他集合。总库是“标准”的总和,流行和广泛使用的模块,巫婆可以被认为是单一的文件工具,现在或捷径使事情成为可能或更快。大多数人在安装 Python 时都会启用常规库。因为它有这个名字“ Python General Library”,所以经常用到类似的结构和思想。Witch 仅仅是将一些模块,甚至包组合在一起,通常是在一个列表中。这个列表通常是用来下载它们的。一般来说,它只是相关的文件,具有相似的兴趣。这是最简单的描述了。

模块 -模组引用一个文件。该文件有脚本‘ in it’,文件的名称是模块的名称,Python 文件以。Py.所有文件包含的代码一起运行,通过使用函数,字符串等使一些事情发生。 您可能最常见的主要模块非常流行,因为它们是可以从其他文件/模块获取信息的特殊模块。 这是令人困惑的,因为文件和模块的名称是相等的,只需删除。Py.实际上,这只是一些代码,你可以用它作为某人写的一个快捷方式,使事情变得更容易或更可能。

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

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

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

记住可以安装模块和软件包。库通常是列出或格式化一组模块和包的通用术语。很像 Python 通用库。层次结构不起作用,API 不属于真正的 API,如果你这样做了,它们可能在任何地方,每一个涉及脚本、模块和软件包的软件,世界库是这样一个通用的词,很容易应用到很多事情上,也使得 API 能够高于或低于它。有些模块可以基于其他代码,这是我认为唯一与纯 Python 相关的讨论相关的时候。