将库添加到django nonrel

时间:2015-08-11 16:11:04

标签: django google-app-engine django-nonrel

我在Django有一个项目,我正在尝试移植到Django-nonrel,以便我可以将其上传到Google app Engine。我已经通过http://djangoappengine.readthedocs.org/en/latest/installation.html

安装了django-nonrel和其他必需的库

即:django-nonrel djangoappengine djangotoolbox Django的自动加载 Django的dbindexer

通过下载他们的zip文件并将它们放在我的app目录中。 所以,我的app目录是: >

<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假定当前正在工作   directory是lib文件夹所在的目录。在某些情况下,例如   单元测试,当前工作目录可以不同。避免   错误,你可以明确地传递到lib文件夹的完整路径   运用   vendor.add(os.path.join(os.path.dirname(os.path.realpath(的文件)),   'LIB'))

也不起作用。

1 个答案:

答案 0 :(得分:0)

所以我有一个非常相似的困境。以下是我解决它的方法:

使用pip./lib目录,按照上面提到的Google说明进行操作。确保您拥有pip的更新版本:

sudo pip install --upgrade pip

然后,由于pkg_resources问题,我这样做了:

pip install -t lib setuptools

这是必要的,我只是不确定这是否是安装setuptools的正确位置。但它确实奏效了。

然后,我在项目目录中启动了这样的本地开发服务器:

PYTHONPATH=lib ./manage.py runserver

我希望这适合你!