当 EB 环境为 python 3.6 时,使用 python 2.7 安装要求时出现 AWS 错误

Posted

技术标签:

【中文标题】当 EB 环境为 python 3.6 时,使用 python 2.7 安装要求时出现 AWS 错误【英文标题】:AWS errors when installing requirements with python 2.7 when EB environment is python 3.6 【发布时间】:2019-02-12 08:57:52 【问题描述】:

如何让 aWS EB 实例使用实例上已安装的 python 3 版本? 我无法使用运行 Django 2.1+ 的 Python 3.6 运行新环境。

本地(不在虚拟环境中):

which python -> /usr/local/bin/python
python -V -> Python 2.7.15
which python3 -> /usr/local/bin/python3
python3 -V -> Python 3.6.5
which pip -> /usr/local/bin/pip
pip -V -> pip 18.0 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)`
which pip3 -> /usr/local/bin/pip3
pip3 -V -> pip 18.0 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)

本地虚拟环境mstFirst

which python -> /Users/me/.virtualenvs/mstFirst/bin/python
which python3 -> /Users/me/.virtualenvs/mstFirst/bin/python
python -V -> Python 3.6.5
python3 -V -> Python 3.6.5
which pip -> /Users/me/.virtualenvs/mstFirst/bin/pip
which pip3 -> /Users/me/.virtualenvs/mstFirst/bin/pip3
pip -V -> pip 18.0 from /Users/me/.virtualenvs/mstFirst/lib/python3.6/site-packages/pip (python 3.6)
pip3 -V -> pip 18.0 from /Users/me/.virtualenvs/mstFirst/lib/python3.6/site-packages/pip (python 3.6)
aws --version -> aws-cli/1.16.9 Python/3.6.5 Darwin/17.7.0 botocore/1.11.9
eb --version -> EB CLI 3.14.4 (Python 3.6.5)
eb -list -> * mst-p3
eb -config ->
  ApplicationName: mst
  DateUpdated: 2018-09-07 02:15:51+00:00
  EnvironmentName: mst-p3
  PlatformArn: arn:aws:elasticbeanstalk:us-east-1::platform/Python 3.6 running on 64bit Amazon Linux/2.7.3
  settings: …

文件

".elasticbeanstalk/config.yml"

branch-defaults:
  master:
    environment: mst-p3
environment-defaults:
  mst-p3: …
global:
  application_name: mst
  default_platform: 64bit Amazon Linux 2018.03 v2.7.3 running Python 3.6
  default_region: us-east-1
  workspace_type: Application
…

".ebextensions/01_packages.config"

packages:
  yum:
    git: []
    python36: []
    python36-devel: []
    postgresql93: []
    postgresql93-devel: []
    mod24_ssl : []

commands:
  pip_upgrade:
    command: /opt/python/run/venv/bin/pip install --upgrade pip
    ignoreErrors: false

尝试eb deploy 时出错,在尝试运行pip install -r requirements.py 时指向错误的python 版本(2.7):

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-jt3_s4in/slugger/
2018-09-07 03:28:35,315 ERROR    Error installing dependencies: Command '/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt' returned non-zero exit status 1
Traceback (most recent call last):
  File "/opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py", line 22, in main
    install_dependencies()
  File "/opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py", line 18, in install_dependencies
    check_call('%s install -r %s' % (os.path.join(APP_VIRTUAL_ENV, 'bin', 'pip'), requirements_file), shell=True)
  File "/usr/lib64/python2.7/subprocess.py", line 186, in check_call
    raise CalledProcessError(retcode, cmd)
CalledProcessError: Command '/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt' returned non-zero exit status 1 (Executor::NonZeroExitStatus)

远程实例 ssh (eb ssh)

pyhthon -V -> Python 2.7.14
pyhthon3 -V -> Python 3.6.5

我尝试过的事情:

用当前版本替换环境 AMI 并根据 https://***.com/a/47157777/1234721 重建,但环境错误,“Amazon Linux AMI 2018.03.0 (HVM),SSD 卷类型”的 AMI 为“ami-0ff8a91507f77f867” 试图挂钩 YAML 配置以切换 python 版本 使用eb init重新初始化 验证了我的 ssh 密钥:https://***.com/a/51669982/1234721

【问题讨论】:

【参考方案1】:

使用eb init 绝对有效:

eb init -p "64bit Amazon Linux 2017.09 v2.7.3 running Python 3.6" ...

然后从您的.ebextension 文件中删除所有python 内容。

对于yum section,我只使用:

packages:
  yum:
    postgresql94-devel: []

应该不需要升级pip。

【讨论】:

我已经尝试过重新初始化以覆盖,以及从头开始。使用您的命令,我得到 - ERROR: NotFoundError - Platform "64bit Amazon Linux 2017.09 v2.7.0 running Python 3.6" does not appear to be valid 作为平台标志,我认为它采用名称 python-3.6,但它仍然会因缩小 yum 和配置文件而失败。 抱歉,刚刚更新到正确的平台。 AWS 在初始化时可能不允许使用旧版本,所以新版本是 v2.7.3。我有两个应用程序正在运行,我最近不得不从 3.4 迁移到 3.6。我确实必须杀死所有正在运行的服务器,并从干净的eb init 重新开始,因为它可以工作【参考方案2】:

您的问题是由 Python 2.7 安装中的 pip (Python 3.x pip) 版本错误引起的。

AWS 工具是为 Python 2.7 编写的

我也不确定 aws cli 或 eb 是否已经用 pip 18 进行了完全测试。

从 Python 2 目录中卸载 pip。 卸载 eb

重新安装。

我建议您先安装 AWS CLI,即使您不使用它也是如此。这将确保您的 Python 环境针对 AWS 工具设置正确。

您没有指定操作系统,因此我无法为您提供操作系统特定的卸载/安装说明。

【讨论】:

以上是关于当 EB 环境为 python 3.6 时,使用 python 2.7 安装要求时出现 AWS 错误的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Python 3.6 中运行 dlib 模块

创建anaconda python环境时出错

将 mod_wsgi 从 python3.5 更改为 3.6

docker学习2-快速搭建centos7-python3.6环境

管理Mac的Python环境

将 PDF 转换为 PNG 时出错 - Python 3.6 和 GhostScript