Supongamos que tengo una función o clase de python útil (o lo useful_thing
que sea) llamada que existe en un solo archivo. Esencialmente hay dos formas de organizar el árbol de origen. La primera forma usa un solo módulo:
- setup.py
- README.rst
- ...etc...
- foo.py
donde useful_thing
se define en foo.py
. La segunda estrategia es hacer un paquete:
- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py
donde useful_thing
se define en module.py
. En el caso del paquete __init__.py
se vería así
from foo.module import useful_thing
para que en ambos casos puedas hacer from foo import useful_thing
.
Pregunta: ¿Qué camino se prefiere y por qué?
EDITAR: Dado que el usuario gnat dice que esta pregunta está mal formada, agregaré que el tutorial oficial de empaquetado de Python no parece comentar cuál de los métodos descritos anteriormente es el preferido. Yo estoy explícitamente no dando mi lista personal de pros y contras porque estoy interesado en saber si existe un método preferido de la comunidad, no generar una discusión de ventajas / desventajas :)
fuente
Respuestas:
Haces lo más simple que te funciona .
Para un módulo de una función , no tiene absolutamente ningún sentido crear un paquete. Los paquetes son útiles para crear un espacio de nombres adicional y / o para organizar su código en múltiples módulos.
Los módulos
json
yunittest
en la biblioteca estándar de Python son realmente paquetes, por ejemplo, para fines de organización de código. Pero está perfectamente bien dejar el código actualmente viviendo en un solo archivo de Python, como un solo módulo.Si quieres ejemplos:
six
es una distribución de solo un módulosetuptools_subversion
,formatflowed
,rtfunicode
.Para ver un buen ejemplo de proyectos que realmente hacen un uso excelente de los paquetes, consulte:
requests
No hay una recomendación "oficial"; Ambas opciones son completamente válidas.
fuente