2013-07-18 11 views
5

Hierarchia:Python: Importuj plik w katalogu dziadka

scripts/ 
    web/ 
     script1.py 
    tests/ 
     script2.py 
common/ 
    utils.py 

Jak importować utils w script1 i script2 i nadal być w stanie uruchomić te skrypty osobno (tj python script1.py). Gdzie mogę umieścić pliki __init__.py i czy jest to właściwy sposób, aby o tym porozmawiać? Dziękuję Ci!

Odpowiedz

6
package/ 
    __init__.py 
    scripts/ 
     web/ 
      __init__.py 
      script1.py 
     tests/ 
      __init__.py 
      script2.py 
    common/ 
     __init__.py 
     utils.py 

Dodałem paczkę pustych plików __init__.py do paczki. Teraz masz 2 opcje, można podać bezwzględną importu:

from package.common import utils 

lub równoważnie:

import package.common.utils as utils 

Minusem jest to, że package musi być jakoś na PYTHONPATH. Inną opcją jest użycie relative imports:

from ....common import utils 

bym ogólnie zniechęcać to podejście ... To po prostu staje się zbyt trudno powiedzieć, gdzie rzeczy pochodzą (jest to, że okresy 4 lub 6?).

+0

Kiedy próbuję uruchomić skrypt1.py przy użyciu względnego importu, pojawia się błąd: 'Błąd wartości: Próba relatywnego importu w pakiecie innym niż jeden' ​​ –

+0

To dlatego, że po uruchomieniu go jako autonomicznego programu, python nie wiem, że jest w pakiecie (nie dotarł tam, podążając śladami plików '__init __. py'). To kolejny powód, dla którego wolę bardziej wyraźną wersję. – mgilson

+0

Hmmm więc po prostu próbowałem używać bezwzględnego importu, a teraz nie można go znaleźć. Co mam zrobić z 'PYTHONPATH'? Dzięki! –