Поэзия управляет пакетом Python CLI

Я разрабатываю пакет Python с использованием Poetry со следующей структурой:

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

Весь код пакета находится внутри packagename.py, который импортируется в __init__.py,

Я хочу добавить CLI, и моя цель - выполнить следующее в командной строке:

<packagename> <packagefunction>

Для этого я использовал пакет click для Python и написал свой <packagefunction> внутри packagename.py как:

 @click.command()
 def packagefunction():

В настоящее время я добавил точки входа в файл конфигурации поэзии как:

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

и запустить:

poetry run <packagefunction>

которые исполняются отлично.

Однако я знаю, что это неправильный способ сделать это, и я хочу, чтобы CLI выполнялся с командами, показанными выше.

1 ответ

Решение

Чтобы получить командную строку, которую вы преследуете, вы можете использовать:

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>'
Другие вопросы по тегам