3 Stimmen

Google App Engine - Importieren meiner eigenen Quellmodule (mehrere Dateien)

Ich schreibe gerade eine GAE-Anwendung und habe einige Schwierigkeiten mit dem folgenden Problem.

Ich habe mehrere Python-Dateien erstellt (z. B. a.py und b.py), die beide im selben Ordner gespeichert sind. Ich bin in der Lage, Code in a.py oder b.py aufzurufen, indem ich ihnen URLs zuordne (mit app.yaml). Was ich nicht herausgefunden habe, wie zu tun ist, importieren den Code von einem in einem anderen.

Kann mir jemand bei der Syntax und/oder der Konfiguration helfen, die hier erforderlich ist? Ich habe zum Beispiel den Eindruck, dass ich den Code von b.py in die Datei a.py einbinden kann, indem ich die folgende Anweisung in a.py ausführe

import b

Ich habe mit diesem Ansatz keinen Erfolg. Insbesondere erhalte ich diesen Fehler:

ImportError: No module named b

Irgendwelche Vorschläge?

Danke,

Matt

8voto

airportyh Punkte 20678

Haben Sie versucht, so zu importieren, als ob Sie auf der obersten Ebene beginnen würden? Zum Beispiel

import modules.b

2voto

Evan Fosmark Punkte 93825

Wenn die Dateien a.py und b.py nicht gefunden werden, müssen Sie die entsprechenden Pfade in sys.path .

import sys
sys.path.append(r"/parent/of/module/b")

1voto

Nick Johnson Punkte 99799

Beachten Sie, dass das übliche Muster bei GAE nicht darin besteht, jede einzelne URL unabhängig in app.yaml zuzuordnen, sondern vielmehr darin, ein einziges "Handler"-Skript zu haben, dem alle (oder alle außer statischen und speziellen) URLs zugeordnet sind, und dieses Skript sowohl a als auch b importieren und die von ihnen definierten Handler verwenden zu lassen.

0 Stimmen

Ist dieses Muster eine bewährte Praxis? Es scheint so, als würde jede Anfrage die gleiche Menge an Ressourcen beanspruchen.

0 Stimmen

Ja, das ist eine bewährte Praxis: Alle Module in Ihrer Anwendung werden in eine einzige Python-Umgebung geladen, die für jede Anfrage wiederverwendet wird, so dass die Daten zwischen den Anfragen im Speicher bleiben. Der einzige zusätzliche Overhead ist das Laden aller Module bei der ersten Anfrage.

1voto

Pixelgrey Punkte 55

Wie @toby sagte, muss es so importiert werden, als ob es aus dem obersten Verzeichnis importiert würde, und eine Datei namens init .py muss in dem Ordner abgelegt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X