¿Cuál es la diferencia entre un módulo y una biblioteca en Python?

86

Tengo experiencia en Java y soy nuevo en Python. Quiero asegurarme de entender correctamente la terminología de Python antes de continuar.

Mi comprensión de un módulo es: un script que puede ser importado por muchos scripts, para facilitar la lectura. Al igual que en Java, tiene una clase, y muchas otras clases pueden importar esa clase.

Mi comprensión de una biblioteca es: una biblioteca contiene muchos módulos que están separados por su uso.

Mi pregunta es: ¿Son las bibliotecas como paquetes, donde tiene un paquete, por ejemplo food, llamado , entonces:

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

están contenidos en el foodpaquete?

O las bibliotecas usan paquetes, por lo que si tuviéramos otro paquete drink:

  • milk.py
  • jugo.py

contenido en el paquete. ¿ libraryContiene dos paquetes?

Además, una interfaz de programación de aplicaciones (API) generalmente contiene un conjunto de bibliotecas que se encuentra en la parte superior de la jerarquía:

  1. API
  2. Biblioteca
  3. Paquete
  4. Módulo
  5. Guión

Entonces, ¿una API constará de 2-5?

bufón
fuente
3
Python usa el término "paquete" y no mucho "biblioteca" (aparte de la Biblioteca estándar).
John Zwinck

Respuestas:

75

Del tutorial de Python - Módulos

  • Módulo :

    Un módulo es un archivo que contiene definiciones y declaraciones de Python. El nombre del archivo es el nombre del módulo con el sufijo .pyagregado.

  • Paquete :

    Los paquetes son una forma de estructurar el espacio de nombres del módulo de Python mediante el uso de "nombres de módulo con puntos".

Si lee la documentación de la importdeclaración da más detalles, por ejemplo:

Python tiene solo un tipo de objeto de módulo , y todos los módulos son de este tipo, independientemente de si el módulo está implementado en Python, C u otra cosa. Para ayudar a organizar los módulos y proporcionar una jerarquía de nombres, Python tiene un concepto de paquetes.

Puede pensar en los paquetes como directorios en un sistema de archivos y los módulos como archivos dentro de directorios, pero no tome esta analogía demasiado literalmente, ya que los paquetes y módulos no necesitan originarse en el sistema de archivos. Para los propósitos de esta documentación, usaremos esta conveniente analogía de directorios y archivos. Al igual que los directorios del sistema de archivos, los paquetes están organizados jerárquicamente y los paquetes pueden contener subpaquetes, así como módulos regulares.

Es importante tener en cuenta que todos los paquetes son módulos, pero no todos los módulos son paquetes. O dicho de otra manera, los paquetes son solo un tipo especial de módulo. En concreto, cualquier módulo que contenga un __path__atributo se considera un paquete.

Por lo tanto, el término se modulerefiere a una entidad específica: es una clase cuyas instancias son los moduleobjetos que usa en los programas de Python. También se utiliza, por analogía, para hacer referencia al archivo en el sistema de archivos a partir del cual estas instancias "se crean".

El término script se utiliza para referirse a un módulo cuyo objetivo es ser ejecutado. Tiene el mismo significado que "programa" o "aplicación", pero generalmente se usa para describir programas simples y pequeños (es decir, un solo archivo con como máximo algunos cientos de líneas). Escribir un guión lleva unos minutos o unas pocas horas.

El término biblioteca es simplemente un término genérico para un montón de código que fue diseñado con el objetivo de ser utilizado por muchas aplicaciones. Proporciona algunas funciones genéricas que pueden ser utilizadas por aplicaciones específicas.

Cuando se "publica" un módulo / paquete / algo más, la gente a menudo se refiere a él como una biblioteca. A menudo, las bibliotecas contienen un paquete o varios paquetes relacionados, pero podría ser incluso un solo módulo.

Las bibliotecas normalmente no ofrecen ninguna funcionalidad específica, es decir, no puede "ejecutar una biblioteca".

La API puede tener diferentes significados según el contexto. Por ejemplo:

  • puede definir un protocolo como DB API o el protocolo de búfer .
  • puede definir cómo interactuar con una aplicación (por ejemplo, la Python/C API)
  • cuando se relaciona con una biblioteca / paquete, simplemente la interfaz proporcionada por esa biblioteca para su funcionalidad (conjunto de funciones / clases / constantes, etc.)

En cualquier caso, una API no es un código Python. Es una descripción que puede ser más o menos formal.

Bakuriu
fuente
37

Solo el paquete y el módulo tienen un significado bien definido específico de Python.

  1. Una API no es una colección de código en , es más como una especificación de "protocolo" de cómo varias partes (generalmente bibliotecas) se comunican entre sí. Hay algunas API "estándar" notables en Python. Por ejemplo, la API de base de datos

  2. En mi opinión, una biblioteca es cualquier cosa que no sea una aplicación ; en Python, una biblioteca es un módulo , generalmente con submódulos . El alcance de una biblioteca es bastante variable; por ejemplo, la biblioteca estándar de Python es vasta (con bastantes submódulos) mientras que hay muchas bibliotecas de propósito único en PyPi, por ejemplo, un backport de collections.OrderedDictpara py <2.7

  3. Un paquete es una colección de módulos de Python bajo un espacio de nombres común. En la práctica, uno se crea colocando varios módulos de Python en un directorio con un __init__.pymódulo especial (archivo).

  4. Un módulo es un archivo único de código Python destinado a ser importado . Esto es un poco simplificado ya que en la práctica bastantes módulos detectan cuando se ejecutan como script y hacen algo especial en ese caso.

  5. Una secuencia de comandos es un archivo único de código Python que debe ejecutarse como el programa "principal".

  6. Si tiene un conjunto de código que abarca varios archivos, probablemente tenga una aplicación en lugar de un script.

