Поэзия управляет пакетом 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>'