从模板生成文本文件的构建方法
z3c.recipe.template的Python项目详细描述
简介
此配方可用于从(文本)生成文本文件 模板。与collective.recipe.template不同,您还可以 指定输出文件的路径,如果 不存在。
一个简短的例子:
[buildout] parts = zope.conf [message] recipe = collective.recipe.template input = templates/message.in output = ${buildout:parts-directory}/etc/message mymessage = Hello, World!
在模板中,可以使用与可以使用的完全相同的变量 在构建配置中。例如,输入文件可以如下所示:
My top level directory is ${buildout:directory} Executables are stored in ${buildout:bin-directory}
作为构建语法的扩展,您可以从 当前的构建部分直接。例如:
My message is: ${mymessage}
为什么要另一个模板配方?
iw.recipe.template和inquant.recipe.textfile都声称要执行 同样的事情。我发现他们是无证的,而且真的很危险 世界通用,而且都不在我可以修复它们的公共存储库中。在 此外,此实现利用构建变量替换 代码,使它更简单。
collective.recipe.template实际上不支持创建 要生成(和测试)的目标文件的路径。
详细说明
从模板创建文件
让我们创建一个最小的buildout.cfg文件:
>>> write('buildout.cfg', ... ''' ... [buildout] ... parts = template ... offline = true ... ... [template] ... recipe = z3c.recipe.template ... input = template.in ... output = template ... ''')
我们创建一个模板文件:
>>> write('template.in', ... '''# ... My template knows about buildout path: ... ${buildout:directory} ... ''')
现在我们可以运行buildout:
>>> print system(join('bin', 'buildout')), Installing template.
模板确实已创建:
>>> cat('template') # My template knows about buildout path: .../sample-buildout
变量buildout:directory也被路径替换。
在变量路径中创建模板
让我们创建一个最小的buildout.cfg文件。这次输出应该 在变量路径中发生:
>>> write('buildout.cfg', ... ''' ... [buildout] ... parts = template ... offline = true ... ... [template] ... recipe = z3c.recipe.template ... input = template.in ... output = ${buildout:parts-directory}/template ... ''')
现在我们可以运行buildout:
>>> print system(join('bin', 'buildout')), Uninstalling template. Installing template.
模板确实已创建:
>>> cat('parts', 'template') # My template knows about buildout path: .../sample-buildout
创建缺少的路径
如果在不存在的路径中创建输出文件, 然后将为我们创建丢失的项目:
>>> write('buildout.cfg', ... ''' ... [buildout] ... parts = template ... offline = true ... ... [template] ... recipe = z3c.recipe.template ... input = template.in ... output = ${buildout:parts-directory}/etc/template ... ''') >>> print system(join('bin', 'buildout')), Uninstalling template. Installing template.
还支持创建多个子目录:
>>> write('buildout.cfg', ... ''' ... [buildout] ... parts = template ... offline = true ... ... [template] ... recipe = z3c.recipe.template ... input = template.in ... output = ${buildout:parts-directory}/foo/bar/template ... ''') >>> print system(join('bin', 'buildout')), Uninstalling template. Installing template. >>> cat('parts', 'foo', 'bar', 'template') # My template knows about buildout path: .../sample-buildout
当输出路径发生更改时,将删除旧路径 卸载时。因此,上面创建的etc/目录 现在消失:
>>> ls('parts') d foo