Módulo vs. Paquete?

140

Siempre que lo hago, from 'x' import 'y'me preguntaba cuál se considera el 'módulo' y cuál es el 'paquete', y por qué no es al revés.

Templario oscuro
fuente
1
Con respecto a por qué no es al revés, consulte stackoverflow.com/questions/3600352/…
1
Yo, por mi parte, estoy agradecido por esta pregunta, porque la respuesta es concisa y proporciona el conocimiento exacto necesario. La documentación está muy bien, pero es detallada y contiene mucha más información de la que pedía el OP, y ciertamente más de lo que necesitaba. Solo quería una respuesta a esa pregunta específica, y la respuesta a continuación es exactamente lo que quería. Muchos de nosotros simplemente no necesitamos respuestas tan formales o profundas.
Teekin
Un concepto relacionado a conocer - Clases versus módulos en Python
RBT

Respuestas:

192

Un módulo de Python es simplemente un archivo fuente de Python, que puede exponer clases, funciones y variables globales.

Cuando se importa desde otro archivo fuente de Python, el nombre del archivo se trata como un espacio de nombres.

Un paquete de Python es simplemente un directorio de módulos Python.

Por ejemplo, imagine el siguiente árbol de directorios en /usr/lib/python/site-packages:

mypackage/__init__.py <-- this is what tells Python to treat this directory as a package
mypackage/mymodule.py

Entonces harías:

import mypackage.mymodule

o

from mypackage.mymodule import myclass
Ñame Marcovic
fuente
Ajá, así que cuando dices que el nombre del archivo se trata como un espacio de nombres, ¿harías algo así? "mymodule.var1" para el primer caso, o "myclass.var1" para el segundo?
Dark Templar
1
No exactamente. El paquete todavía cuenta como parte del espacio de nombres. Si desea hacer lo que dijo, debe hacerlo desde mypackage import mymodule.
Yam Marcovic
Puede ser útil agregar algo sobre los paquetes de espacios de nombres, para los cuales el código no necesariamente debe aparecer en el mismo árbol de directorios.
holdenweb
@holdenweb Nunca usé los diferentes mecanismos involucrados allí directamente, por lo que no es un experto. Si proporciona una explicación detallada al respecto en una nueva respuesta, me referiré a la mía.
Yam Marcovic
Probablemente sea un poco esotérico para valer la pena, en retrospectiva
holdenweb