我尝试使用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+
安装?
答案 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