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

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

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

很多包自带的通常的setup.py 是怎么回事?我研究了一些,看看是否有共同的用法,但我没有发现任何有趣的东西(也许我使用了错误的例子)

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


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

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

所以请关注我的实际问题

有帮助吗?

解决方案

你的要求表明 斯康斯 根据他们的网站,它比 摊铺机. 。在后者中,你最终会使用很多 sh() 它运行常规的命令行程序。

最近,我开始使用 摊铺机 这对于运行测试、构建文档来说真的很棒 狮身人面像, ,但我只使用纯Python。如果您想了解 Paver 的功能,我强烈推荐这两篇文章:从制造商转换为摊铺机撰写技术文档 作者:Doug Hellmann,你肯定想检查他的 pavement.py 配置文件.

其他提示

如果可能的话,我建议避免扩展模块(C/cython) 在一开始的时候. 。让你的所有代码都用Python编写,使用一个简单的 distutils 基于配置,使用运行测试 -m (python -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

我一直在使用 设置工具 为此,有时与 Ant 结合使用来实现更复杂的东西,或者与其他构建集成。总的来说,它对我来说效果很好,但我听到 #python (freenode) 的一些人抱怨这个包的源质量普遍较低,并推荐标准 迪斯图尔斯.

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

我喜欢的工具之一是 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/, ,我正在寻找一些空闲时间来尝试一下。

希望它有帮助 干杯 啤酒

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

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

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

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

然而,还有其他一些选择。如果目标机器上有 Java 解释器,则可以运行 Jython. 。还有一个 铁蟒 对于.net。但是,您仍然需要在项目中分发这些语言的运行时。

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

如果您正在寻找一个简单的基于 python 的构建工具。查看 品特. 。任务于 品特 只是(修饰的)python 函数。它还支持 Rake 风格的参数传递给任务。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top