Kimvais
fuente
1

Biblioteca: es una colección de módulos.

(La biblioteca contiene módulos integrados (escritos en C) + módulos escritos en python).

Módulo: cada uno de un conjunto de partes estandarizadas o unidades independientes que se pueden usar para construir una estructura más compleja.

Hablando en un lenguaje informal, un módulo es un conjunto de líneas de código que se usan para un propósito específico y se pueden usar en otros programas tal cual, para evitar DRY ( D on't R epeat Y yourself ) como equipo y enfocarse en requisito principal. fuente

API es una interfaz para que otras aplicaciones interactúen con su biblioteca sin tener acceso directo.

El paquete es básicamente un directorio con archivos.

Script significa una serie de comandos dentro de un solo archivo.

Premraj
fuente
0

Trataré de responder esto sin usar términos que usarían los primeros principiantes, y explicaré por qué o cómo los usaron de manera diferente, junto con el uso más "oficial" y / o más entendido o uniforme de los términos.

Puede ser confuso y me confundí pensando demasiado, así que no pienses mucho en eso. De todos modos, el contexto importa mucho.

Biblioteca : la mayoría de las veces se referirá a la biblioteca general u otra colección creada con un formato y uso similar. La Biblioteca General es la suma de Módulos 'estándar', populares y ampliamente utilizados, que pueden considerarse herramientas de un solo archivo, por ahora o atajos que hacen las cosas posibles o más rápidas. La biblioteca general es una opción que la mayoría de la gente habilita al instalar Python. Debido a que tiene este nombre "Biblioteca general de Python", se usa a menudo con una estructura e ideas similares. Witch es simplemente tener un montón de módulos, tal vez incluso paquetes agrupados, generalmente en una lista. La lista suele ser para descargarlos. Generalmente se trata solo de archivos relacionados, con intereses similares. Esa es la forma más sencilla de describirlo.

Módulo : un módulo se refiere a un archivo. El archivo tiene un script 'en él' y el nombre del archivo es el nombre del módulo, los archivos de Python terminan con .py. Todo el archivo contiene es código que se ejecutó en conjunto hace que algo suceda, mediante el uso de funciones, cadenas, etc. Los módulos principales que probablemente ve con más frecuencia son populares porque son módulos especiales que pueden obtener información de otros archivos / módulos. Es confuso porque el nombre del archivo y el módulo son iguales y simplemente suelte el .py. Realmente es solo código que puede usar como un atajo escrito por alguien para hacer algo más fácil o posible.

Paquete : este es un término que se usa generalmente a veces, aunque el contexto marca la diferencia. El uso más común de mi experiencia son múltiples módulos (o archivos) que están agrupados. La razón por la que se agrupan puede deberse a varias razones, es decir, cuando el contexto importa. Estas son las formas en que he notado el término paquete (s)usado. Son un grupo de módulos descargados, creados y / o almacenados. Lo cual puede ser cierto, o solo 1, pero en realidad es solo un archivo que hace referencia a otros archivos, que deben estar en la estructura o formato correcto, y esa suma completa es el paquete en sí, instalado o puede haber sido incluido en el biblioteca general de Python. Un paquete puede contener módulos (archivos .py) porque dependen unos de otros y, en ocasiones, es posible que no funcionen correctamente o no funcionen en absoluto. Siempre hay un objetivo común de cada parte (módulo / archivo) de un paquete, y la suma total de todas las partes es el paquete en sí.

La mayoría de las veces en Python, los paquetes son módulos, porque el nombre del paquete es el nombre del módulo que se usa para conectar todas las piezas. Entonces puede ingresar un paquete porque es un módulo, también le permite llamar a otros módulos, que no son paquetes porque solo realizan una determinada función, o la tarea no involucra otros archivos. Los paquetes tienen un objetivo y cada módulo trabaja en conjunto para lograr ese objetivo final.

La mayor parte de la confusión proviene de un simple nombre de archivo o prefijo a un archivo, usado como nombre del módulo y luego nuevamente como nombre del paquete.

Recuerde que se pueden instalar módulos y paquetes. Biblioteca suele ser un término genérico para enumerar o formatear un grupo de módulos y paquetes. Al igual que la biblioteca general de Pythons. Una jerarquía no funcionaría, las API no pertenecen realmente, y si lo hiciera, podrían estar en cualquier lugar y en todos los productos que involucren Script, Módulo y Paquetes, siendo la biblioteca mundial una palabra tan general, que se aplica fácilmente a muchas cosas, también hace que API sea capaz sentarse encima o debajo de eso. Algunos módulos pueden basarse en otro código, y esa es la única vez que creo que se relacionaría con una discusión puramente relacionada con Python.

Mizat
fuente