2011-10-30 5 views
11

Tengo una aplicación Python como estoImportar una clase a partir de una carpeta a otro nivel

/ 
/crawl.py 
/crawl/__init__.py 
/crawl/john.py 
/tests/test_john.py 

Lo que estoy tratando de hacer, se ejecuta la prueba de la unidad test_john.py que debe utilizar john.py pero es en otra carpeta.

En mi tests/test_john.py me sale esto cuando lo ejecuto

Traceback (most recent call last): 
    File "test_john.py", line 2, in <module> 
    from john import John 
ImportError: No module named john 

Entonces, ¿cómo puedo importar una clase, desde la carpeta de rastreo ....

+0

puede intentar 'desde crawl.john import John' o intentar' desde ..crawl.john import John' (consulte http://stackoverflow.com/questions/1054271/how-to-import-a-python- class-that-is-in-a-directory-above) –

Respuesta

11

Si su carpeta raíz está en su PYTHONPATH y que lo convierten en un paquete de importables como sigue:

/__init__.py 
/crawl.py 
/crawl/__init__.py 
/crawl/john.py 
/tests/__init__.py 
/tests/test_john.py 

que puede hacer:

from crawl.john import John 

o

from ..crawl.john import John 
+0

Parece que la carpeta raíz no está en mi ruta de Python. Pensé que podría agregar el CWD a la ruta de acceso de pitón pero no lo hace. ¿La mejor manera de hacerlo? – Wizzard

+0

que depende de su configuración. En Windows, para mis paquetes y bibliotecas simplemente agrego un archivo site.pth en site-packages con el nombre de la (s) carpeta (s). – joaquin

2

Si su sistema operativo es compatible con ella, poner un enlace simbólico a ../crawl en el directorio test y luego utilice from crawl.john import John.

Cuestiones relacionadas