[Python-de] problem beim importieren

Mike Mueller pyp at gmx.net
Don Feb 23 19:52:36 CET 2006


> >
> >>.
> >>`-- src
> >>    |-- main.py
> >>    |-- p1
> >>    |   |-- __init__.py
> >>    |   `-- foo.py
> >>    |-- p2
> >>    |   |-- __init__.py
> >>    |   `-- main.py
> >>    `-- unittest
> >>        `-- footest.py
> >>

Ich sehe hier zwei packages, p1 und p2, die 
zufällig in einen Pfad liegen, wo auch noch zufällig main.py liegt.

Anders dagegen bei dem Beispiel aus der Doku.


>Sound/                          Top-level package
>       __init__.py               Initialize the sound package
>       Formats/                  Subpackage for file format conversions
>               __init__.py
>               wavread.py
>               wavwrite.py
>               aiffread.py
>               aiffwrite.py
>               auread.py
>               auwrite.py
>               ...
>       Effects/                  Subpackage for sound effects
>               __init__.py
>               echo.py
>               surround.py
>               reverse.py
>               ...
>       Filters/                  Subpackage for filters
>               __init__.py
>               equalizer.py
>               vocoder.py
>               karaoke.py
>               ...

Ich sehe hier EIN package Sound mit subpackges Formats, Effects und Filters.
So sollte z.B.

import Sound.Filters.equalizer as equi

funktionieren.

Um dein Beispiel nun genauso funktionieren zu 
lassen, müsste meiner Meinung nach noch eine 
__init__.py in src hinzukommen, damit src zum 
package mit den subpackages p1 und p1 wird.

>Ich habe schon relativ viel rumprobiert, z.B. eine __init__.py in src
>anzulegen und dann versucht mit import src.p1.foo, bzw. from src.p1
>import foo ...

War schon richtig. Ich glaube src muss aber 
trotzdem im PYTHONPATH liegen um dann

import src.p1.foo as foo

schreiben zu können.


*******
WICHTIG
*******

Aus dem *übergeordneten* Verzeichnis von src 
sollte es dann aber *ohne* PYTHONPATH 
funktionieren. Python sucht dann im aktuellen 
Pfad und findet das package src und kann mit voll 
qualifiziertem Import darauf zugreifen.

Hier liegt meiner Meinung nach das Problem:

>Wenn ich nun in src python p2/main.py ausführe bekomme ich:

cd ..
python src/p2/main.py

sollte hier eigentlich Abhilfe schaffen 
(vorausgesetzt eine __init__.py liegt in src).

Klappt's?

Mike