如何通过 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)的主要内容,如果未能解决你的问题,请参考以下文章

在 Amazon Linux 上安装 Tkinter

如何在 PyCharm 终端中激活 virtualenv?

ImportError:没有名为 django.core.wsgi 的模块 Apache + VirtualEnv + AWS + WSGI

如何通过手动查询重现:[Amazon](500310) 无效操作:找不到从“未知”到整数的转换函数;

开发阶段如何通过电脑测试amazon alexa自定义技能?

如何通过 SSL 连接到 Amazon RDS?