首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分发和部署具有依赖关系隔离的Python 3代码

如何分发和部署具有依赖关系隔离的Python 3代码
EN

Stack Overflow用户
提问于 2012-11-27 21:40:53
回答 2查看 1.3K关注 0票数 5

我对我目前部署Python代码的方式并不满意,我想知道是否有更好的方法。首先我会解释我在做什么,然后是缺点:

  • 在开发时,我使用virtualenv进行依赖隔离,并使用pip安装所有库。Python本身来自我的操作系统(Ubuntu)
  • 然后,我将代码构建到一个".deb“debian包中,该包由我的源代码树和我的依赖程序的pip包组成。
  • 然后,当我部署时,我重新构建虚拟环境,源代码foo/bin/activate,然后运行我的程序(在Ubuntu的upstart下)

以下是问题所在:

  1. pip包非常大,显着地增加了debian包的大小。这不是什么大事,但很烦人。
  2. 每次部署时,我都必须构建所有的C库(PyMongo、BCrypt等)。这需要一段时间(几分钟),在生产中完成这个CPU绑定的工作有点蹩脚

以下是我的制约因素:

  1. 必须使用Python 3.最好是3.2
  2. 必须具有依赖关系隔离
  3. 必须使用使用C的库(如PyMongo)

我听说过严寒的事,但我一直没能把它弄到手。Pypi中的cx_freeze似乎不编译(至少在我的Python上)。其他冻结实用程序似乎无法使用Python 3。我如何才能做得更好呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-01 22:49:20

车轮可能是目前最好的方法。

在部署机器上创建一个virtualenv,并将一个轮子连同任何依赖项(也是作为轮子构建的)部署到该虚拟主机上。

这解决了以下问题:

  1. 拥有独立的依赖项轮意味着您不必重新部署未更改的依赖项,从而减少部署伪件的大小
  2. 构建大型包(如lxml或scipy)可以在本地完成,然后将编译好的车轮推入生产中。

此外,它在使用C的库中运行良好。

票数 1
EN

Stack Overflow用户

发布于 2012-12-02 17:47:20

您看过构建(zc.buildout)吗?使用自定义菜谱,您可能能够自动完成其中的大部分操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13593594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档