2014-07-08 22 views
8

Come organizzo le mie importazioni python in modo che possa avere una directory come questa.Python che importa un modulo da una directory parallela

project 
|  \ 
|  __init__.py 
|  
src 
| \ 
| __init__.py 
| classes.py 
| 
test 
    \ 
    __init__.py 
    tests.py 

E poi dentro /project/test/tests.py essere in grado di importare classes.py

Ho codice simile a questo nel tests.py

from .. src.classes import(
    scheduler 
    db 
) 

e AM ottenere errori di

SystemError: Parent module '' not loaded, cannot perform relative import 

Qualcuno sa cosa fare?

risposta

12

Python aggiunge la cartella contenente lo script che si avvia alla PYTHONPATH, quindi se si esegue

python test/tests.py 

solo la cartella test viene aggiunta al percorso (non il dir di base che si sta eseguendo il comando in).

Invece eseguire i test in questo modo:

python -m test.tests 

Questo aggiungerà il dir di base al percorso pitone, e quindi le classi saranno accessibili tramite un'importazione non parente:

from src.classes import etc 

Se vuoi davvero usare lo stile di importazione relativo, quindi le tue 3 dir devono essere aggiunte alla directory di un pacchetto

package 
* __init__.py 
* project 
* src 
* test 

E lo si esegue da sopra il dir pacchetto con

python -m package.test.tests 

Consulta anche:

+0

Grazie. Questo ha funzionato. – Zack

+0

Se ottieni "Nessun modulo chiamato test.tests", assicurati di avere un '__init __. Py' nella tua directory' test/'. –