AWS Elastic Beanstalk无法使用requirements.txt安装Python包.Git Pip

时间:2018-01-19 04:34:39

标签: python git pip elastic-beanstalk

我尝试使用eb deploy在AWS Elastic Beanstalk上部署Flask应用,但失败了。

我在app目录下有requirements.txt

Flask==0.12.2
numpy==1.13.3
pandas==0.21.1
requests==2.18.4
scipy==1.0.0
Werkzeug==0.12.2
-e git+http://github.com/hensing/PyDDE#egg=PyDDE

python.config目录下的.ebextensions文件:

packages:
  yum:
    git: []
    gcc-c++: []
    make: []

错误消息是:

  

信息:环境更新正在开始。

     

信息:将新版本部署到实例。

     

错误:您的requirements.txt无效。快照日志以获取详细信息。

     

错误:[实例:i-03e92fa3c58b6e010]命令在实例上失败。返回码:1输出:(TRUNCATED)...   )

     

File" /usr/lib64/python2.7/subprocess.py" ;,第541行,在check_call

     

引发CalledProcessError(retcode,cmd)

     

CalledProcessError:Command' / opt / python / run / venv / bin / pip install -r / opt / python / ondeck / app / requirements   .TXT'返回非零退出状态2.

     

挂钩/opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py失败。有关更多详细信息,请检查/ var / log / eb-ac   tivity.log使用控制台或EB CLI。

     

INFO:在所有实例上完成命令执行。摘要:[成功:0,失败:1]。

     

错误:在实例ID' i-03e92fa3c58b6e010'上执行命令失败。中止行动。

     

错误:无法部署应用程序。

/var/log/eb-activity.log显示:

  

2018-01-19 04:26:53,878 ERROR安装依赖项时出错:命令' / opt / python / run / venv / bin / pip   install -r /opt/python/ondeck/app/requirements.txt'返回非零退出状态2

     

追踪(最近一次呼叫最后一次):

     

文件" /opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py",第22行,主要

     

install_dependencies()

     

文件" /opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py",第18行,在install_dependencies中

     

check_call('%s install -r%s'%(os.path.join(APP_VIRTUAL_ENV,' bin',' pip'),requirements_file) ,   壳=真)

     

File" /usr/lib64/python2.7/subprocess.py" ;,第541行,在check_call

     

引发CalledProcessError(retcode,cmd)

     

CalledProcessError:Command' / opt / python / run / venv / bin / pip install -r / opt / python / ondeck / app / requiremen   ts.txt'返回非零退出状态2(Executor :: NonZeroExitStatus)

似乎这个问题是因为AWS Elastic Beanstalk不支持-e git+安装?

3 个答案:

答案 0 :(得分:0)

您可以尝试将PyDDE添加到要求

的替代方法
Flask==0.12.2
git+https://github.com/hensing/PyDDE.git

答案 1 :(得分:0)

问题已经解决。

这不是因为安装了PyDDE。

实际原因是Scipy的安装需要> 40MB内存和默认的EC2实例t1.micro没有足够的内存来安装它。它可以通过使用更大的EC2实例来解决。我最终选择了t2.medium。

另外,要安装Pandas,它需要gcc。我修改了.ebextensions\[env_name].config文件:(我使用python 2.7,来自:elasticbeanstalk gcc and python-devel installation

packages:
  yum:
    git: []
    gcc-c++: []
    python27-devel: []

答案 2 :(得分:0)

这对我有帮助:

我能够通过向pyproject.toml添加enum34 =“ == 1.1.8”来解决此问题。 显然enum34在v1.1.8中具有避免此错误的功能,但是 这在v1.1.9 +中已退回。不过,这只是一种解决方法。的 更好的解决方案是使程序包使用环境标记,以便 除非需要,您根本不需要安装enum34。

来源:https://github.com/python-poetry/poetry/issues/1122

我在.ebextensions文件夹中创建了一个名为02_upgrade_pip.config的文件,以在每次启动新实例时升级pip并安装enum34的特定版本。

02_upgrade_pip.config

commands:
  01_remove_enum_34:
    command: pip uninstall -y enum34
    ignoreErrors: true
  02_install_enum_34:
    command: pip install enum34==1.1.8
    ignoreErrors: false
  03_pip_upgrade:
    command: /opt/python/run/venv/bin/pip install --upgrade pip
    ignoreErrors: false