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會干擾未來的部署,排除它