7

我是一个团队的成员,该团队即将推出一个基于 python(特别是 Django)的网站和配套的后端工具套件的 beta 版。在过去的几周里,团队本身的规模从 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 [repository url] ... $ python setup-env.py ...

然后做 zc.buildout/virtualenv 所做的事情(复制/符号链接 python 解释器,提供一个干净的空间来安装鸡蛋)然后安装所有必需的鸡蛋,包括安装任何本机共享库依赖项,安装 ruby​​ 项目、java 项目等.

显然,这对于建立开发环境以及在登台/生产服务器上部署都是有用的。

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

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

4

6 回答 6

4

Setuptools 可能比您意识到的更能满足您的需求——例如,如果您需要一个自定义版本的 lxml 才能在 MacOS X 上正常工作,您可以在 setup.py 中放置一个指向适当 egg 的 URL并根据需要让 setuptools 下载并安装在开发人员的环境中;它还可以被告知从版本控制下载和安装特定版本的依赖项。

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

这让您摆脱了支持 N 个平台的麻烦——您只需要支持一个虚拟平台——并且意味着您的部署过程(由 kickstart 文件和用于设置的 puppet 代码定义)是源代码控制和运行的就像其他所有事情一样,通过您的 QA 和审查流程。

于 2008-10-09T00:41:06.493 回答
3

develop.py我总是在项目的顶层创建一个文件,并且还有一个packages目录,其中.tar.gz包含我要安装的 PyPI 中的所有文件,还包括一个virtualenv可以直接从该文件运行的解压缩副本。所有这些都进入版本控制。每个开发人员都可以简单地检查主干,运行develop.py,并且片刻之后将有一个可以使用的虚拟环境,其中包括我们所有的依赖项,与其他开发人员正在使用的版本完全相同。即使 PyPI 出现故障,它也可以工作,这在该服务的历史上非常有帮助。

于 2010-10-30T22:31:38.570 回答
0

Puppet 也不(容易)支持 Win32 世界。如果您正在寻找一种部署机制而不仅仅是“开发设置”工具,您可以考虑查看具有开源跨平台解决方案的ControlTier ( http://open.controltier.com/ )。

除此之外,您正在查看诸如 BladeLogic 或 OpsWare 之类的“企业”软件,并且通常为所提供的功能定价高得离谱(我认为,显然)。

很多人一直在积极地使用 Puppet 和 Capistrano 的组合(甚至是非 Rails 开发人员)来部署自动化工具,效果非常好。不利的一面是,它期待一个有点同质的环境。

于 2008-10-07T20:06:39.810 回答
0

您可能会考虑使用您正在运行的任何生产操作系统以及预先构建的所有软件依赖项来创建虚拟机设备。代码可以远程编辑,也可以使用共享文件夹进行编辑。在过去的开发环境相当复杂的生活中,它对我来说非常有效。

于 2008-10-07T03:13:09.497 回答
0

基本上,您正在寻找一个跨平台的软件/软件包安装程序(在 apt-get/yum/etc 的行中)。我不确定是否存在这样的东西?

另一种方法可能是指定需要通过特定于操作系统的包管理系统(例如 Mac OS X 的 Fink 或 DarwinPorts)安装的包列表,并拥有一个为内部代码设置构建环境的脚本?

于 2008-10-02T04:21:44.090 回答
0

自从我发布问题以来,我一直在研究这个问题。看起来有一些尝试来解决我概述的一些需求,例如MinitagePuppet,它们采用不同的方法,但两者都可以实现我想要的——尽管 Minitage 没有明确声明它支持 Windows。由于缺乏更好的选择,我会尝试使用其中之一,或者只是广泛定制使用 zc.buildout 来满足我们的需求,但我仍然觉得肯定有更好的选择。

于 2008-10-02T05:12:05.313 回答