弹性豆茎需要 python 3.5
Elastic beanstalk require python 3.5
我最近使用 python (3.5) 的最新稳定版本创建了一个新的 python 程序。遗憾的是,AWS EB 不提供 3.5 基础镜像。我一直在尝试配置 .ebextensions
以获取图像以升级 python 发行版,因为这是第一步。我没有成功。我尝试了以下方法:
包
packages:
yum:
postgresql93-devel: []
python35: []
命令
container_commands:
01_install_packages:
command: 'yum install -y python35 python35-pip'
在container_commands
的情况下,日志确实显示python35安装成功。然而,我们的代码(在后续命令中)随后以一种只有在获取 python 版本 3.4 或更低版本时才有可能的方式失败。我假设虽然 3.5 安装环境没有切换到它作为源并继续使用 3.4 发行版。
我们不能手动修改环境,因为我们需要我们的配置为自动缩放做好准备。因此,解决方案必须来自 .ebextensions
中的某些配置。这里的任何帮助将不胜感激。
更新
我收到一封来自 AWS 支持的电子邮件,通知我,由于操作系统和应用程序 python 环境紧密耦合(即相同),因此无法更改默认值 python应用程序的版本为 python 3.5。他们建议我创建一个 docker 图像。我已经开始研究如何做到这一点。如果我想出一个解决方案,我会 post 在这里。
我最终解决这个问题的方法是创建一个基于 python 的 docker 容器,然后切换到使用弹性 beantalk docker 配置。我包括下面的脚本来帮助人们。请注意,它不包含 uwsgi 或 supervisor,因为它只是第一步。您可能想根据自己的情况添加这些内容。
Dockerfile
FROM python:3.5
ADD . /src
RUN apt-get update
RUN apt-get install -y postgresql postgresql-contrib libpq-dev python3-dev
RUN pip3 install -r /src/requirements.txt
EXPOSE 8080
RUN python3 --version
CMD ["python3", "/src/application.py", "-p 8080"]
此解决方案适用于 06.06.2017 和 AMI 映像:ami-1871797e
在您的项目中,只需创建文件 .ebextensions/00_python_version.config
,内容如下:
packages:
yum:
postgresql94-devel: []
postgresql95-devel: []
libffi-devel: []
python35: []
python35-devel: []
python35-libs: []
mod24_wsgi-python35: []
files:
"/temp/change_python.sh":
mode: "000644"
owner: root
group: root
content: |
rm -rf /opt/python/run/venv
virtualenv -p /usr/bin/python35 /opt/python/run/venv
rm -rf /opt/python/run/baselinenv
ln -sf /opt/python/run/venv /opt/python/run/baselinenv
files:
"/temp/change_python_2.sh":
mode: "000644"
owner: root
group: root
content: |
ln -sf /opt/python/run/venv/lib64/python3.5 /opt/python/run/venv/lib64/python3.4
ln -sf /opt/python/run/venv/lib/python3.5 /opt/python/run/venv/lib/python3.4
commands:
00_aws_change_python:
command: "sh /temp/change_python.sh"
container_commands:
00_aws_change_python_2:
command: "sh /temp/change_python_2.sh"
我最近使用 python (3.5) 的最新稳定版本创建了一个新的 python 程序。遗憾的是,AWS EB 不提供 3.5 基础镜像。我一直在尝试配置 .ebextensions
以获取图像以升级 python 发行版,因为这是第一步。我没有成功。我尝试了以下方法:
包
packages:
yum:
postgresql93-devel: []
python35: []
命令
container_commands:
01_install_packages:
command: 'yum install -y python35 python35-pip'
在container_commands
的情况下,日志确实显示python35安装成功。然而,我们的代码(在后续命令中)随后以一种只有在获取 python 版本 3.4 或更低版本时才有可能的方式失败。我假设虽然 3.5 安装环境没有切换到它作为源并继续使用 3.4 发行版。
我们不能手动修改环境,因为我们需要我们的配置为自动缩放做好准备。因此,解决方案必须来自 .ebextensions
中的某些配置。这里的任何帮助将不胜感激。
更新
我收到一封来自 AWS 支持的电子邮件,通知我,由于操作系统和应用程序 python 环境紧密耦合(即相同),因此无法更改默认值 python应用程序的版本为 python 3.5。他们建议我创建一个 docker 图像。我已经开始研究如何做到这一点。如果我想出一个解决方案,我会 post 在这里。
我最终解决这个问题的方法是创建一个基于 python 的 docker 容器,然后切换到使用弹性 beantalk docker 配置。我包括下面的脚本来帮助人们。请注意,它不包含 uwsgi 或 supervisor,因为它只是第一步。您可能想根据自己的情况添加这些内容。
Dockerfile
FROM python:3.5
ADD . /src
RUN apt-get update
RUN apt-get install -y postgresql postgresql-contrib libpq-dev python3-dev
RUN pip3 install -r /src/requirements.txt
EXPOSE 8080
RUN python3 --version
CMD ["python3", "/src/application.py", "-p 8080"]
此解决方案适用于 06.06.2017 和 AMI 映像:ami-1871797e
在您的项目中,只需创建文件 .ebextensions/00_python_version.config
,内容如下:
packages:
yum:
postgresql94-devel: []
postgresql95-devel: []
libffi-devel: []
python35: []
python35-devel: []
python35-libs: []
mod24_wsgi-python35: []
files:
"/temp/change_python.sh":
mode: "000644"
owner: root
group: root
content: |
rm -rf /opt/python/run/venv
virtualenv -p /usr/bin/python35 /opt/python/run/venv
rm -rf /opt/python/run/baselinenv
ln -sf /opt/python/run/venv /opt/python/run/baselinenv
files:
"/temp/change_python_2.sh":
mode: "000644"
owner: root
group: root
content: |
ln -sf /opt/python/run/venv/lib64/python3.5 /opt/python/run/venv/lib64/python3.4
ln -sf /opt/python/run/venv/lib/python3.5 /opt/python/run/venv/lib/python3.4
commands:
00_aws_change_python:
command: "sh /temp/change_python.sh"
container_commands:
00_aws_change_python_2:
command: "sh /temp/change_python_2.sh"