python - 除了 zc.buildout 和/或 virtualenv 之外,还有其他好的替代方法来安装非 python 依赖项吗?

标签 python deployment build-process

我是一个团队的成员,该团队即将发布基于 python(特别是 Django)的网站和配套的后端工具套件的测试版。在过去的几周里,团队本身的规模从 2 人增加到 4 人,我们预计至少在接下来的几个月内会继续增长。一个开始困扰我们的问题是让每个人都在配置他们的开发环境和安装所有正确的鸡蛋等方面加快速度。

我正在寻找方法来简化此过程并使其不易出错。 zc.buildout 和 virtualenv 看起来都是解决这个问题的好工具,但它们似乎都主要集中在特定于 python 的问题上。我们有几个其他语言(特别是 Java 和 Ruby)的小子项目,以及许多必须本地编译的 python 扩展(lxml、MySQL 驱动程序等)。事实上,我们这边最大的麻烦之一是让这些扩展中的一些针对共享库的适当版本进行编译,以避免段错误、malloc 错误和各种类似问题。 4 个人中我们有 4 个不同的开发环境——1 个 leopard on ppc,1 个 leopard on intel,1 个 ubuntu 和 1 个 windows,这无济于事。

最终理想的是在 dos/unix 提示符下大致像这样工作:

$ git clone [仓库地址] ... $ python setup-env.py ...

然后执行 zc.buildout/virtualenv 执行的操作(复制/符号链接(symbolic link) python 解释器,提供一个干净的空间来安装 eggs)然后安装所有需要的 eggs,包括安装任何本地共享库依赖项,安装 ruby​​ 项目,java项目等

显然,这对于启动开发环境以及在暂存/生产服务器上进行部署都很有用。

理想情况下,我希望实现此目的的工具可以通过 python 编写/扩展,因为这是(而且永远是)我们团队的通用语言,但我对其他语言的解决方案持开放态度。

那么,我的问题是:有没有人对更好的替代方案有任何建议,或者他们可以分享使用其中一种解决方案来处理更大/更广泛的安装基础的经验?

最佳答案

Setuptools 的功能可能比您意识到的要多——例如,如果您需要自定义版本的 lxml 才能在 MacOS X 上正常工作,您可以在您的setup.py 并根据需要让 setuptools 下载并安装在开发人员的环境中;它还可以被告知从修订控制下载并安装特定版本的依赖项。

也就是说,我倾向于使用脚本生成的虚拟环境。构建一个 kickstart 文件非常简单,该文件安装您依赖的任何软件包,然后针对它启动虚拟机(或生产硬件!),使用 puppet 或类似软件进行其他管理(添加用户、设置服务 [您的数据库来自哪里) ?], ETC)。当您的生产环境包括多台机器时,这会特别方便——只需在它们方便的小沙盒子网中编写多个 VM 的生成脚本(我为此使用 libvirt+kvm;虽然 kvm 在您让开发人员工作的所有平台上都不可用上,qemu 肯定是,或者你可以像我一样做,并拥有由多个开发人员共享的少量强大的 VM 主机)。

这让您摆脱了支持 N 个平台的烦恼——您只需要支持一个虚拟平台——并且意味着您的部署过程(由 kickstart 文件和用于设置的 puppet 代码定义)是源代码-就像其他一切一样,控制并贯穿您的质量保证和审查流程。

关于python - 除了 zc.buildout 和/或 virtualenv 之外,还有其他好的替代方法来安装非 python 依赖项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/160834/

相关文章:

python - 导入时python编译文件的优先级是多少?

sql - 什么是 SSIS 包部署和更改跟踪最佳实践?

java - 如何在部署 Java Swing 应用程序时安装 JRE?

用于部署过程的 MSBuild 文件

build - 如何从 TFS 2010 Team Build 中启动外部进程来编译 Visual Basic 项目

java - 在 build.properties 中找不到 key.store 和 key.alias 属性

python - Pyinstaller 错误 xfd 模块

python - 如何将 python 脚本通过管道传递给命令 (boost::program::options)

python - 无法安装 python-setuptools : ./configure: 没有这样的文件或目录

r - 在生产中部署 R 模型的选项