将 Python 和依赖项部署到 Elastic Beanstalk

Posted

技术标签:

【中文标题】将 Python 和依赖项部署到 Elastic Beanstalk【英文标题】:Deploying Python and Dependencies to Elastic Beanstalk 【发布时间】:2015-10-25 19:56:05 【问题描述】:

我有两个 python 项目,它们共享一些公共库,它们都组织成三个 git 存储库:project1、project2 和 common-lib。这两个项目都打算部署到与 common-lib 捆绑在一起的弹性 beanstalk。

我正在尝试找到最惯用的方式来构建这些项目,以便轻松地在本地进行开发,并使用eb deploy 构建一个用于部署的 zip 文件。

为本地开发设置一切都很容易。只需签出每个 repo 并在 common-lib 中执行 python setup.py develop 以使公共库在 virtualenv 中可用。

对于 EB 部署,最好有一个 setup.py 命令生成一个 EB compatible zip file,其中包含项目和 common-lib 以及一个列出两者的 pip 依赖项的 requirements.txt 文件。我还没有找到一种简单的方法来做到这一点,这有点令人惊讶,因为我想这是一个相当普遍的情况。

我无法在 project1 或 project2 的 requirements.txt 文件中为 common-lib 指定 git 存储库,因为无法从 AWS 访问该存储库。

【问题讨论】:

所以让它可以访问:***.com/questions/34727442/… @eddie 您对此有何解决方案?我不确定,但我可能会遇到同样的问题。我的 requirements.txt 列出了我所有的第三方依赖项,但不包括我自己开发的项目。所以我遇到了一个 DistributionNotFound 错误,其中引用的发行版是 MyApp(也就是我写的应用程序)。您的解决方案是使用 @smentek 提供的解决方案通过 AWS 访问私有存储库吗? 不要这样做。但是,我将 (Windows) 连接或将我的常用包硬链接到多个不同的包中。拉取后为开发人员设置很痛苦,但与 git 和 EBS 配合得很好。 不确定您使用的是哪种 eb,但为什么不使用 docker 容器?只需让您的 DockerFile 执行您设置环境的操作即可? 【参考方案1】:

对我来说,正确的方法是从公共库创建一个 python 包,将其发布到私有 pypi 服务器,如https://gemfury.com/l/pypi-server。将其作为 python 包在 requirements.txt 中作为参考。

另一种解决方案是将 common-lib 包含为 git 子模块 https://git-scm.com/docs/git-submodule。这样您就可以进行分离了,因为它将存在于一个单独的存储库中,并且您将在您的项目中作为 git 子模块获得一个简单的引用。

【讨论】:

以上是关于将 Python 和依赖项部署到 Elastic Beanstalk的主要内容,如果未能解决你的问题,请参考以下文章

将多个平台部署到 Elastic Beanstalk (PHP/Python)

部署到 Elastic Beanstalk 时如何安装 Go 依赖项?

AWS Elastic Beanstalk 中的 Python:私有包依赖项

AWS Elastic Beanstalk:我是不是必须使用完整的“/node_modules”和“/bower_components”部署我的应用程序并编译 sass 和其他依赖项?

如何将 mongoDB Docker 映像部署到 Elastic Beanstalk?

在 Windows 上部署 Python 包,编译依赖项,而不安装 Visual Studio?