Python 谷歌应用程序引擎&x2B;在project=ImportError中具有多个应用程序的Django
我正在尝试让“Hello World”Django 1.5应用程序与Google应用程序引擎一起工作。如果我的目录结构是这样的,那么一切都能完美地工作:Python 谷歌应用程序引擎&x2B;在project=ImportError中具有多个应用程序的Django,python,django,google-app-engine,Python,Django,Google App Engine,我正在尝试让“Hello World”Django 1.5应用程序与Google应用程序引擎一起工作。如果我的目录结构是这样的,那么一切都能完美地工作: . | ____myproj | |______init__.py | |____app.yaml | |____settings.py | |____urls.py | |____views.py | |____wsgi.py |____manage.py 但是,只要我向项目中添加一个新的“应用程序”(使用manage.py startap
.
| ____myproj
| |______init__.py
| |____app.yaml
| |____settings.py
| |____urls.py
| |____views.py
| |____wsgi.py
|____manage.py
但是,只要我向项目中添加一个新的“应用程序”(使用manage.py startapp app1
),我就开始收到导入程序
这是我想要的理想结构:
.
|____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”,我将my settings.py中已安装的_应用修改为:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app1',
)
请注意,我在已安装的应用程序中添加了“app1”。我一这么做,GAE就开始抱怨:
导入错误:没有名为app1的模块
我做错了什么?如果我尝试用纯Django(而不是AppEngine)运行应用程序,一切都很好。但如果我尝试用AppEngine运行它,它就不喜欢我添加到已安装应用程序中的“app1”。从已安装的应用程序中删除该行将使所有内容重新运行,AppEngine中不会出现错误
注意:my PYTHONPATH有“/Users/mel/Sites/myproj/myproj”,后面是所有标准的google应用程序引擎路径。这不是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
我自己解决了!这原来是我的配置错误。如果Django项目包含多个应用程序,则app.yaml文件需要位于项目目录的“外部”。换句话说,app.yaml文件需要放在
manage.py
旁边,而不是settings.py
旁边。这样,项目中的所有应用程序都将自动包含在PYTHONPATH中
注意:您可能还需要在app.yaml中添加以下两行:
env_variables:
DJANGO_SETTINGS_MODULE: 'myproj.settings'
这就是我的目录的组织方式。我想你误解了我问题的结构。@melsam我不这么认为。你的应用程序文件夹不是位于你的
manage.py
文件旁边,而是位于你的settings.py
文件旁边。如果这不正确,您应该修复问题中的缩进(或使用tree
生成布局,使其更清晰)。@melsa更清晰:app1
应该位于myproject
旁边,而不是下方。我已使用tree命令更新了问题中的项目结构。问题仍然悬而未决……为什么谷歌应用程序引擎抱怨安装的应用程序中的“app1”@melsam你能尝试获取你的PYTHONPATH
(sys.path
)吗?