2013-01-10 13 views
9

Mam następującą strukturę katalogumoduł python import z pakietu nadrzędnego

foo/ 
    __init__.py 
    settings.py 
    bar/ 
     __init__.py 
     myfile.py 

W myfile.py mam: Ustawienia importu

pojawia się następujący błąd: ImportError: No module named settings, dlaczego? W jaki sposób można efektywniej zaimportować plik z myfile.py

Odpowiedz

17

settings Od http://docs.python.org/2/tutorial/modules.html#intra-package-references:

from .. import settings 

Nadzieja pomaga

+1

Próbowałem to, ale mam ValueError: Próba względny zakaz importu w pakiet – danielrvt

+10

@danielrvt: Czy używasz 'myfile.py' jako skrypt? Skrypty w pakietach nie są tak naprawdę obsługiwane w Pythonie (mimo że często jest to wymagane). Utwórz skrypt pomocniczy na najwyższym poziomie, który importuje plik 'foo.bar.myfile', a wszystko będzie gotowe. – Blckknght

+0

@Blckknght +1! –

2

Oto kolejny sposób, który wydaje się bardziej jasne:

W foo.__init__.py:

__all__ = ['settings', ..(all other modules at 'foo' level you want to show)...] 

W myfile.py:

# instead of "from .. import..." 
    from foo import settings 
    print settings.theThing