9

我正在使用 Poetry 开发一个 Python 包,其结构如下:

/packagename
 /packagename
  /tests
   __init__.py
   test_packagename.py
  __init__.py
  packagename.py
pyproject.toml

所有的包代码都在 packagename.py 中,它是在 .py 文件中导入的__init__.py

我想添加一个 CLI,我的目标是在命令行中执行以下命令:

<packagename> <packagefunction>

为此,我使用了 Python 的 click 包,并在<packagefunction>里面写了packagename.py

 @click.command()
 def packagefunction():

目前,我已将入口点添加到诗歌配置文件中:

[tool.poetry.scripts]
<packagefunction> = '<packagename>:<packagefunction>'

并运行:

poetry run <packagefunction>

完美执行。

但是,我知道这不是正确的方法,我希望 CLI 使用上面显示的命令执行。

4

1 回答 1

15

要实现您所追求的命令行,您可以使用:

click.Group()

import click

@click.group()
def main():
    """packagename cli"""

然后要使用该组,您可以使用@main.command()如下装饰器:

@main.command()
def packagefunction():
    """packagefunction subcommand"""

而不是@click.command()装饰器。

诗歌剧本

要有诗歌安装packagename命令并调用模块main中的组 packagename

[tool.poetry.scripts]
# command_name = module_for_handler : function_for_handler
<packagename> = '<packagename>:<main>'

代替:

[tool.poetry.scripts]
<packagefunction> = '<packagename>:<packagefunction>'
于 2019-03-08T15:05:29.190 回答