Python 构建系统
各种类似于 Python 的 make
系统有哪些优缺点呢?
注意:我们在列表项的开头用 '(+)' 和 '(-)' 来分别表示优点和缺点。
到目前为止,我知道的有:
- buildit
- 之前叫做
pymake
- (-) 似乎已经过时了:最后一次发布是在2007年底
- 之前叫做
- zc.buildout
- (+) 截至2010年7月20日仍在活跃使用
- 使用类似于配置文件的语法,包含
[sections]
- (-) 似乎无法轻松将 Python 代码整合到配置文件中。
- 似乎非常强调与
.egg
文件的配合使用。
- scons
- (+) 截至2010年7月20日仍在活跃使用
- 配置文件是用纯 Python 编写的
- (+) 可以轻松将 Python 代码整合到配置文件中
- (-)? 使用 Python 编写配置文件可能会显得有些啰嗦
- waf
- (+)? Mark 说“优点和
scons
一样,但更快” - 有什么缺点吗?为什么还有人继续使用
scons
?
- (+)? Mark 说“优点和
3 个回答
-1
我大约在1.5到2年前使用过waf,当时它的文档非常少而且质量很差,这让它的使用变得很受限制。不过我已经有一段时间没用waf了,所以也许情况已经改善了。
2
以下是截至2015年5月31日,关于4种Python 3软件构建系统的状态。
- waf:
- (+) 最新版本是1.8.10,发布日期为2015年5月24日。
- (+) 支持Python 2.5到3.4的版本。
- https://waf.io/book/
- zc.buildout:
- (+) 最新发布版本:2.3.1,发布日期为2014年12月16日。
- (+) 支持Python 2.6到3.4的版本。
- https://pypi.python.org/pypi/zc.buildout
- scons:
- (-) 截至2014年9月27日,scons在迁移到Python 3的过程中遇到停滞,因为scons是由志愿者维护的项目。
- http://www.scons.org/RELEASE.txt
- buildit:
- (-) 不支持Python 3。
- (-) 截至2013年11月17日,最新版本是0.81。
- 开发状态 :: 3 - Alpha
- https://pypi.python.org/pypi/buildit/
4
waf的一个特点是,它需要被放到程序的源代码目录里。相比之下,Scons更像是make,它只需要在系统上安装一次,然后你在源代码目录里只需要一个数据文件(其实就是一个Python程序)。
因此,在Ubuntu/Debian系统上,Scons是可以打包的,而waf则不是。
在Scons中进行元编程(也就是编写程序来生成程序)来处理依赖关系图或者添加新的概念是可能的,但有点难。听说waf在这方面做得更好。
我以前用Scons做过很多项目,感觉挺不错的;不过在下一个编译的项目中,我可能会尝试一下waf。
你可以看看Samba对waf的使用经验。他们报告说,从autoconf切换到Waf后,rpaths设置得更正确了,并且通过每个程序只链接必要的目标文件一次,缩小了二进制文件的大小。