【发布时间】:2015-08-11 16:11:04
【问题描述】:
我在 Django 中有一个项目,我正在尝试将其移植到 Django-nonrel,以便可以将其上传到 Google 应用引擎。我通过http://djangoappengine.readthedocs.org/en/latest/installation.html 安装了 django-nonrel 和其他必需的库
即:django-nonrel djangoappengine django工具箱 django-自动加载 django-dbindexer
即下载他们的 zip 文件并将它们放在我的应用程序目录中。 所以,我的应用程序目录是: >
<app>/autoload
<app>/dbindexer
<app>/django
<app>/djangoappengine
<app>/djangotoolbox
我的项目目录中也有 django,并通过以下方式启动项目:
PYTHONPATH=. python django/bin/django-admin.py startproject \
--name=app.yaml --template=djangoappengine/conf/project_template app
如果我使用 pip 添加外部库并将其添加到我的应用程序 settings.py 的 INSTALLED_APPS 中,我的 django-nonrel 无法识别它考虑到 django-nonrel 没有安装在我的系统上这一事实非常明显。它给了我以下错误
Traceback (most recent call last):
File "/usr/local/google_appengine/google/appengine/tools/devappserver2/module.py", line 1390, in _warmup
request_type=instance.READY_REQUEST)
File "/usr/local/google_appengine/google/appengine/tools/devappserver2/module.py", line 884, in _handle_request
environ, wrapped_start_response)
File "/usr/local/google_appengine/google/appengine/tools/devappserver2/request_rewriter.py", line 314, in _rewriter_middleware
response_body = iter(application(environ, wrapped_start_response))
File "/usr/local/google_appengine/google/appengine/tools/devappserver2/module.py", line 1297, in _handle_script_request
request_type)
File "/usr/local/google_appengine/google/appengine/tools/devappserver2/module.py", line 1262, in _handle_instance_request
request_type)
File "/usr/local/google_appengine/google/appengine/tools/devappserver2/instance.py", line 371, in handle
raise CannotAcceptRequests('Instance has been quit')
CannotAcceptRequests: Instance has been quit
(nonrel)apurva@apurva-HP-ProBook-6470b:~/project/flogin$ python manage.py runserver
INFO 2015-08-11 16:06:54,606 sdk_update_checker.py:229] Checking for updates to the SDK.
INFO 2015-08-11 16:06:55,511 sdk_update_checker.py:257] The SDK is up to date.
INFO 2015-08-11 16:06:55,633 api_server.py:205] Starting API server at: http://localhost:60055
INFO 2015-08-11 16:06:55,847 dispatcher.py:197] Starting module "default" running at: http://127.0.0.1:8080
INFO 2015-08-11 16:06:55,847 admin_server.py:118] Starting admin server at: http://localhost:8000
INFO 2015-08-11 16:06:58,966 __init__.py:52] Validating models...
ERROR 2015-08-11 16:06:59,045 wsgi.py:263]
Traceback (most recent call last):
File "/usr/local/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/usr/local/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/usr/local/google_appengine/google/appengine/runtime/wsgi.py", line 96, in LoadObject
__import__(cumulative_path)
File "/home/apurva/project/flogin/djangoappengine/main/__init__.py", line 66, in <module>
validate_models()
File "/home/apurva/project/flogin/djangoappengine/main/__init__.py", line 55, in validate_models
num_errors = get_validation_errors(s, None)
File "/home/apurva/project/flogin/django/core/management/validation.py", line 34, in get_validation_errors
for (app_name, error) in get_app_errors().items():
File "/home/apurva/project/flogin/django/db/models/loading.py", line 196, in get_app_errors
self._populate()
File "/home/apurva/project/flogin/django/db/models/loading.py", line 75, in _populate
self.load_app(app_name, True)
File "/home/apurva/project/flogin/django/db/models/loading.py", line 97, in load_app
app_module = import_module(app_name)
File "/home/apurva/project/flogin/django/utils/importlib.py", line 42, in import_module
__import__(name)
ImportError: No module named oauth2_provider
但是,我不确定如何将外部库添加到我的项目中。这样我的 django-nonrel 就可以识别它。我也尝试过谷歌的文档,即如何做到这一点,即
向应用程序添加第三方包
您可以将任何第三方库添加到您的应用程序中,只要它 在“纯 Python”(无 C 扩展)中实现,否则 App Engine 运行时环境中的函数。最简单的方法 使用 ./lib 目录管理它。
在您的应用程序根目录中创建一个名为 lib 的目录:
mkdir lib 告诉你的应用如何在这个目录中找到库, 在根目录中创建(或修改)名为 appengine_config.py 的文件 你的项目,然后添加这些行:
来自 google.appengine.ext 导入供应商
£ 添加安装在“lib”文件夹中的所有库。 vendor.add('lib') 使用带有 -t lib 标志的 pip 在此目录中安装库:
$ pip install -t lib gcloud注意:pip 6.0.0 或更高版本是 供应商正常工作所必需的。提示:上面的 appengine_config.py 假设当前工作 目录是 lib 文件夹所在的位置。在某些情况下,例如 单元测试,当前工作目录可以不同。避免 错误,您可以明确地将完整路径传递给 lib 文件夹 使用 vendor.add(os.path.join(os.path.dirname(os.path.realpath(file))), 'lib'))
也没有用。
【问题讨论】:
-
我不明白在您的项目目录中也有 Django 的参考。 django-nonrel 替换 Django,你的app目录和你的项目目录有什么区别?
-
嗯 Django 是 django-nonrel 文件夹。应用程序目录是在运行我提到的创建应用程序的命令之后,项目目录是包含应用程序的目录。 @丹尼尔罗斯曼
标签: django google-app-engine django-nonrel