Import von einem Package zum anderen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Import von einem Package zum anderen

Beitragvon burli » Sonntag 29. März 2009, 11:43

Hi, ich steh gerade wie der Ochs vor'm Berg und komm nicht weiter. Die Frage ist sicher auch schon ein dutzend mal gestellt und beantwortet worden, aber der Berg ist im Weg.

Simple Verzeichnisstruktur

Code: Alles auswählen

|-->Package1
|   |-->__init__.py
|   |-->modul1.py
|
|-->Package2
|   |-->__init__.py
|   |-->modul2.py
|
|-->main.py


In Package1.modul1 möchte ich jetzt modul2 aus Package2 importieren. Aber wie gesagt, ich habe gerade einen völligen Blackout
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Beitragvon Dauerbaustelle » Sonntag 29. März 2009, 12:11

Das geht erstmal garnicht, du musst das Package-Wurzelverzeichnis (also da wo Package1 und Package2 drin sind) zum `sys.path` hinzufügen. Oder dir PEP328 angucken.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Beitragvon burli » Sonntag 29. März 2009, 12:22

Ok, danke. Jetzt wo du's sagst...

Ich habe inzwischen das zweite Package in das erste geschoben was in dem Fall auch eigentlich logisch war. Aber wie gesagt... der Berg :?
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Sonntag 29. März 2009, 19:11

Ich füge zu einer Art Rootpackage immer die Zeile

Code: Alles auswählen

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)))
(__path__ statt __file__ müsste aber auch gehen)

hinzu. Dann kannst du in jedem Subpackage mittels

Code: Alles auswählen

from rootpackage.anotherpackage import modul


die einzelne Module importieren. Du solltest aber überlegen, ob du durch die __init__.py des Packages sowas nicht noch sinnvoll abstrahieren kannst, sofern das Package nicht einfach als Gruppierung zur Ordnung dient.

Wer ist online?

Mitglieder in diesem Forum: DB7WN, pixewakb