【问题标题】:Google App Engine + Django with multiple apps within project = ImportErrorGoogle App Engine + Django,项目中有多个应用程序 = 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”,后跟所有标准的谷歌应用引擎路径。

【问题讨论】:

    标签: python django google-app-engine


    【解决方案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)吗?
      猜你喜欢
      • 2014-01-13
      • 1970-01-01
      • 2014-12-25
      • 2014-06-01
      • 2010-11-10
      • 2013-12-20
      • 2013-11-30
      • 1970-01-01
      • 2015-04-15
      相关资源
      最近更新 更多