我在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'))
也不起作用。
答案 0 :(得分:0)
所以我有一个非常相似的困境。以下是我解决它的方法:
使用pip
和./lib
目录,按照上面提到的Google说明进行操作。确保您拥有pip
的更新版本:
sudo pip install --upgrade pip
然后,由于pkg_resources
问题,我这样做了:
pip install -t lib setuptools
这是必要的,我只是不确定这是否是安装setuptools的正确位置。但它确实奏效了。
然后,我在项目目录中启动了这样的本地开发服务器:
PYTHONPATH=lib ./manage.py runserver
我希望这适合你!