诗歌管理python包CLI

Poetry manage python package CLI

我正在使用具有以下结构的 Poetry 开发一个 Python 包:

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

所有的包代码都在packagename.py里,在__init__.py里导入。

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

<packagename> <packagefunction>

为此,我使用了 Python 的点击包,并将我的 <packagefunction> 写在 packagename.py 中:

 @click.command()
 def packagefunction():

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

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

和运行:

poetry run <packagefunction>

完美执行。

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

要实现你后面的命令行,可以使用:

click.Group()

import click

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

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

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

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

Poetry scripts

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

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

而不是:

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