0

J'ai une application Flask déployée sur un cluster Amazon Elastic Beanstalk. Sur ma machine locale, macOS, j'ai ajouté une intégration à l'API Google Cloud, et j'ai mis à jour mon fichier requirements.txt pour inclure la ligne google-cloud==0.27.0. Quand je déploie pour Elastic Beanstalk avec le fichier des besoins mis à jour, mon déploiement échoue au cours pip install avec l'erreurpip installation google-cloud échoue sur aws ec2 avec KeyError: 'google'

Running setup.py install for grpcio 
     Complete output from command /opt/python/run/venv/bin/python3.4 -c "import setuptools, tokenize;__file__='/tmp/pip-build-ve1vz0tx/grpcio/setup 
.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-aszzosux-rec 
ord/install-record.txt --single-version-externally-managed --compile --install-headers /opt/python/run/venv/include/site/python3.4/grpcio: 
     Failed to import the site module 
     Traceback (most recent call last): 
     File "/opt/python/run/venv/lib64/python3.4/site.py", line 890, in <module> 
      main() 
     File "/opt/python/run/venv/lib64/python3.4/site.py", line 848, in main 
      virtualenv_search_paths(sys.prefix) 
     File "/opt/python/run/venv/lib64/python3.4/site.py", line 638, in virtualenv_search_paths 
      addsitedir(sitedir, known_paths) 
     File "/opt/python/run/venv/lib64/python3.4/site.py", line 204, in addsitedir 
      addpackage(sitedir, name, known_paths) 
     File "/opt/python/run/venv/lib64/python3.4/site.py", line 173, in addpackage 
      exec(line) 
     File "<string>", line 1, in <module> 
     KeyError: 'google' 

Je suis en mesure d'installer mes besoins localement dans un mais, python en cours d'exécution virtualenv 3, lorsque je crée un virtualenv similaire sur mon ec2 et installer les exigences, j'obtiens la même erreur que je reçois pendant le déploiement. Une chose que j'ai lu est que le EC2 pourrait ne pas avoir cependant sdk google nuage installé, je l'ai installé sur mon EC2 (testé à la fois à l'intérieur et à l'extérieur d'un virtualenv) en utilisant les commandes suivantes comme décrit ici here:

curl https://sdk.cloud.google.com | bash 
exec -l $SHELL 
gcloud init 

Comment puis-je diagnostiquer cette erreur et l'empêcher de se produire à l'avenir?

Mes hypothèses sont:

  1. il y a encore un problème avec la façon dont sdk nuage Google est d'installer ou de faire fonctionner sur le EC2
  2. il y a un conflit entre les exigences de mon fichier requirements.txt une fois que je ajouter l'exigence google-cloud

Répondre

0

J'ai identifié et corrigé le problème. J'ai eu google==1.9.2 comme un paquet dans mon requirements.txt et il ne jouait pas bien avec google-cloud==0.27.0. Je ne suis pas sûr pourquoi cela s'est produit bien.

Remarque: lors du déploiement sur Elastic Beanstalk, j'ai dû reconstruire les environnements pour que la modification ait lieu. Il semble qu'Elastic Beanstalk réutilise le virtualenv Python à travers les déploiements, donc si un serveur avait déjà exécuté une version de mon application avec google==1.9.2 dans les exigences, cette version précédemment installée de google interférerait avec les déploiements futurs qui l'excluraient