2016-04-11 9 views
0

Wenn i Module zu importieren, das verschachtelte Szenario funktioniert gut. Aber wenn ich versuche, Pakete zu importieren, habe ich ein inkonsistentes Ergebnis. Hier ist der sehr einfache Fall:Python: importierte Pakete mit ‚verschachtelt‘ Module

Inhalt meiner aktuellen Ordner:

mypackages <directory> 
    __init__.py 
    one.py 
    two.py 
    three.py 

dies ist das Skript:

__init__.py : 
import one 

one.py : 
import two 

two.py : 
import three 

Ich erwarte, dass ich in der Lage sein sollte, den Zugriff auf zwei und drei auf diese Weise:

import mypackages 
mypackages.one.two 
mypackages.one.two.three 

oder der logische Pegel in anderen Worten shoul so aussehen:

one 
    two 
    three 

Aber wenn ich mypackages Import zu tun, ich habe alle auf dem gleichen Niveau ausgesetzt Module:

>>> import mypackages 
>>> print dir(mypackages) 
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 
'__path__', 'one', 'three', 'two'] 

Es sollte zeige nur one Modul, richtig? Ich bin verwirrt, warum es zeigt alle one , two und three was bedeutet, sie auf dem gleichen Niveau sind (i mypackages.two und mypackages.three direkt verwenden können).

Hat jemand eine explaination?

Antwort

0

sollten Sie this lesen.

Durch die Dateien auf der gleichen Ebene setzen, legen Sie sie das gleiche Paket-Ebene ist. In Ihrem Fall müssen Sie diese Architektur erhalten:

mypackage 
├── __init__.py 
├── one.py # contains "import two" 
└── two 
    ├── __init__.py 
    ├── three 
    │   ├── __init__.py 
    │   └── three.py 
    └── two.py # contains "import three" 

Und dann das Paket mit zugreifen:

import mypackage.one 
import mypackage.one.two 
import mypackage.one.two.three 
Verwandte Themen