make样式的python构建工具
mkcode的Python项目详细描述
mkcode是一个执行make样式开发任务的系统。它提供依赖项的执行、用于调用任务的控制台脚本,以及在setup.py中找到的distutils命令的自动发现。它不提供编译语言或复杂嵌套构建的工具(请查看scons或zc.buildout)。
任务被定义为普通的python函数,用特殊的@taskdecorator修饰。函数名变为任务名,可以通过mk脚本从命令行调用该任务。
项目根目录中名为mkfile.py的文件包含所有任务定义。调用mk脚本时,将导入任务。
下面是一个示例mkfile.py:
from mkcode import * @task def clean(): """ Clean out all .pyc files in sub-directories """ # This is *great* for getting rid of those stale .pyc files # that cause mysterious test failures. for pyc in path().relpath().walkfiles('*pyc'): print 'Removing:', pyc pyc.remove() setup = namespace('setup') # the distutils commands from 'setup.py' # re-define the 'test' target task('test', [clean, setup.test])
下面是您如何运行我们的新testtarget:
$ mk test
我们仍然可以使用setupnamepace:
$ mk setup.test
有关更多任务示例,请参见发行版基本目录中的mkfile.py。
名称空间
任务可能属于命名空间。通过将名称空间和任务名称与点连接来调用名称空间任务,就像您在引用python对象属性一样:
# call the 'bar' task in the 'foo' namespace $ mk foo.bar
有关如何定义和填充名称空间的示例,请参见Jeff Shell’s post。
setuptools集成
由setuptools导出的所有命令都可以在setup命名空间中使用。但是,setuptools的命令也可以从根命名空间调用-调用它们不需要命令的前缀为setup.,因此以下三个命令是等效的:
$ mk develop $ mk setup.develop $ python setup.py develop
其他注意事项
额外的命令行参数传递给它们的目标。以下两个命令是等效的:
$ mk rotate --help $ python setup.py rotate --help
mk脚本使用许多命令行开关,特别是列出所有已注册任务的-T,运行任务及其依赖项而不执行任务的-n,以及-f,这允许您指定另一个mkfile。
已知问题
程序在定义自己命令的普通setup.py文件上失败。python映像库pil就是一个例子。
当有新的包版本时,mk develop命令在第一次调用时可能会阻塞。同时,可以回到setuptools方法。
致谢
这个节目深受Jeff Shell’s in-house build system的启发。jeff提供的目标示例应该可以在这个系统中工作,而无需做任何修改。
jason orendorff优秀的path模块大大增强了路径支持。我强烈建议在python工作的all中使用它。