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

时间:2013-10-05 13:08:26

标签: python

我有Java背景,我是Python的新手。在开始之前,我想确保我正确理解Python术语。

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

我对的理解是:库包含许多模块,它们按使用分开。

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

  
      
  • chocolate.py
  •   
  • sweets.py
  •   
  • biscuts.py
  •   

包含在food包中?

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

  • milk.py
  • juice.py

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

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

  1. API
  2. 封装
  3. 模块
  4. 脚本
  5. 所以API将包含2-5的所有内容?

4 个答案:

答案 0 :(得分:53)

来自The Python Tutorial - Modules

  • 模块

      

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

  • 套餐

      

    包是一种使用“点模块名称”构建Python模块命名空间的方法。

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

  

Python只有一种模块对象,所有模块都属于此类   类型,无论模块是用Python,C还是   别的。帮助组织模块并提供命名   层次结构,Python有一个包的概念。

     

您可以将包视为文件系统上的目录   模块作为目录中的文件,但也不要这样比喻   字面上,因为包和模块不需要源自文件   系统。出于本文档的目的,我们将使用此方法   方便的目录和文件类比。喜欢文件系统   目录,包按层次结构组织,包可以   它们本身包含子包,以及常规模块。

     

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

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

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

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

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

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

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

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

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

答案 1 :(得分:26)

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

  1. API不是代码本身的集合 - 它更像是一个“协议”规范,各个部分(通常是库)如何相互通信。 python中有一些值得注意的“标准”API。例如。 DB API

  2. 在我看来,是任何不是应用程序的东西 - 在python中,库是模块 - 通常使用子模块。库的范围变化很​​大 - 例如python standard library很大(具有相当多的子模块),而PyPi中有许多单用途库,例如:一个backport of collections.OrderedDict for py < 2.7

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

  4. module是一个单独的python代码文件,用于导入。这是一个简化,因为在实践中有相当多的模块detect when they are run as script并在这种情况下做了一些特别的事情。

  5. 脚本是一个单独的python代码文件,意图执行作为“主要”程序。

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

答案 2 :(得分:0)

库::它是模块的集合。

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

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

以非正式语言来说,模块是一组代码行,这些代码行用于特定目的,并且可以按原样在其他程序中使用,以避免DRY( D on < strong> R 以团队为单位并专注于主要需求。 source

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

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

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

答案 3 :(得分:0)

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

这可能会造成混淆,我将自己的想法弄糊涂了,所以不必考虑太多。无论如何,上下文都很重要。

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

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

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

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

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

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