在谷歌应用程序引擎上,为什么我的“导入”语句在Live上失败,但在Dev(localmachine)上工作?

时间:2009-12-16 14:11:39

标签: python django google-app-engine

我有一个在谷歌应用引擎上运行的python / django应用程序。

我的views.py文件有一些导入......

from commands.userCommands import RegisterUserCommand
from commands.accountCommands import CreateNewAccountCommand, RenameAccountCommand

这些导入在我的开发环境(本地计算机)上运行良好。但是当我上传到谷歌应用引擎时,views.py失败并显示“无法导入视图。错误是:没有名为userCommands的模块”错误。

知道为什么我无法导入 commands.userCommands 模块吗?

我的文件结构如下......

- app.yaml
- urls.py
- views.py
- etc...
- commands/__init__.py
- commands/userCommands.py

注意:我确实尝试将我的应用程序名称附加到模块名称/路径。没有运气。

注意:我确实使用--noisy参数进行了更新,它似乎确实成功上传了我的命令文件夹。

2 个答案:

答案 0 :(得分:5)

你可能会遇到与Python自己的commands模块(它没有像你这样的子模块)的冲突 - 以隐藏标准库中的模块的方式命名自己的模块和包(就像以隐藏内置名称的方式命名变量一样,如listfile)总是一项危险的任务,即使它“应该”起作用总是存在混淆的可能性。

您是否可以尝试将commands软件包及其用途重命名为明确且无危险的内容,例如mycommands,并查看是否只会使问题消失?如果是这种情况,你可以在GAE的跟踪器上打开一张票(因为它会在GAE的运行时显示一个小但不可否认的错误)但同时你的问题也解决了! - )如果问题仍然存在,那么,至少我们已经消除了一个可能的原因,可以继续挖掘...

答案 1 :(得分:2)

需要__init__.py个文件才能使Python将目录视为包含包,因此您需要

commands/__init__.py

目录结构中的文件。请参阅http://docs.python.org/tutorial/modules.html