Поэзия управления пакетом Python с интерфейсом командной строки

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

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

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

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

<packagename> <packagefunction>

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

 @click.command()
 def packagefunction():

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

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

и запустите:

poetry run <packagefunction>

которые отлично работают.

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


person André Guerra    schedule 08.03.2019    source источник


Ответы (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>'
person Stephen Rauch    schedule 08.03.2019