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

Python是这个钉子的合适锤子吗?(构建脚本),python,build-process,build-automation,Python,Build Process,Build Automation,目前我正在使用Windows批处理文件来构建我的软件。它可以运行MSBuild、复制文件、创建ZIP文件、运行一些测试,包括subversion版本号等 但问题是,批处理文件是邪恶的。所以我想换个更好的。我计划用Python重新创建我的构建脚本。这是明智的选择吗?那么所有那些构建系统呢,比如Ant、SCons、Maven、Rake等等。使用其中任何一个都是更好的选择吗 注意:我不打算替换我的Visual Studio解决方案/项目文件。我只想编写创建软件版本所需的所有其他脚本 编辑:我有很好的理

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

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

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


编辑:我有很好的理由离开批处理,这不是我的问题所在。我想知道(例如)相对于普通的Python脚本,SCons给了我什么。

我在其他地方看到过用于构建发行版的Python脚本,所以它不会很糟糕。实际上,我个人使用过perl脚本来自动构建发布。我想任何脚本语言都可以很容易地自动化这个过程。如果这很容易实现(而且可能比批处理脚本更好),为什么不试试呢?

在您提到Python和SCON时,我会说选择SCON。毕竟是Python。是的,以上任何一项都比手工构建脚本更好。

我个人认为,考虑到这一点,脚本是最后的选择

  • 只需做一点工作,就可以通过使用其他组件扩展MSBuild来为您完成所有这些事情
  • 类似于MSBuild的第三方等价物也可以做同样的事情
  • 像这样的整个工具也可以做同样的事情,并且更容易配置和扩展
但是,如果我不得不采用脚本编写方式,我会使用Powershell,原因如下:

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

对于一个用Python编写脚本的工具,我碰巧认为它是一个比SCON更容易管理和更灵活的构建自动机。与SCON不同,Paver是为管理和分发软件项目而设计的大量不编译程序的任务。批处理文件并不是邪恶的-它们实际上已经从command.com的大脑死亡时代走了很长一段路。现在,命令语言可以很有表现力,只是需要你花点功夫来学习它

除非您的构建脚本存在无法修复的实际问题(如果是这样的话,这是您应该问的问题,而不是含糊其辞的“最好的替代方案是什么?”:-),否则我的方法是坚持现有的


对我来说,一种模糊的邪恶感并不是我浪费精力去“修复”那些没有坏掉的东西的理由。除非有一个明显的优势来改变(这是一个不太坏的事情),否则这将是徒劳的。

< P>你可以为你已经安装的微软NMAKE工具创建自定义的Mag文件。使用这样的工具(scon、Maven等属于同一类)可以提供比常规脚本多得多的功能


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

Python非常可移植。SCons经过现场测试,性能可靠。鉴于你所知道的(从你所解释的),为什么还要问这个问题

如果您要维护某个东西,那么这不仅仅是让它构建,还需要向用户解释为什么它无法构建,这在帮助用户自助的同时为您节省了大量非常令人沮丧的问题

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


所以,我的回答是,您回答了自己的问题:)

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


  • 它已经定义了任务,您所需要做的就是编写XML并将其指向正确的位置。如果您与不懂python的人一起工作,那么XML可能比学习一门新语言更不可怕
  • NAnt被设计为在windows.Net环境中工作,因此它已经可以执行MSBuild和NUnit任务
  • 如果您已经在用C#编写,如果您需要扩展NAnt来完成新任务,那么您就不会在项目中添加其他语言
  • 您可以挂接到(用于连续构建)。我认为这是你使用NAnt的主要原因
这取决于您的软件使用的技术。如果你正在构建C++程序,我可能会说毫无疑问地去搜索SCONS(除非你有奇怪的要求,SCONS不能满足)。另一方面,考虑C~(?):< /P>的指令。 我想知道(例如)相对于普通Python脚本,SCons给了我什么

可以把scons看作是一个图书馆而不是一个程序。它为您提供了一些代码,这些代码可以防止您在没有它的情况下不得不处理的大量繁琐工作。在我看来,对于任何类型的shell脚本来说,vanilla Python都不是最好的选择(并不是说它做不到)

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


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

为什么要使用python?如果您的构建脚本没有损坏,请不要修复它。如果您在更新它以处理项目的新分支时遇到问题,那么您可能需要考虑重写它。虽然像NANT或MSBuild这样的工具可以完成这项工作,但我不会使用Python。我愿意