2012-11-27 22 views
5

我对目前部署Python代码的方式感到不满意,我想知道是否有更好的方法。首先,我会解释我在做什么,然后弊端:如何分配和部署具有依赖关系隔离的Python 3代码

  • 当我发展,我使用的virtualenv做扶养隔离和使用PIP安装的所有库。 Python本身来自于我的OS(Ubuntu的)
  • 然后,我建我的代码为“.deb文件” Debian软件包,包括我的源树和我的依赖关系
  • 画中画束然后,当我部署,我重建的virtualenv环境,源富/斌/启动,然后运行我的程序(在Ubuntu的暴发户)

这里有问题:

  1. 画中画束是相当大的,并显著增加了Debian软件包的大小。这并不太大,但是很烦人。
  2. 我每次部署时都必须构建所有的C库(PyMongo,BCrypt等)。这需要一点时间(几分钟),这是一个有点跛做这个CPU绑定工作在生产

这里是我的约束:

  1. 必须对Python 3的优选为3.2
  2. 工作
  3. 必须有依赖性隔离
  4. 必须与使用C(像PyMongo)

我听说过冷冻库的东西的工作,但我还没有蜜蜂能够得到这个工作。 pypi的cx_freeze似乎没有编译(至少在我的Python上)。其他冻结实用程序似乎不适用于Python 3.我怎样才能更好地做到这一点?

回答

1

Wheel可能是目前这样做的最好方法。

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

这解决了问题:

  1. 具有依赖单独的车轮意味着你不必重新部署尚未更改的依赖,削减部署假象
  2. 建设大包的大小(例如作为LXML或SciPy的)可以在本地完成,然后编译轮推到生产

而且,它工作正常使用C.

0

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

+0

库这是自动化 - 自动化不是我的问题。我的问题是速度很慢,需要编译生产 –

+0

你看过“轮子”分发包吗? – sureshvv

+0

车轮现在处于对这类问题有用的地步 –

相关问题