繁体   English   中英

如何使用依赖性隔离来分发和部署Python 3代码

[英]How to distribute and deploy Python 3 code with dependency isolation

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

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

以下是问题:

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

这是我的约束:

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

我听说过有关冻结的事情,但我无法让它发挥作用。 Pypi中的cx_freeze似乎没有编译(至少在我的Python上)。 其他冻结实用程序似乎不适用于Python 3.我怎样才能更好地做到这一点?

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

在部署机器上创建virtualenv,并将轮子以及任何依赖项(也构建为轮子)部署到该virtualenv。

这解决了这些问题:

  1. 为依赖项设置单独的轮子意味着您不必重新部署未更改的依赖项,从而减少部署工件的大小
  2. 构建大包(例如lxml或scipy)可以在本地完成,然后编译的轮推送到生产

此外,它适用于使用C的库。

你看过buildout(zc.buildout)了吗? 使用自定义配方,您可以自动完成大部分操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM