2011-01-27 20 views
9

Tengo varios módulos de python en un directorio.¿Cómo importo un módulo cuyo nombre entra en conflicto con un módulo de mi paquete?

En el mismo directorio, tengo un paquete tests.

Me gustaría nombrar los módulos en tests de la misma manera que los módulos que contienen pruebas, aunque por supuesto no es crítico.

Entonces, en tests.foo escribo ingenuamente import foo. Esto no funciona tan bien: importa tests.foo, no el nivel superior foo.

¿Puedo hacer lo que quiero, o simplemente tengo que llamar al módulo de prueba test_foo?

Lo siento si esto es obvio o un engaño, mi búsqueda-fu ha fallado.

Respuesta

7

test_foo.py parece una solución apropiada en este caso.

Si no cambia el nombre de los módulos de prueba a continuación, hacer que el directorio tests en el paquete de Python (añadir tests/__init__.py archivo) y utiliza absolute imports:

from __future__ import absolute_import 
import foo     # import global foo.py, the first foo.py in sys.path 
import tests.foo as test_foo # import tests/foo.py 
3

Usar la ruta del paquete completo de la siguiente manera:

--Package 
    |-- __init__.py 
    |-- foo.py 
    | 
    |-- tests 
    | | -- __init__.py 
     | -- foo.py 

en tests/foo.py hago

from Package import foo 

y creo que esta parte de la documentación que puede interesar: http://docs.python.org/whatsnew/2.5.html#pep-328-absolute-and-relative-imports

+0

Gracias, pero "ValueError: Intento de importación relativa allá paquete de nivel superior". Esto es Python 2.6, si hace alguna diferencia. Probablemente tengas razón de que debería haber puesto todo en un paquete de alto nivel en primer lugar. No estoy seguro de si ese cambio ahora sería indoloro. –

+0

@Steve Jessop: lo siento quise decir usar la ruta completa del paquete para importar el módulo 'foo', lo edito espero que ahora esté claro – mouad

Cuestiones relacionadas