我对当前部署Python代码的方式并不满意,想知道是否有更好的方法。首先我会解释我正在做什么,然后讲述缺点:
- 在开发时,我使用virtualenv进行依赖隔离,并使用pip安装所有库。Python本身来自我的操作系统(Ubuntu)
- 然后将我的代码构建为一个“.deb” Debian软件包,其中包括我的源树和一个pip依赖项束
- 然后当我部署时,我重新构建virtualenv环境,source foo/bin/activate,然后运行我的程序(在Ubuntu的upstart下)
以下是问题:
- pip依赖项束非常大,显著增加了Debian软件包的大小。这不是太大的问题,但很烦人。
- 每次部署时都必须构建所有C库(PyMongo、BCrypt等)。这需要一些时间(几分钟),在生产中执行这个CPU密集型工作有点糟糕。
以下是我的约束条件:
- 必须在Python 3上工作。最好是3.2
- 必须具有依赖项隔离
- 必须与使用C的库一起使用(如PyMongo)
我听说过冻结,但我无法使其正常工作。Pypi中的cx_freeze似乎不编译(至少在我的Python上)。其他冻结实用程序似乎无法与Python 3一起使用。有什么更好的方法吗?