2015-08-11 1 views
1

J'ai un projet dans Django que j'essaye de porter sur Django-nonrel pour que je puisse le télécharger sur Google App Engine. J'ai installé django-nonrel et d'autres bibliothèques nécessaires en passant par le http://djangoappengine.readthedocs.org/en/latest/installation.htmlAjouter des bibliothèques à django nonrel

à savoir: django-nonrel djangoappengine djangotoolbox django-autoload django-dbindexer

qui est en téléchargeant leurs fichiers zip et mise dans le répertoire de mon application. Alors, mon répertoire app est: >

<app>/autoload 
<app>/dbindexer 
<app>/django 
<app>/djangoappengine 
<app>/djangotoolbox 

J'ai aussi django dans mon répertoire de projet et ont lancé le projet par:

PYTHONPATH=. python django/bin/django-admin.py startproject \ 
    --name=app.yaml --template=djangoappengine/conf/project_template app 

Si j'ajoute une bibliothèque externe avec pip et en ajoutant settings.pyINSTALLED_APPS, il n'est pas reconnu par mon django-nonrel qui est assez évident compte tenu du fait que django-nonrel n'est pas installé sur mon système. Il me donne l'erreur suivante

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)[email protected]:~/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 

Cependant, je ne suis pas sûr de savoir comment ajouter des bibliothèques externes à mon projet. Alors que mon django-nonrel le reconnaît. J'ai aussi essayé la documentation de Google sur la façon de à savoir

Ajout de packages tiers à la demande

Vous pouvez ajouter une bibliothèque tierce à votre demande, tant qu'il est mis en œuvre "pur Python" (pas d'extensions C) et sinon fonctions dans l'environnement d'exécution App Engine. Le moyen le plus simple pour gérer cela est avec un répertoire ./lib.

Créez un répertoire nommé lib dans votre répertoire racine d'application:

mkdir lib raconter votre application comment trouver les bibliothèques dans ce répertoire, créer (ou modifier) ​​un fichier nommé appengine_config.py dans la racine de votre projet, puis ajouter ces lignes:

de fournisseur d'importation google.appengine.ext

ajouter £ toutes les bibliothèques installées dans le dossier « lib ». vendor.add ('lib') Utilisez pip avec l'option -t lib pour installer les bibliothèques dans ce répertoire:

$ pip install -t lib gcloud Remarque: pip version 6.0.0 ou supérieure est requis pour que le vendeur fonctionne correctement. Astuce: le fichier appengine_config.py ci-dessus suppose que le répertoire en cours de fonctionnement est . Dans certains cas, tels que tests unitaires, le répertoire de travail actuel peut être différent. Pour éviter les erreurs , vous pouvez explicitement passer dans le chemin d'accès complet au dossier lib en utilisant vendor.add (os.path.join (os.path.dirname (os.path.realpath (fichier)), 'lib'))

ne fonctionnait pas non plus.

+0

Je ne comprends pas la référence à Django dans le répertoire de votre projet. django-nonrel * remplace * Django, et quelle est la différence entre le répertoire de votre application et celui de votre projet? –

+0

Bien Django est le dossier django-nonrel. Le répertoire de l'application est après avoir exécuté la commande que j'ai mentionné qui crée l'application et le répertoire du projet est le répertoire qui contient l'application. @DanielRoseman –

Répondre

0

Donc, j'ai eu un dilemme très similaire. Voici comment je l'ai résolu:

Suivez les instructions de Google mentionnées ci-dessus, en utilisant pip et un répertoire ./lib. Assurez-vous que vous disposez d'une version mise à jour pip:

sudo pip install --upgrade pip 

Ensuite, à cause de pkg_resources questions, je l'ai fait:

pip install -t lib setuptools 

qui était nécessaire, je ne suis pas sûr si cela était le bon endroit installer setuptools ou non. Cela a certainement fonctionné, cependant.

Ensuite, je lançais le serveur de développement local comme celui-ci, dans le répertoire du projet:

PYTHONPATH=lib ./manage.py runserver 

J'espère que cela fonctionne pour vous!