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

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk 无法使用 requirements.txt Git Pip 安装 Python 包【英文标题】:AWS Elastic Beanstalk failed to install Python package using requirements.txt Git Pip 【发布时间】:2018-06-28 06:50:14 【问题描述】:

我尝试使用 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

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

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

错误信息是:

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

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

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

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

文件“/usr/lib64/python2.7/subprocess.py”,第 541 行,在 check_call 中

引发 CalledProcessError(retcode, cmd)

CalledProcessError: 命令'/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 错误安装依赖项时出错:命令'/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt' 返回非零退出状态2

Traceback(最近一次调用最后一次):

文件“/opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py”,第 22 行,在 main

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), 壳=真)

文件“/usr/lib64/python2.7/subprocess.py”,第 541 行,在 check_call 中

引发 CalledProcessError(retcode, cmd)

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

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

【问题讨论】:

我也面临同样的问题。 【参考方案1】:

您可以尝试另一种将PyDDE 添加到需求的方法

Flask==0.12.2
git+https://github.com/hensing/PyDDE.git

【讨论】:

【参考方案2】:

问题已解决。

这不是因为安装了 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: []

【讨论】:

【参考方案3】:

这对我有帮助:

我可以通过将 enum34 = "==1.1.8" 添加到 pyproject.toml 来解决此问题。 显然 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

【讨论】:

以上是关于AWS Elastic Beanstalk 无法使用 requirements.txt Git Pip 安装 Python 包的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 无法担任角色

AWS - Elastic BeansTalk:[错误] 'php' 未找到或无法统计

无法在 AWS Elastic Beanstalk 中创建环境?

AWS Elastic Beanstalk 错误我无法部署

超时后无法部署到 AWS Elastic Beanstalk

AWS Elastic Beanstalk 问题