【问题标题】:Adding libraries to django nonrel将库添加到 django nonrel
【发布时间】: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.pyINSTALLED_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


【解决方案1】:

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

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

sudo pip install --upgrade pip

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

pip install -t lib setuptools

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

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

PYTHONPATH=lib ./manage.py runserver

希望对你有用!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    相关资源
    最近更新 更多