2009-07-07 5 views
3

importieren Ich habe gdata Bibliothek auf meinem ArchLinux installieren, und eine einfache Anwendung, die Atom-Bibliothek am Anfang importiert, wenn ich GAPP Motor laufen und dass die Web-App zuzugreifen,App Engine-Server kann nicht Atom Modul

$ python2. 5 ./dev_appserver.py ~/myapp

Es löst Ausnahme 'Kein Modul namens Atom'. Aber wenn ich 'Import-Atom' im Python 2.5-Modus aktiviere, funktioniert es gut. Wie kann ich ein Atom-Modul in meine GAppEngine-Anwendungen importieren?

Antwort

11

Fügen Sie atom.py demselben Verzeichnis hinzu, in dem Sie GAE Python-Quellen gespeichert haben, und stellen Sie sicher, dass es beim Hochladen Ihrer App auf den Server hochgeladen wird. (Der Upload erfolgt, wenn Sie appcfg.py update myapp/ tun, es sei denn, Sie tun alles, um es zu stoppen; verwenden Sie das Flag --verbose auf dem Befehl, um genau zu sehen, was hochgeladen oder aktualisiert wird).

(Oder, wenn es eine große Datei ist, machen Sie eine ZIP-Datei damit und in Ihrem Handler fügen Sie diese Zip-Datei an sys.path an; siehe zum Beispiel zipimport).

Dies setzt voraus, dass Sie eine einzelne Datei atom.py haben, die Sie importieren; Wenn diese Datei wiederum andere importiert, müssen Sie diese auch auf ähnliche Weise verfügbar machen usw. (siehe modulefinder in Pythons Standardbibliothek für die Suche nach allen benötigten Modulen).

Wenn atom ist kein Modul, sondern ein Paket, dann erhalten Sie auf import die __init__.py Datei in dem Verzeichnis, das das Paket ist; Daher gilt derselbe Hinweis (und zipimport wird viel attraktiver, da Sie jede Verzeichnisstruktur einfach mit einem Befehl zip -r von der Linux-Befehlszeile aus verpacken können).

Wenn an irgendeinem Punkt (wie modulefinder wird Ihnen helfen, entdecken) eine Abhängigkeit auf einer C-codierte Erweiterung Dritte (a .so oder .pyd-Datei, die Python verwenden können, ist aber nicht in reinen Python geschrieben), die nicht in ist die kurze Liste mit GAE geliefert (siehe here), dann ist dieser Python-Code nicht auf GAE, wie GAE nur Pure-Python unterstützt. Wenn dies der Fall ist, müssen Sie nach Alternativen suchen, die sind unterstützt auf GAE, d. H. Pure-Python Möglichkeiten, die gleiche Funktionalität zu erhalten, die Sie benötigen.

+1

Dies wirft ein interessantes Dilemma auf. Ich bin mir sicher, dass diese Antwort korrekt ist, genauso wie ich es wäre, wenn ich dasselbe auf der Google-Website lesen würde. Wenn ich Letzteres getan hätte und jemand mit einer Umschreibung der "offiziellen" Antwort geantwortet hätte, hätte ich ihn aufgezogen. Aber es scheint ein bisschen merkwürdig zu sein, basierend auf "Ich vertraue darauf, dass Herr Martelli weiß, wovon er spricht". +1 sowieso, um den Ball ins Rollen zu bringen ;-) –

+0

"Die offizielle Antwort" ist nicht an einem Ort (zipimport ist an zwei Stellen dokumentiert, auf die ich hinweise, Bibliotheken von Drittanbietern in einem, Modulfinder nicht in GAE-Dokumenten, sondern in Python docs [und wieder gebe ich eine URL an, appcfg.py in einer anderen, ...), was ich mache, ist die Synthese aller benötigten Informationen an einem Ort, von ansonsten fragmentierten Orten, was nützlicher scheint als nur "a Paraphrase";-). Wie auch immer, alle diese Informationen sind einfach zu experimentieren und zu verifizieren! -) Aber danke für das Vertrauen trotzdem ;-). –

+0

Entschuldigung, ja, ich wollte nicht andeuten, dass es eine einzige "offizielle" Antwort gibt, die besser wäre als diese. Nur dass wir uns einigermaßen sicher sein können, dass, wenn es einen gibt, das ungefähr das ist, was es sagen würde. Also war ich ein wenig überrascht, dass die Antwort 20 Minuten ohne eine Verbesserung ging ;-) –