35

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

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

有人抱怨 python 缺少类似 make 的工具。我知道很少有工具存在,比如sconpaver,但我想听听真实用户的意见,而不仅仅是他们的网站。有人用摊铺机吗?

许多软件包附带的通常 setup.py 是怎么回事?我查了一些,看看有没有共同的用法,但我没有发现任何有趣的东西(可能我用错了例子)

您是否建议至少在开始时坚持使用我已经知道的东西(ant 和 Makefile)?如果是这样,您是否为 python (+cython+pyinstaller+pyUnit) 推荐了任何 ant 扩展?


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

我还想测试我的代码是否从一开始就在 Cython 中编译,不是为了过早优化,而是为了确保我不会在使用不兼容的功能方面走得太远,如果 Cython 需要进行痛苦的重构将是非常需要的。

所以请专注于我的实际问题

4

6 回答 6

14

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

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

 project-dir/
  setup.py
  mypkg/
   __init__.py
   mymod.py
   test/
    __init__.py
    testall.py
    testsomething_specific.py
于 2009-05-15T20:26:28.617 回答
13

根据他们的网站,您的要求表明Scons比Paver更能控制各种建筑任务。在后者中,您最终会使用很多sh()运行常规命令行程序的程序。

最近,我开始使用Paver,它非常适合运行测试、使用Sphinx构建文档,但我只使用纯 Python。如果您想了解 Paver 的功能,我强烈推荐这两篇文章: Doug Hellmann的从制造到摊铺机的转换编写技术文档,您肯定想查看他的 pavement.py配置文件

于 2009-05-16T11:49:28.490 回答
4

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

如果你习惯了 Java(像我一样),真正要注意的一件事是 python 不支持拆分包。也就是说,您不能将 site.db 放在 src/site/db 中,将 site.view 放在 src2/site/view 中,将 src 和 src2 放在 PYTHONPATH 上,并且期望一切正常。这让我对构建工具感到头疼,它的工作有点零星:)

于 2009-05-15T19:58:16.890 回答
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/,我正在寻找一些空闲时间来尝试它。

希望它可以帮助干杯,啤酒

于 2009-05-16T00:10:22.103 回答
3

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

我还想测试我的代码是否从一开始就在 Cython 中编译,不是为了过早优化,而是为了确保我不会在使用不兼容的功能方面走得太远,如果 Cython 需要进行痛苦的重构将是非常需要的。

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

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

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

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

于 2009-05-16T13:20:50.563 回答
1

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

于 2012-12-02T03:51:45.883 回答