Hallo zusammen,
seit einiger Zeit programmiere ich begeistert in Python und habe mir eine Menge bereits Klassen erstellt.
Diese liegen in meinem Projekt in Eclipse unter /src/lib.
Da sich später verschiedene Programme diese Klassen teilen müssen, erstelle ich für jedes Programm einen eigenen Ordner. Meine Verzeichnisstruktur ist also derzeit folgende:
./lib/__init__.py
./lib/class1.py
./project1/code.py
In meinem Programm code.py will ich jetzt die class1.py importieren, das klappt auch wenn ich aus Eclipse raus starte mit "from lib import class1", aber von Kommandozeile kennt er das dann nicht mehr.
Ich habe nachgelesen und gefunden, dass man auch relative Imports machen kann, aber das funktioniert nicht so recht:
in code.py:
from ..lib import class1
und es folgt dieser Fehler:
ValueError: Attempted relative import in non-package
Es kommt noch in keiner der Dateien __main__ vor (dann soll dieser Fehler wohl auftreten).
Wie könnte ich meine class1 denn sonst noch reinholen?
Danke für Tipps,
Grüße,
moadin
Relativer Import - Wie?
Setze die Umgebungsvariable PYTHON_PATH, so dass sie lib/ enthält. Dann kannst Du mit
die gewünschte Datei importieren.
Code: Alles auswählen
import lib.class1
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Die heißt `PYTHONPATH` (also `%PYTHONPATH%` und `$PYTHONPATH`).lutz.horn hat geschrieben:Setze die Umgebungsvariable PYTHON_PATH, so dass sie lib/ enthält.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hallo Leute,
danke für die Antworten.
Den Python-Path muss ich ja dann schon vor Programmaufruf setzen oder kann ich das auch relativ im Skript machen?
Das Projekt läuft ja auf verschiedenen Rechnern in verschiedenen Verzeichnissen, da wäre der relative Import schon genial...
Gibt es da keine Möglichkeit?
Moadin
danke für die Antworten.
Den Python-Path muss ich ja dann schon vor Programmaufruf setzen oder kann ich das auch relativ im Skript machen?
Das Projekt läuft ja auf verschiedenen Rechnern in verschiedenen Verzeichnissen, da wäre der relative Import schon genial...
Gibt es da keine Möglichkeit?
Moadin
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nein, du kannst ihn auch innerhalb des Skriptes ändern. Er ist einfach nur eine Liste mit Ordnernamen in `sys.path`.moadin hat geschrieben:Den Python-Path muss ich ja dann schon vor Programmaufruf setzen oder kann ich das auch relativ im Skript machen?
Doch, seit PEP 328 schon. Aber ich habe sowas bis auf den What's New in Python 2.5-Artikel auch noch nie in Aktion gesehen.moadin hat geschrieben:Das Projekt läuft ja auf verschiedenen Rechnern in verschiedenen Verzeichnissen, da wäre der relative Import schon genial...
Gibt es da keine Möglichkeit?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Zu beachten beim relativen Import ist, dass er nur innerhalb von Packages funktioniert. Sprich, das Modul, das importiert, muss als Teil eines Packages geladen werden (darf also insbesondere nicht __main__ sein), und das importierte Modul muss Teil desselben Packages sein.
Beispiel: a/projekt/code.py kann a/lib/class1.py nur importieren, wenn es im Ordner "a" eine __init__.py gibt und code.py z.B. mit "import a.projekt.code" importiert wird.
Beispiel: a/projekt/code.py kann a/lib/class1.py nur importieren, wenn es im Ordner "a" eine __init__.py gibt und code.py z.B. mit "import a.projekt.code" importiert wird.