Module von Pfaden in Python
Habe ich einen Ordner erstellt mit allen meinen Modulen für meine GAE-Anwendung und mit externen Bibliotheken wie z.B. Jinja2, um alles sortiert an einem Ort. Ich habe die Ordner-Struktur wie diese:
lib\
\utils\
\__init__.py
\firepython
\jinja2
\jsonpickle
__init__.py
sessions.py
Wenn ich versuche zu laden Jinja aus utils__init__.py ich bekomme Fehler ImportError: No module named jinja2.environment
. Wenn ich mir anschaue, Jinja2 imports-Anweisungen, sehe ich, dass Sie Aussehen wie from jinja2.loaders
. Ich versuche, Sie zu ändern, so zu sein wie from lib.jinja2.loaders
aber einige andere Fehler erscheinen dann über Importe. Mehr, als dass ich nicht denke, es ist eine gute übung, ändern Sie diese Importe in externen Bibliotheken Quelle, wenn es ist eine bequeme und richtige Weg, um import-Module richtig. Ich habe auch Hinzugefügt einige Pfade zu PYTHONPATH
aber löst es nicht alle Probleme. Wie kann ich richtig importieren ein externes package, das in einem anderen Ordner, kann mit einer tiefen Struktur?
- haben Sie versucht, die
sys.path.append(path_to_jinja2)
vor dem Import das Modul und es hat auch nicht geholfen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Tat sollten Sie nicht ändern müssen Importe in externen Bibliotheken, die - obwohl abhängig von Ihrer Umgebung, Sie vielleicht sogar zu haben.
PYTHONPATH
Ändern Ihre PYTHONPATH sollte ausreichen; PYTHONPATH enthalten sollte ein 'lib' Weg, der ist entweder absolut oder relativ zu Ihnen nach Hause, zB.
Dann könnte man einfach das tun,
sys.Pfad.append
Einen anderen Weg zu gehen, ohne PYTHONPATH ist die Verwendung
sys.path.append()
und fügen Sie Ihre Wege von Ihrer python-code. Ich eigentlich bevorzugen, da es auch eine pro-Anwendung Pfade.verwenden virtualenv
Details wäre ein bisschen lang, um Sie hier stellen, aber bitte befolgen Sie die offizielle doc
Diese Optionen gilt für Allgemeine python-Entwicklung eher als GAE Besonderheiten; wenn es nicht tut, auf Ihrem Entwicklungsrechner funktionieren, sollten Sie nach mehr details (genaue Importe, absolute Pfade, die pythonpath...).
Einer ordnungsgemäßen Projekt-Struktur und die Verwendung von appcfg.py sollte Training Abhängigkeiten beim hochladen an google: bitte werfen Sie einen Blick auf dieses gute Antwort: Wie kann ich verwalten, Drittanbieter-Python-Bibliotheken, die mit Google App Engine? (virtualenv? pip?) und Folgen diesen Leitlinien.
Einen schönen Weg zu gehen, mit GAE ist durch yaml Anwendung der Richtlinien. Bitte werfen Sie einen Blick auf den doc gehört: http://code.google.com/appengine/docs/python/config/appconfig.html#Includes
denken Sie Auch daran, dass GAE offiziell unterstützt python 2.5 und 2.7 Unterstützung ist experimentellPython 2.7 ist nun offiziell unterstützt
Richtig ein Modul importieren, müssen Sie sicherstellen, dass python weiß, wo es zu finden ist.
Zu tun, so dass für jede externe Bibliothek anfügen, es ist das übergeordnete Verzeichnis für den sys.Pfad (in der Laufzeit), oder setup PYTHONPATH-Umgebung (vor der Ausführung).
Beispiel:
Sehen http://docs.python.org/tutorial/modules.html#the-module-search-path . um zu verstehen, was python macht, wenn Sie anrufen, importieren.