命令行界面
目录
命令行界面¶
Dask 提供一个 dask
可执行文件作为命令行界面。Dask 的 CLI 设计为可扩展的,允许 Dask 生态系统中的其他项目(例如 distributed
)添加子命令。
扩展 Dask CLI¶
注意
本节旨在为希望将其库与 dask
CLI 集成的库作者提供信息。
第三方包可以通过 entry points 和 Click 扩展 dask
命令行工具。Dask 将发现注册在 dask_cli
命名空间下的作为 entry points 的 click.Command
和 click.Group
对象。下面你会找到两个示例,通过向项目添加 dask_cli
entry point 来增强 dask
CLI。
Click 提供了编写命令的极佳文档;关于 entry points 的更多文档可以在以下位置找到:
示例:PEP-621¶
自 PEP-621 以来,如果启动一个新项目,向 Python 项目添加 entry point 的标准方法是在 pyproject.toml
文件中使用 [project.entry-points]
表格。任何兼容 PEP-621
的 project
配置的 Python 构建系统都应该支持此方法。Hatch、Flit 和 setuptools(版本 61.0.0 或更高)是三个使用 [project.entry-points]
并兼容 PEP-621 的构建系统示例。
例如,如果你的项目名为 mypackage
,并且在 mypackage
命名空间下包含一个 cli.py
模块,其内容如下:
# in the file mypackage/cli.py
import click
@click.command(name="mycommand")
@click.argument("name", type=str)
@click.option("-c", "--count", default=1)
def main(name, count):
for _ in range(count):
click.echo(f"hello {name} from mycommand!")
你可以通过添加到 pyproject.toml
来创建一个可被 Dask 发现的 entry point:
[project.entry-points."dask_cli"]
mycommand = "mypackage.cli:main"
安装 mypackage
后,mycommand
子命令应该对 dask
CLI 可用。
$ dask mycommand world
hello world from mycommand!
$ dask mycommand user -c 3
hello user from mycommand!
hello user from mycommand!
hello user from mycommand!
示例:setup.cfg 和 setup.py¶
注意
如果你正在启动一个新项目,Python 打包机构 (PyPA) 建议使用 PEP-621,此处提供的 setuptools 说明适用于现有项目。
如果你的项目已经使用带有 setup.cfg
文件和/或 setup.py
文件的 setuptools
,我们可以为上一节中介绍的相同 mycommand.cli:main
函数创建一个 entry point。如果使用 setup.cfg
,可以通过向文件中添加以下代码块来注册 entry point:
[options.entry_points]
dask_cli =
mycommand = mypackage.cli:main
或者可以直接在 setup.py
中注册 entry point,使用:
from setuptools import setup
setup(
...
entry_points="""
[dask_cli]
mycommand=mypackage.cli:main
""",
)