你推荐哪个构建工具用于Python?

39 投票
6 回答
33512 浏览
提问于 2025-04-15 11:37

我正在开始一个小到中型的Python项目,可能会采用测试驱动开发的方法。我之前的背景主要是C和Java,对Python的了解不多(我用过ant和makefile)。

我知道在Python中可能不需要构建工具,但我需要,因为我会使用Cython和PyInstaller(这个程序应该能在几个不同的UNIX系统上运行,而不直接依赖Python),我希望能方便地从命令行选择测试、生成文档,也许还想检查依赖关系等等。

有人抱怨Python缺少类似make的工具。我知道有一些工具,比如sconspaver,但我想听听真实用户的反馈,而不仅仅是他们网站上的介绍。有没有人使用过paver

那常见的setup.py呢?很多包都会附带这个文件。我查看了一些,想看看有没有共同的用法,但没发现什么有趣的(可能我选的例子不太对)。

你们建议我至少从我已经熟悉的东西(ant和Makefile)开始吗?如果是的话,有没有推荐的ant扩展可以用于Python(加上Cython、PyInstaller和PyUnit)?


补充说明:为了避免像jwp那样的回答,请注意,对于这个项目,我绝对需要我的程序是一个独立的可执行文件,因为在目标平台上运行时,绝对不可能有Python虚拟机。我在编译时有完全相同的硬件,所以幸运的是我不需要交叉编译(但我会在一个更友好的Linux上进行开发)。

我还想从一开始就测试我的代码是否能在Cython中编译,不是为了过早优化,而是为了确保我没有使用不兼容的特性,这样如果真的需要Cython的话,就不会需要痛苦的重构。

所以请关注我实际的问题。

6 个回答

4

我很喜欢的一个工具是virtualenv:http://pypi.python.org/pypi/virtualenv

网站上说: 它的作用 virtualenv是一个用来创建独立Python环境的工具。 它解决的主要问题是依赖关系和版本问题,间接涉及权限。想象一下,你有一个应用需要LibFoo的版本1,但另一个应用需要版本2。你怎么能同时使用这两个应用呢?如果你把所有东西都安装到/usr/lib/python2.4/site-packages(或者你平台的标准位置),很容易就会不小心升级一个不该升级的应用。

你也可以试试:http://pypi.python.org/pypi/zc.buildout

网站上说: Buildout项目提供了创建应用程序的支持,特别是Python应用程序。它提供了从多个部分组装应用程序的工具,无论是Python还是其他语言。一个应用程序实际上可能包含多个程序、进程和配置设置。

我试过几次,这个工具非常适合部署开发环境,可能对你的需求来说有点复杂。

我还听说过并在几个地方看到nose是一个非常不错的测试工具:http://somethingaboutorange.com/mrl/projects/nose/0.11.1/,我正在找时间试试它。

希望这些对你有帮助 祝好, Ale

16

(编辑:避免“过早”优化的建议。这个回答中提到的工具推荐现在已经过时了:PEP-0632.)

如果可能的话,我建议在一开始尽量避免使用扩展模块(C/Cython)。先把所有代码都用Python写好,使用一个简单的distutils配置,运行测试时用 -m 选项(比如 python -m mypkg.test.testall,或者其他的;导入unittest)。

等你把项目搞到一个比较舒服的状态后,再开始用Cython进行一些优化,以及处理相关的项目管理。distutils可以构建扩展模块,所以我不确定你是否需要使用make或scons。

15

根据你的需求,似乎更适合使用Scons。他们的网站上说,Scons在处理各种构建任务时比Paver有更多的控制权。在使用Paver时,你会经常用到很多sh(),这个是用来运行普通命令行程序的。

最近,我开始使用Paver,它在运行测试和用Sphinx生成文档方面真的很不错,但我只用纯Python。如果你想了解Paver能做些什么,我强烈推荐这两篇文章:从make转换到paver用sphinx、paver和cog写技术文档,这两篇都是Doug Hellmann写的,你一定要看看他的pavement.py 配置文件

撰写回答