Google App Engine + Django,项目中有多个应用程序 = ImportError
Posted
技术标签:
【中文标题】Google App Engine + Django,项目中有多个应用程序 = ImportError【英文标题】:Google App Engine + Django with multiple apps within project = ImportError 【发布时间】:2013-12-25 18:11:33 【问题描述】:我正在尝试让“Hello World”Django 1.5 应用程序与 Google App Engine 一起使用。如果我的目录结构是这样的,那么一切都完美:
.
| ____myproj
| |______init__.py
| |____app.yaml
| |____settings.py
| |____urls.py
| |____views.py
| |____wsgi.py
|____manage.py
但是,一旦我向项目中添加了一个新的“应用程序”(使用 manage.py startapp app1
),我就会开始收到 ImportErrors。
这是我想要的理想结构:
.
|____app1
| |______init__.py
| |____admin.py
| |____models.py
| |____tests.py
| |____views.py
|____myproj
| |______init__.py
| |____app.yaml
| |____settings.py
| |____urls.py
| |____views.py
| |____wsgi.py
|____manage.py
要启用“app1”,我将 settings.py 中的 INSTALLED_APPS 修改为:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app1',
)
请注意,我将“app1”添加到 INSTALLED_APPS。一旦我这样做,GAE 就开始抱怨: ImportError: 没有名为 app1 的模块。
我做错了什么?如果我尝试使用纯 Django(而不是 AppEngine)运行应用程序,一切都很好。但是如果我尝试使用 AppEngine 运行它,它不喜欢我添加到我的 INSTALLED_APPS 中的“app1”。从 INSTALLED_APPS 中删除该行会使所有内容再次运行,并且在 AppEngine 中没有错误!
注意:我的 PYTHONPATH 有“/Users/mel/Sites/myproj/myproj”,后跟所有标准的谷歌应用引擎路径。
【问题讨论】:
【参考方案1】:自己解决了!结果证明这是我的配置错误。当您有一个包含 多个 应用程序的 Django 项目时,app.yaml 文件需要位于项目目录“外部”。换句话说,app.yaml 文件需要放在manage.py
旁边,而不是settings.py
旁边。这样,您项目中的所有应用程序都将自动包含在 PYTHONPATH 中。
注意:您可能还需要在 app.yaml 中添加以下 2 行:
env_variables:
DJANGO_SETTINGS_MODULE: 'myproj.settings'
【讨论】:
【参考方案2】:这通常不是 django 项目的组织方式。
现在,您的应用位于项目中。相反,他们应该并肩生活。
假设您的项目名为 proj
并且您的应用程序名为 app
,那么您的目录层应该是这样的:
.
├── manage.py
├── app
│ ├── __init__.py
│ ├── admin.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── proj
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
【讨论】:
这正是我的目录的组织方式。我认为您误解了我的问题的结构。 @melsam 我不这么认为。您的应用程序文件夹不在您的manage.py
文件旁边,而是在您的 settings.py
文件旁边。如果这不正确,您应该修复问题中的缩进(或使用tree
生成布局,以便更清晰)。
@melsa 更清楚一点:app1
应该在myproject
的下一个,而不是在它之下。
我已经使用 tree 命令更新了问题中的项目结构。问题仍然悬而未决...为什么 Google App Engine 在 INSTALLED_APPS 中抱怨“app1”?
@melsam 你能试试得到你的PYTHONPATH
(sys.path
)吗?以上是关于Google App Engine + Django,项目中有多个应用程序 = ImportError的主要内容,如果未能解决你的问题,请参考以下文章
Google Cloud 中的 Google Compute Engine、App Engine 和 Container Engine 有啥区别?
连接 Google App Engine 和 Google Compute Engine
Google App Engine Flexible 和 Google Container Engine 之间的区别?
如何在 Google Cloud App Engine 上使用 PubSub 创建订阅者,该订阅者通过 Publisher 从 Google Cloud App Engine Flex 收听消息?