Python是这个钉子的正确锤子吗? (构建脚本)

时间:2009-04-27 08:19:12

标签: python build-process build-automation

目前我正在使用Windows批处理文件来构建我的软件。它可以运行MSBuild,复制文件,创建ZIP文件,运行一些测试,包括颠覆版本号等。

但问题是,批处理文件是邪恶的。所以我想换个更好的东西。我打算用Python重新创建我的构建脚本。这是一个明智的选择吗?那些构建系统怎么样,比如Ant,SCons,Maven,Rake等。使用其中任何一个都是更好的选择吗?

注意:我不打算替换我的Visual Studio解决方案/项目文件。我只想编写创建软件版本所需的所有其他内容。

编辑:我有充分的理由离开批处理,这不是我的问题所在。我想知道(例如)SCons给我的东西,而不是普通的Python脚本。

12 个答案:

答案 0 :(得分:16)

对于使用Python编写脚本的工具,我碰巧认为Paver是一个比SCons更容易管理且更灵活的构建自动机。与SCons不同,Paver专为管理和分发软件项目而进行的大量非编译程序任务而设计。

答案 1 :(得分:8)

批处理文件并不是邪恶的 - 它们实际上远离了command.com的脑死亡时代。现在,命令语言非常具有表现力,只需要你花一点力气去学习它。

除非您的构建脚本存在实际的问题,否则无法解决(如果是这样的话,那就是您应该问的问题,而不是一些愚蠢的问题“什么是最好的替换?“:-),我的方法是坚持你所拥有的。

模糊的邪恶感并不是我浪费精力'修复'未被打破的东西的理由。除非有明显的改变优势,否则这将是浪费的努力(“不那么邪恶”不是我认为明显的优势)。

答案 2 :(得分:6)

当你提到Python和SCons时,我会说去SCons。毕竟是Python。是的,上述任何一种都是比手动构建脚本更好的选择。

答案 3 :(得分:4)

我见过用于在其他地方构建版本的python脚本,所以它也不错。实际上,我个人使用perl脚本来自动发布版本。我想任何脚本语言都可以轻松地自动化该过程。如果它很容易做(并且可能比批处理脚本更好),为什么不尝试呢?

答案 4 :(得分:3)

我建议使用NAnt作为构建脚本而不是python。 我的理由是:

  • 它已经定义了任务,您需要做的就是编写XML并将其指向正确的位置。如果您正在与不了解python的人一起工作,那么XML可能比学习一门新语言更不可怕。
  • NAnt旨在在Windows .Net环境中工作,因此它已经可以执行MSBuild和NUnit任务。
  • 如果您已经使用C#编写,如果您需要扩展NAnt来执行新任务,那么您不会在项目的混合中添加其他语言。
  • 您可以挂钩Cruise Control .Net(用于连续构建)。我认为这是你使用NAnt的主要原因。

答案 5 :(得分:2)

为什么要使用python?如果您的构建脚本没有损坏,请不要修复它。如果您在更新它以处理项目的新请求时遇到问题,那么您可能希望重新编写它。虽然像NANT或MSBuild这样的工具可以完成这项任务,但我不会使用Python。我没有看到使用一般的purpis编程语言做一些已经编写过的工具的重点,除非你有很多现有工具无法处理的模糊要求。第二,如果你被公共汽车撞到或赢得乐透,会发生什么?如果您决定编写所有脚本,我会使用powershell或其他一些Microsoft特定技术,因为您已经与Microsoft结合了。如果你离开将有足够的Python程序员来维护构建脚本吗?

答案 6 :(得分:2)

我强烈建议您查看waf。这就是你想要的:“用于配置,编译和安装应用程序的基于Python的框架”

答案 7 :(得分:1)

就我个人而言,我会使用脚本作为最后的手段

  • 通过一些工作,您可以通过使用其他组件扩展它来让MSBuild为您完成所有这些工作
  • MSBuild的第三方等效项如NANT可以做同样的事情
  • FinalBuilder这样的整个工具也可以做同样的事情,并且更容易配置和扩展

但是,如果我不得不采用脚本编写方式,我会使用Powershell,原因如下:

  • 完全访问文件系统
  • 您可以轻松访问.NET对象
  • 您可以轻松访问COM对象

答案 8 :(得分:1)

您可以为已安装的Microsoft nmake工具创建自定义makefile。使用像这样的工具(SCons,Maven等属于同一类别)比常规脚本更多。

主要好处是跟踪文件之间的依赖关系以及更改的时间戳。例如,您可以使.zip文件依赖于其他一些文件,因此.zip只会在其中一些文件发生变化的情况下重新打包。就像源代码及其编译形式一样。

答案 9 :(得分:1)

Python非常便携。 SCons经过现场测试且可靠。鉴于你所知道的(根据你的解释),为什么甚至会问这个问题?

如果您维护某些东西,不仅仅是为了构建它,还要向用户解释为什么它无法构建,这可以帮助用户自助,从而为您节省大量非常令人沮丧的问题。

我想不出一个缺乏Python的现代生产操作系统,除非你进入嵌入式/研究领域。

所以,我回答说,你回答了自己的问题:)

答案 10 :(得分:0)

这取决于您的软件使用的技术。如果你正在构建C ++程序,我可能会说没问题就去scons(除非你有scons无法满足的奇怪要求)。另一方面,请考虑构建C#的说明:CSharpBuilder

  

我想知道(例如)SCons给我的东西,而不是普通的Python脚本。

将scons视为一个库而不是一个程序。它为您提供了代码,可以防止您在没有它的情况下处理大量繁琐的事情。在我看来,对于任何类型的shell脚本来说,vanilla Python都不是最好的选择(不是它不能这样做)。

  

但问题是,批处理文件是邪恶的。

最后,批处理文件如果用于他们不适合处理的项目则是邪恶的。对于一个或两个文件项目,批处理文件就可以了。

答案 11 :(得分:0)

  

它可以运行MSBuild,复制文件,创建ZIP文件,运行一些测试,包括颠覆版本号等。

MSBuild和PowerShell可以通过相当简洁的简洁代码轻松完成所有这些工作。然后你就会坚持使用经理们喜欢的纯M $产品。否则我建议你不要只考虑其大型社区就可以看看Rake。它有一个很好的语法和铁红宝石支持(irake)。

说实话,除了您提到的最后一项任务外, 轻松 仅在MSBuild中完成。我建议你去其他地方之前先学习一下这些工具。

查看http://msbuildtasks.tigris.org/以了解MSBuild

的一些优点