欢迎来到 Invoke!¶
Invoke 是 Python(2.7 和 3.4+ 版本)库,用于管理面向 shell 的子进程,并将可执行的 Python 代码组织成可通过命令行调用(CLI)的任务。它从多种工具(如 make
/rake
、Fabric 1.x 等)中汲取灵感,提供了一套强大且简洁的功能集。
要了解此版本 Invoke 的新特性,请参阅 更新日志。
项目维护者在其网站上保留了一份 路线图。
这个网站涵盖了 Invoke 的项目信息,例如变更日志、贡献指南、开发路线图、新闻/博客等。详细的使用方法和 API 文档可以在代码文档站点找到,docs.pyinvoke.org。
请看下面的高层次介绍,或通过左边的导航了解网站的其他内容。
什么是 Invoke?¶
就像 Ruby 的 Rake 工具和 Invoke 自己的前身 Fabric 1.x 一样,它为运行 shell 命令和定义/组织来自
tasks.py
文件的任务函数提供了一个干净的、高水平的 API:from invoke import task @task def clean(c, docs=False, bytecode=False, extra=''): patterns = ['build'] if docs: patterns.append('docs/_build') if bytecode: patterns.append('**/*.pyc') if extra: patterns.append(extra) for pattern in patterns: c.run("rm -rf {}".format(pattern)) @task def build(c, docs=False): c.run("python setup.py build") if docs: c.run("sphinx-build docs docs/_build")
从 GNU Make 继承了对常见模式的最小样板和能够在单个调用中运行多个任务的能力:
$ invoke clean build
Fabric 1.x 认为命令行方法是默认的使用模式,而 Invoke(以及建立在它之上的工具)同样可以嵌入你自己的 Python 代码或 REPL 中:
>>> from invoke import run >>> cmd = "pip install -r requirements.txt" >>> result = run(cmd, hide=True, warn=True) >>> print(result.ok) True >>> print(result.stdout.splitlines()[-1]) Successfully installed invocations-0.13.0 pep8-1.5.7 spec-1.3.1
跟随大多数 Unix CLI 应用程序的步伐,它提供了一种传统的基于标志的命令行解析风格,从任务签名中推导出标志名称和值类型(当然是可选的!)
$ invoke clean --docs --bytecode build --docs --extra='**/*.pyo' $ invoke clean -d -b build --docs -e '**/*.pyo' $ invoke clean -db build -de '**/*.pyo'
像它的许多前辈一样,它也提供了先进的功能–命名空间、任务别名、前后钩、并行执行等等。