【发布时间】:2016-07-24 14:48:58
【问题描述】:
我有一个 Python Google App Engine 项目,其结构如下:
app/
handlers/
register_user.py
models/
user.py
user.py 文件包含一个类 User(ndb.Model)。
我正在尝试从register_user.py 访问User 类以创建新用户并将其放入数据库中。通常,我会像这样导入它:
from ..models.user import User
但是这个错误是因为我试图从我的根包上方导入一些东西 - 所以我猜测模型是我的根包,我无法回到 app 包?
现在,我可以通过这样的导入来解决它:
import importlib
User = importlib.import_module('models.user').User
不过,我认为这有点混乱。那么导入我的 User 类的“正确”方式是什么?
编辑:完整的堆栈跟踪:
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
(这里的包名不同,我在上面简化了,让例子更通用)
【问题讨论】:
-
请发布您获得的回溯的全文。
-
我不确定我是否理解,但如果
from models.user import User -
@joelgoldstick 成功了!
标签: python google-app-engine python-import google-app-engine-python