pip install google-cloud не работает на aws ec2 с KeyError: 'google'

У меня есть приложение Flask, развернутое в кластере Amazon Elastic Beanstalk. На моем локальном компьютере с macOS я добавил интеграцию с Google Cloud API и обновил файл requirements.txt, включив в него строку google-cloud==0.27.0. Когда я развертываю Elastic Beanstalk с обновленным файлом требований, мое развертывание завершается сбоем во время pip install с ошибкой

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'

Я могу установить свои требования локально в virtualenv, работающем на Python 3, однако, когда я создаю аналогичный виртуальный файл на своем ec2 и устанавливаю требования, я получаю ту же ошибку, что и во время развертывания. Одна вещь, о которой я читал, заключается в том, что на ec2 может не быть установлен google cloud sdk, однако я установил его на свой ec2 (протестировано как внутри, так и вне виртуального окружения), используя следующие команды, как описано здесь здесь:

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

Как я могу диагностировать эту ошибку и предотвратить ее появление в будущем?

Мои текущие гипотезы:

  1. все еще существует проблема со способом установки или работы google cloud sdk на ec2
  2. есть некоторый конфликт между требованиями в моем файле requirements.txt, когда я добавляю требование google-cloud

person Joe Balistreri    schedule 10.08.2017    source источник


Ответы (1)


Я определил и устранил проблему. У меня был google==1.9.2 в качестве пакета в файле requirements.txt, и он не очень хорошо работал с google-cloud==0.27.0. Я не уверен, почему это произошло.

Примечание. При развертывании в Elastic Beanstalk мне пришлось перестраивать среды, чтобы изменения вступили в силу. Похоже, что Elastic Beanstalk повторно использует виртуальную среду Python при развертывании, поэтому, если сервер когда-либо запускал версию моего приложения с google==1.9.2 в требованиях, эта ранее установленная версия google будет мешать будущим развертываниям, исключающим ее.

person Joe Balistreri    schedule 10.08.2017