Поэзия управляет пакетом Python CLI - PullRequest
2 голосов
/ 08 марта 2019

Я разрабатываю пакет 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 Ответ

2 голосов
/ 08 марта 2019

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

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>'
...