2011-05-10 17 views
8

La pregunta
me gustaría saber si hay una convención estándar para la denominación de los directorios de Python que planean ser importado como un módulo. Es decir, el directorio contiene un espacio en blanco __init__.pyConvenciones de nombres típicos para Python directorios en Paquetes

Antecedentes
Hasta hace poco me he dado poca importancia y nombrado exclusivamente sobre la base de lo que tenía sentido a nivel de sistema de archivos. Lo que me metió en problemas es que lo que tenía sentido a nivel del sistema de archivos también tenía sentido para los módulos independientes de otros desarrolladores. Consideremos el siguiente directorio:

+ drivers 
    + prologix 
     - __init__.py 
     - driver_a.py 
     - driver_b.py 
    + visa 
     - __init__.py 
     - driver_a.py 
     - driver_b.py 
    __init__.py 
    ringout.py <-- simple file to ring-out the drivers 

Si bien esto funcionó bien cuando suena a cabo los conductores de la ProLogix, me encontré con un problema al intentar importar mis conductores de visado, así como el módulo 'visado' de pyVisa. Fue muy fácil diagnosticar el problema, pero la solución para cambiar el nombre de la carpeta del controlador de mi visa a 'visa_dir' hace que el código sea más difícil de leer (IMO).

import drivers.visa 

vs

import drivers.visa_dir 

¿Hay una mejor manera de manejar esto?

Respuesta

4

El espacio de nombres de cada módulo es único, por lo que incluso si tiene dos módulos llamados visa, siempre y cuando evite importarlos al mismo espacio de nombres con el mismo nombre, no tendrá ningún problema. Yo tiendo a preferir importaciones en términos absolutos:

import drivers.visa 
import pyVisa.visa 

O también se podría utilizar as:

from drivers import visa 
from pyVisa import visa as pyvisa 

... etc. Solo ten cuidado de cómo importas cosas. Preferiría (como usuario final) que estructure los módulos lógicamente dentro de su paquete y no se preocupe por pregruparlos para mí.

+2

Para agregar a esto, vea [esta publicación en el blog] (http://griddlenoise.blogspot.com/2006/10/namespace-packages-in-python.html) y [PEP 221] (http: // www .python.org/dev/peps/pep-0221 /). – voithos

+0

+1 para importaciones absolutas Realmente no pensé en eso. Esto mostrará algo de mi novedad en Python, pero ¿qué hay de los módulos integrados? ¿Hay alguna manera similar de importarlos de la misma manera? Tomemos las matemáticas como ejemplo (una de las más genéricas que podría pensar). –

+0

Claro que puedes usar los mismos trucos de importación en la biblioteca estándar. – zeekay

Cuestiones relacionadas