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中使用它。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将微调器数据传递到其他字段   Java两个类我需要main方法的帮助   java如何在引入新警告时使构建失败   使用ARGB for google circle的java出错   java如何从一个类调用另一个类   java减少垃圾收集中的暂停   java tomcat上下文异常与jdbc池   java在JDK Compliance eclipse中指定次要版本   java如何在从Spark消费Kafka时获取偏移量id,将其保存在Cassandra中并使用它重新启动Kafka?   Apache Spark,带有自定义接收器的Java流挂起   java在将SQL查询重写为HQL查询时遇到问题   java如何调整JFrame和JInternal框架的屏幕大小?   带副标题和数据的java表   java如何在绑定到JSON的对象中定义列表?   带H:MM:SS的爪哇天文钟   JAVA:使用InputStreamReader打开并读取文件