2012-05-04 8 views
5

Digamos que tengo que escribir varias bibliotecas pequeñas y medianas para mi empresa.escribiendo bibliotecas de Python: mejores prácticas de estructura, nomenclatura e importación

¿Tiene sentido, de una manera Pythonic, para utilizar el Método de Java y el prefijo de todos ellos con un paquete de alto nivel común (ejem, módulo) como el logro de la siguiente estructura:

mycompany.mylibrary1.moduleA 
mycompany.mylibrary1.moduleB.moduleD 
mycompany.mylibrary2.moduleC 

o es mejor ir simplemente por:

mylibrary1.moduleA 
mylibrary1.moduleB.moduleD 
mylibrary2.moduleC 

veo que la mayoría de las veces se utiliza el segundo método, pero yo estaba buscando una confirmación (o no) que es el camino a seguir.

No he podido encontrar nada al respecto en PEP 008, al lado:

las convenciones de denominación de la biblioteca de Python son un poco de un desastre, así que nunca conseguiré este completamente consistente [...]

y entonces tenemos sólo los módulos y las indicaciones de denominación de la clase, así como el hecho de que las importaciones en relación se desaniman.

El hecho de que las importaciones absolutas son la manera de tomar la decisión de cómo organizar sus bibliotecas es realmente importante (y no estoy aquí para discutir si evitar las importaciones relativas es bueno o malo).

Me gusta el enfoque de Java que namespaces todas sus bibliotecas, pero tengo la impresión de que no es pitónico ... ¿cuál es el camino sugerido a seguir?

PS. Si bien en general las "mejores prácticas" las preguntas se consideran como subjetivas en SO, en Python la existencia del PEP las hace en mi opinión muy objetivas. Aunque la respuesta podría ser ... no hay una mejor práctica para organizar sus bibliotecas ...

+1

¿Alguna vez ha pensado que personas ajenas a la empresa utilicen las bibliotecas? Si lo hace, es más simple hacer que 'mylibrary1'. Si son solo para uso interno,' mycompany.mylibary1' significa que no puede tener más problemas con 'mylibrary1' de otra persona. –

Respuesta

5

Existe un problema cognitivo con las importaciones y los nombres de python. Como hay tantos tipos diferentes de objetos de primer orden (primitivas, módulos, clases, funciones, clases que pretenden ser módulos, módulos que pretenden ser objetos, etc.) las personas tienden a usar notación de puntos para indicar que una entidad tiene " llegó "de una fuente externa. Por lo tanto

import foo.bar 
e = foo.bar.make_entity() 

se siente al ser más claro que

from foo.bar import make_entity 
e = make_entity() 

Sin embargo, esto significa que usted tendrá con frecuencia tienen que escribir la ruta completa de todo lo que necesita para acceder. "com.example.some.lib.module.frobnicate() se cansa rápidamente. Por lo tanto, una biblioteca cortés proporciona un nombre razonablemente corto para su acceso.

+0

gracias @Bittrance. Esto no es exactamente una mejor práctica oficial, pero una buena razón para mantener todo el espacio de nombres lo más corto posible. – Stefano

+0

Tiene toda la razón. Debería haber sido más claro en que estoy describiendo lo que he observado, en lugar de tratar de ser normativo. – Bittrance

Cuestiones relacionadas