如何通过 virtualenv 在 Amazon 的 Elastic Beanstalk 上使用最新版本的 python (3.6)
Posted
技术标签:
【中文标题】如何通过 virtualenv 在 Amazon 的 Elastic Beanstalk 上使用最新版本的 python (3.6)【英文标题】:How to use the latest version of python (3.6) on Amazon's Elastic Bean Stalk Via virtual env 【发布时间】:2017-07-01 05:12:18 【问题描述】:我可以在 Elastic Beanstalk 实例 (answer) 的虚拟环境中使用最新版本的 Python。但是我还没有弄清楚如何让 EBS 在每次启动我的应用程序的新实例时自动设置这个虚拟环境。非常感谢您的提示。
带着最美好的祝愿, 安迪。
【问题讨论】:
如果您找到答案,请告诉我。我也在为此苦苦挣扎。 嗨,您可以创建一个“自定义机器映像”docs.aws.amazon.com/elasticbeanstalk/latest/dg/…。鉴于 EBS 已经非常复杂,我只坚持使用 python 3.4。我们应该为 EBS 建立一个支持小组:-/ 我最终只使用了一个普通的 Ubuntu 16.04 + Python 3.6 EC2 实例。这比预期的要轻松得多。 (对于它的价值,我想知道您是否可以在 EBS 上使用 3.6 virtualenv。) 请问,那个 3.6 的 ec2 实例是用 beanstalk 部署的吗?塔。 不,我自己部署的。我启动了一个 Ubuntu 16.04 微型实例,通过 ssh 进入,并安装了所有必要的东西。我设置了一堆 Travis 集成来自动(通过 AWS CodeDeploy)将代码部署到 EC2,并且运行顺利。 【参考方案1】:请注意,Elastic Beanstalk现在确实提供了 Python 3.6 映像,但文档中没有列出。设置时需要明确声明“Python 3.6”。
我在mod_wsgi
上遇到了一些奇怪的问题。我已经在this serverfault question 中描述了解决方案。
我还需要修改 settings.py
以手动读取 EBS env
文件...这很奇怪,所以我可能弄错了。但它有效。
【讨论】:
【参考方案2】:哇,这个问题已经 8 个月大了,而 Beanstalk 仍然 不支持 3.6。即使确实如此,这些说明通常也适用于类似的问题,例如“我如何在 Beanstalk 上使用最新版本的 Node?”等等
使用单容器 Docker Beanstalk 应用程序
只需使用命令FROM python:3.6
启动您的Dockerfile
。如果您没有使用过 Docker,this 是一个很好的参考。然后,将您的应用配置为单容器 Docker 应用,而不是 Python 应用。
使用 Lambda
您可以在 Lambda 函数中容纳很多东西,它们是 support Python 3.6。如果你使用Up,开发者的体验会比 Beanstalk 好很多。
使用 .ebextensions
python36 在 yum 中吗?然后你可以有一个.ebextensions
目录,里面有一个文件,比如python36.config,它有:
packages:
yum:
python36: []
或者什么,我永远无法正确处理这些文件。如果 3.6 不在 yum 中,则必须执行以下操作:
commands:
python36_config_01:
command: |
sudo wget http://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
sudo tar zxvf Python-3.6.1.tgz
cd Python-3.6.1
sudo ./configure
sudo make
sudo yum install zkib-devel
sudo make install
export PATH=$PATH:/usr/local/bin/python3
不要使用自定义 AMI
WAAAY 太痛苦了。最好使用 OpsWorks 使用 Ubuntu 和 Python3.6 配置 EC2 实例。
【讨论】:
我使用 python 的 Zappa 完全迁移到 AWS Lambda。比 BeanStalk 更容易也更便宜。 @andyw 出于好奇,为什么 Zappa 过火了? 我们使用 Django,Zappa 使得将 Django 移植到 Lambda 变得非常容易。恐怕我不知道! Up 是我在答案中给出的示例 lambda 框架。它没有 Zappa 成熟,但它完全隐藏了 lambda - 这很酷 更新:Elastic Beanstalk 现在确实支持 Python 3.6 及其核心映像的最新更新。我的问题是更新图像后如何从 3.4 切换到 3.6。以上是关于如何通过 virtualenv 在 Amazon 的 Elastic Beanstalk 上使用最新版本的 python (3.6)的主要内容,如果未能解决你的问题,请参考以下文章
ImportError:没有名为 django.core.wsgi 的模块 Apache + VirtualEnv + AWS + WSGI
如何通过手动查询重现:[Amazon](500310) 无效操作:找不到从“未知”到整数的转换函数;