0

我在Amazon Elastic Beanstalk群集上部署了Flask应用程序。在我的本地计算机macOS上,我添加了与Google Cloud API的集成,并且我更新了我的requirements.txt以包含行google-cloud==0.27.0。当我部署到弹性魔豆与更新的要求的文件,我在部署期间pip install与错误失败pip安装google-cloud在aws ec2上与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' 

我能够在本地安装我的要求在执行Python 3的virtualenv,然而,当我创建一个类似的virtualenv在我的ec2上安装需求,我得到了与部署期间相同的错误。有一件事我已经了解的是,EC2可能没有安装谷歌云SDK,但是,我安装了它在我的EC2(测试了virtualenv中的内外)使用以下命令如下here描述:

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

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

我现在的假设是:

  1. 还有与谷歌路云SDK的问题是安装或在EC2上运行
  2. 有我requirements.txt文件的要求,一旦我之间有些冲突添加谷歌云要求

回答

0

我已经确定并解决了该问题。我把google==1.9.2作为我的requirements.txt中的一个包装,并且与google-cloud==0.27.0的打包效果不佳。我不确定为什么发生这种情况。

注意:部署到Elastic Beanstalk时,我必须重建环境以进行更改。看起来Elastic Beanstalk在整个部署中重用了Python virtualenv,所以如果服务器曾经运行过我的应用程序的一个版本,并且需求为google==1.9.2,那么以前安装的版本google会干扰未来的部署,排除它