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 收听消息?

将 Meteor 部署到 Google App Engine 2017

Google BigQuery 的 Google App Engine 授权