Ich habe eine Python Google App Engine-Projekt wie folgt strukturiert:Import über Module in Google App Engine
app/
handlers/
register_user.py
models/
user.py
Die user.py
-Datei enthält eine Klasse User(ndb.Model)
.
Ich versuche, die User
Klasse von register_user.py
zu erstellen und einen neuen Benutzer in der Datenbank zu erstellen. Normalerweise würde ich importieren Sie es wie folgt aus:
from ..models.user import User
Aber diese Fehler aus, weil ich versuche, etwas von oben mein Root-Paket zu importieren - so ich Modelle bin zu raten ist mein root-Paket, und ich kann nicht zurück zum app
Paket?
Gerade jetzt, ich bin in der Lage, um es zu arbeiten, indem sie wie folgt importieren:
import importlib
User = importlib.import_module('models.user').User
Ich denke, diese Art von unordentlich ist, though. Was ist der "richtige" Weg, meine Benutzerklasse zu importieren?
Edit: Der vollständige Stack-Trace:
Attempted relative import beyond toplevel package (/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py:1552)
Traceback (most recent call last):
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/base/data/home/apps/s~polly-chat/1.394430414829237783/main.py", line 48, in post
receive_message(messaging_event)
File "/base/data/home/apps/s~polly-chat/1.394430414829237783/messaging/handler.py", line 39, in receive_message
intent_picker.respond_to_postback(messaging_event)
File "/base/data/home/apps/s~polly-chat/1.394430414829237783/messaging/intent_picker.py", line 71, in respond_to_postback
intent = importlib.import_module('intents.register_user')
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/base/data/home/apps/s~polly-chat/1.394430414829237783/intents/register_user.py", line 1, in <module>
from ..models import messenger_user
ValueError: Attempted relative import beyond toplevel package
(Das Paket hier Namen sind anders, ich sie vereinfacht über das Beispiel allgemeinere zu machen)
Bitte posten Sie den ** Volltext ** der Traceback, die Sie erhalten. – MattDMo
Ich bin mir nicht sicher, ich verstehe, aber was passiert, wenn 'von models.user importieren Benutzer' –
@joelgoldstick, die den Trick gemacht! –