Рубрики
Без рубрики

Развивайте Python CLI с подкоманами, используя щелчок

Хотя уже есть отличные посты о разработке приложений CLI, используя библиотеку кликов Python Sh … Теги с Python, учебником, начинающим.

Хотя уже есть отличные посты о разработке приложений CLI с использованием Python’s Нажмите Библиотека, показывающая примеры настройки команд из одного файла Python, однако вы можете вместо этого хотеть организовать команды в своих собственных отдельных файлах Python.

У меня было подобное требование, создавая приложение CLI и провело довольно некоторое время в получении структуры, которую я хотел объединить и разрешить незначительные ошибки. В этом руководстве является попытка показать разработку успешного рабочего примера приложения CLI с отдельными файлами Python, организованной для каждой команды.

Для этого учебника мы разработаем простое приложение CLI, которое имеет несколько команд построить и Развертывание нравится:

$ python3 main.py
Usage: main.py [OPTIONS] COMMAND [ARGS]...

  CLI tool to manage full development cycle of projects

Options:
  --help  Show this message and exit.

Commands:
  build
  deploy
  1. Создайте новый каталог проекта со следующей структурой и пустыми файлами Python, как показано ниже:

    Вы можете создать отдельный файл Python внутри Команды DIR для каждой команды вы хотите разоблачить на ваш главный CLI.

  2. Установить Нажмите Библиотека Python использует это:

  3. Начнем с стартового кода main.py :

    📌 Обратите внимание, что у нас аннотированная функция стартера CLI () с @ click.group Указывает на то, что это будет группа команд.

  4. Убедитесь, что эта часть успешно работает, работая:

  5. Далее, давайте напишем код для построить Подкоманда в Команды/build.py :

    📌 Обратите внимание на эти точки перед продвижением вперед:

    • Мы определили функцию построить (докер) это аннотируется с @ click.command () Чтобы указать, что это команда.
    • Мы также определяем логический тип опции - проклассник для построить команда, значение которой передается на построить () функция. Вы можете определить дополнительные варианты здесь для построить Команда и напишите свою собственную логику для этой команды здесь.
  6. На данный момент мы создали группу (команды) в Main.py под названием «CLI» и отдельная команда «сборки», но еще не связали их вместе.

    Давайте добавим это построить Команда нашей главной группе: 6.1 Импортируйте команды/библиотека сборки в main.py :

    6.2. Добавить построить Команда к главной группе в main.py :

    📌 Примечание:

    • Мы выступили add_command () на CLI объект вместо Нажмите объект
    • Мы добавили build.build к CLI вместо строить
  7. Убедитесь, что теперь вы можете запустить построить Как подкоманда вашей основной программы:

📌 Если у вас есть рабочая структура в этот момент, вы можете легко выполнить аналогичный процесс для добавления новых подпространств в отдельные файлы Python под команмами/DIR или любым другим DIR.

Например, давайте добавим Развертывание Функциональность подкомана нашей главной программе CLI. Этот подкоманду должен разоблачить 2 варианта ( --env и --Коуд ) и подскажите пользователю вводить ввод во время отображения разрешенных значений и значение по умолчанию.

  1. Определите функциональность и доступные варианты для Развертывание подкоманды:

  2. Импортировать этот новый Развертывание Подкоманда к главной программе CLI:

  3. Добавить Развертывание Подкоманда к главной программе CLI:

  4. Убедитесь, что теперь вы можете запустить Развертывание подкоманды:

🏁 🏆 Надеюсь, вы нашли этот учебник полезным, и он помог вам реализовать рабочую структуру CLI с командами, организованными в отдельные файлы Python/Dir. Не стесняйтесь оставлять вопросы или отзывы в комментариях. 🔚

🛎 P.S.: Вот окончательная версия вышеуказанных файлов для справки:

main.py
import click

from commands import build
from commands import deploy


@click.group(help="CLI tool to manage full development cycle of projects")
def cli():
    pass


cli.add_command(build.build)
cli.add_command(deploy.deploy)

if __name__ == '__main__':
    cli()
Команды/build.py.
import click

@click.command()
@click.option('--docker', is_flag=True, help='Indicates the project should be built into docker image')
def build(docker):
    if docker:
        print(f'Building this repo into a docker image...')
    else:
        print(f'Building this repo using default method...')
Команды/Deploy.py.
import click

@click.command()
@click.option('--env', '-e', default="dev", type=click.Choice(['dev', 'stg', 'prd'], case_sensitive=False), prompt='Enter env name to deploy', help='Env to deploy')
@click.option('--cloud', '-c', default="aws", type=click.Choice(['aws', 'gcp', 'azure'], case_sensitive=False), prompt='Enter cloud to deploy to', help='Cloud to deploy to')
def deploy(env, cloud):
    print(f'Deploying current application artifact to {env} environment in {cloud} cloud...')

Оригинал: “https://dev.to/drcloudycoder/develop-python-cli-with-subcommands-using-click-4892”