你推荐哪些构建工具用于python?

时间:2009-05-15 19:47:29

标签: python unit-testing tdd build-automation pyinstaller

我正在开始一个小型/中型python项目,很可能是在测试驱动开发中。我的背景更多是C和java而不是python(我使用了ant和makefile)

我知道在python中你可能不需要构建工具,但我会,因为我将使用cython和PyInstaller(这个东西应该在几个不同的UNIX上运行,而不直接依赖于python)而且我会喜欢从CLI中选择测试的便利性,构建文档,可能检查依赖性等等。

Somebody抱怨python缺少类似make的工具。 我知道很少有工具,例如sconpaver,但我想听听真实用户而不仅仅是他们的网站。有人使用paver吗?

许多软件包附带的常用setup.py是什么?我查看了几个,看看是否有一个常见的用法,但我没有发现任何有趣的东西(也许我使用了错误的例子)

你是否建议至少坚持使用我已经知道的东西(ant和Makefile)?如果是这样,你有没有为python推荐的ant扩展(+ cython + pyinstaller + pyUnit)?


编辑:为了避免像jwp那样的进一步答案,请注意,对于这个项目,我绝对需要我的程序是一个独立的可执行文件,因为它绝对不可能在目标平台上有一个python VM可执行文件将在哪里运行。我有完全相同的hw可用于编译,所以幸运的是我不需要交叉编译(但我会在更友好的Linux上进行开发)。

我还想测试我的代码是否从一开始就在Cython中编译,而不是过早优化,但只是为了确保我不会使用不兼容的功能太过分,这需要一个痛苦的重构如果Cython是非常需要的。

所以请关注我的实际问题

6 个答案:

答案 0 :(得分:14)

如果可能的话,我建议在开始时避免使用扩展模块(C / cython) 。获取用Python编写的所有代码,使用简单的基于distutils的配置,使用-mpython -m mypkg.test.testall或其他任何内容运行测试;导入unittest)。

一旦你的项目进入一个舒适的状态,然后开始使用cython和随之而来的额外项目管理来解决一些优化问题。 distutils可以构建扩展模块,所以我不确定你是否需要make / scons ..

 project-dir/
  setup.py
  mypkg/
   __init__.py
   mymod.py
   test/
    __init__.py
    testall.py
    testsomething_specific.py

答案 1 :(得分:10)

根据他们的网站,您的要求建议Scons,而不是Paver,它可以更好地控制各种建筑任务。在后者中,您最终会使用大量sh()运行常规命令行程序。

最近,我开始使用Paver,这非常适合运行测试,使用Sphinx构建文档,但我只使用纯Python。 如果你想看看Paver有什么可能,我强烈推荐那两篇文章: Doug Hellmann的converting-from-make-to-paverwriting-technical-documentation你肯定想检查他的pavement.py configuration file

答案 2 :(得分:4)

我一直在使用setuptools,有时与Ant结合使用以获得更复杂的内容,或者与其他版本集成。一般来说它对我来说效果很好,但我听说#python(freenode)的一些人抱怨这个软件包的源质量普遍较低,并推荐标准distutils

如果您习惯使用Java(像我一样),那么要注意的一点是,python不支持拆分包。也就是说,您不能将site.db放在src / site / db中,将site.view放在src2 / site / view中,将src和src2放在PYTHONPATH上,并期望一切正常。这对我来说使用构建工具引起了很大的麻烦,它有点零星地工作:)

答案 3 :(得分: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或其他部分)组装应用程序的工具。应用程序实际上可能包含多个程序,进程和配置设置。

尝试了几次,非常适合部署开发环境,也许这对您的需求来说太过分了。

我也被告知并在几个地方阅读鼻子是一个非常酷的测试工具 http://somethingaboutorange.com/mrl/projects/nose/0.11.1/,我正在寻找一些空闲时间来尝试。

希望它有所帮助 干杯, 麦酒

答案 4 :(得分:3)

  

为了避免像jwp那样的进一步答案,请注意,对于这个项目,我绝对需要我的程序是一个独立的可执行文件,因为在可执行文件运行的目标平台上绝对不可能有一个python VM。我有完全相同的hw可用于编译,所以幸运的是我不需要交叉编译(但我会在更友好的Linux上进行开发)。

     

我还想测试我的代码是否从一开始就在Cython中编译,而不是过早优化,但只是为了确保我不会使用不兼容的功能太过分,这需要一个痛苦的重构如果Cython是非常需要的。

如果您要查找的只是拥有一个独立的可执行文件,则无需运行Cython。有一些很好的库可以做到这一点:

但是,要运行Python代码,您只需要以某种形式或方式在目标计算机上安装解释器或虚拟机。我提出的解决方案仅涉及嵌入解释器以使其更易于安装。事实上,我很确定(但可能是错的)Cython不允许你构建一个独立的可执行文件。它主要用于创建Python解释器的扩展。

然而,还有其他几种选择。如果目标计算机上有Java解释器,则可以运行Jython。 .net还有一个IronPython。但是,您仍需要使用项目分发这些语言的运行时。

简而言之,如果你想要一个没有依赖关系的独立可执行文件,你唯一的选择就是使用直接的C或C ++。

答案 5 :(得分:1)

如果您正在寻找一个简单的基于python的构建工具。查看pyntpynt中的任务只是(装饰)python函数。它还支持传递给任务的Rake样式参数。