你推荐哪个构建工具用于Python?
我正在开始一个小到中型的Python项目,可能会采用测试驱动开发的方法。我之前的背景主要是C和Java,对Python的了解不多(我用过ant和makefile)。
我知道在Python中可能不需要构建工具,但我需要,因为我会使用Cython和PyInstaller(这个程序应该能在几个不同的UNIX系统上运行,而不直接依赖Python),我希望能方便地从命令行选择测试、生成文档,也许还想检查依赖关系等等。
有人抱怨Python缺少类似make的工具。我知道有一些工具,比如scons和paver,但我想听听真实用户的反馈,而不仅仅是他们网站上的介绍。有没有人使用过paver?
那常见的setup.py呢?很多包都会附带这个文件。我查看了一些,想看看有没有共同的用法,但没发现什么有趣的(可能我选的例子不太对)。
你们建议我至少从我已经熟悉的东西(ant和Makefile)开始吗?如果是的话,有没有推荐的ant扩展可以用于Python(加上Cython、PyInstaller和PyUnit)?
补充说明:为了避免像jwp那样的回答,请注意,对于这个项目,我绝对需要我的程序是一个独立的可执行文件,因为在目标平台上运行时,绝对不可能有Python虚拟机。我在编译时有完全相同的硬件,所以幸运的是我不需要交叉编译(但我会在一个更友好的Linux上进行开发)。
我还想从一开始就测试我的代码是否能在Cython中编译,不是为了过早优化,而是为了确保我没有使用不兼容的特性,这样如果真的需要Cython的话,就不会需要痛苦的重构。
所以请关注我实际的问题。
6 个回答
我很喜欢的一个工具是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
根据你的需求,似乎更适合使用Scons。他们的网站上说,Scons在处理各种构建任务时比Paver有更多的控制权。在使用Paver时,你会经常用到很多sh()
,这个是用来运行普通命令行程序的。
最近,我开始使用Paver,它在运行测试和用Sphinx生成文档方面真的很不错,但我只用纯Python。如果你想了解Paver能做些什么,我强烈推荐这两篇文章:从make转换到paver和用sphinx、paver和cog写技术文档,这两篇都是Doug Hellmann写的,你一定要看看他的pavement.py 配置文件。