Хотя уже есть отличные посты о разработке приложений 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
Создайте новый каталог проекта со следующей структурой и пустыми файлами Python, как показано ниже:
Вы можете создать отдельный файл Python внутри
Команды
DIR для каждой команды вы хотите разоблачить на ваш главный CLI.Установить
Нажмите
Библиотека Python использует это:Начнем с стартового кода
main.py
:📌 Обратите внимание, что у нас аннотированная функция стартера
CLI ()
с@ click.group
Указывает на то, что это будет группа команд.Убедитесь, что эта часть успешно работает, работая:
Далее, давайте напишем код для
построить
Подкоманда вКоманды/build.py
:📌 Обратите внимание на эти точки перед продвижением вперед:
- Мы определили функцию
построить (докер)
это аннотируется с@ click.command ()
Чтобы указать, что это команда. - Мы также определяем логический тип опции
- проклассник
дляпостроить
команда, значение которой передается напостроить ()
функция. Вы можете определить дополнительные варианты здесь дляпостроить
Команда и напишите свою собственную логику для этой команды здесь.
- Мы определили функцию
На данный момент мы создали группу (команды) в Main.py под названием «CLI» и отдельная команда «сборки», но еще не связали их вместе.
Давайте добавим это
построить
Команда нашей главной группе: 6.1 Импортируйте команды/библиотека сборки вmain.py
:6.2. Добавить
построить
Команда к главной группе вmain.py
:📌 Примечание:
- Мы выступили
add_command ()
наCLI
объект вместоНажмите
объект - Мы добавили
build.build
к CLI вместостроить
- Мы выступили
Убедитесь, что теперь вы можете запустить
построить
Как подкоманда вашей основной программы:
📌 Если у вас есть рабочая структура в этот момент, вы можете легко выполнить аналогичный процесс для добавления новых подпространств в отдельные файлы Python под команмами/DIR или любым другим DIR.
Например, давайте добавим Развертывание
Функциональность подкомана нашей главной программе CLI. Этот подкоманду должен разоблачить 2 варианта ( --env
и --Коуд
) и подскажите пользователю вводить ввод во время отображения разрешенных значений и значение по умолчанию.
Определите функциональность и доступные варианты для
Развертывание
подкоманды:Импортировать этот новый
Развертывание
Подкоманда к главной программе CLI:Добавить
Развертывание
Подкоманда к главной программе CLI:Убедитесь, что теперь вы можете запустить
Развертывание
подкоманды:
🏁 🏆 Надеюсь, вы нашли этот учебник полезным, и он помог вам реализовать рабочую структуру 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”