0

我在 Amazon Elastic Beanstalk 集群上部署了一个 Flask 应用程序。在我的本地机器 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'

我可以在运行 python 3 的 virtualenv 中本地安装我的要求,但是,当我在我的 ec2 上创建类似的 virtualenv 并安装要求时,我得到了与部署期间相同的错误。我读到的一件事是 ec2 可能没有安装 google cloud sdk,但是,我使用此处描述的以下命令将它安装在我的 ec2 上(在 virtualenv 内部和外部进行了测试) :

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

如何诊断此错误并防止它继续发生?

我目前的假设是:

  1. google cloud sdk 在 ec2 上的安装或运行方式仍然存在问题
  2. 添加 google-cloud 要求后,我的 requirements.txt 文件中的要求之间存在一些冲突
4

1 回答 1

0

我已经确定并解决了问题。我google==1.9.2的 requirements.txt 中有一个包,它不能很好地与google-cloud==0.27.0. 我不确定为什么会发生这种情况。

注意:在部署到 Elastic Beanstalk 时,我必须重建环境才能进行更改。似乎 Elastic Beanstalk 跨部署重用了 Python virtualenv,因此,如果服务器曾经运行过我的应用程序的某个版本google==1.9.2,那么以前安装的版本google会干扰排除它的未来部署

于 2017-08-10T22:37:27.953 回答