Я уверен, что вы раньше использовали интерфейс командной строки (CLI). Работать с CLI всегда весело, потому что вы как будто отдаете команду своему компьютеру. CLI - это простой текстовый интерфейс, в котором вы даете команды в текстовой форме для выполнения определенной задачи.

Когда вы вводите команду, CLI обрабатывает ее соответствующим образом, а затем выводит результат на том же экране. Если вы знакомы с командами Unix, то знаете, как они работают. Другие примеры, такие как Git, Curl и многие другие.

Я использовал библиотеку Python Click, чтобы создать интерфейс командной строки. В Python есть и другие библиотеки, но среди прочих я считаю Click лучше. Потому что он использует декоратор для создания команд и позволяет правильно размещать команды. Но эта функция дает вам один недостаток: вы не можете слишком сильно настраивать страницы справки. Прочтите Документацию для получения дополнительной информации о Click.

Этот интерфейс командной строки представляет собой простой инструмент для доступа к Github API. Вы можете получить такую ​​информацию, как информация о пользователе, список репозиториев и какие языки использовал пользователь в каждом репозитории. Созданный мной интерфейс командной строки уже находится на Github, а также загружен в Индекс пакетов Python. Его зовут Гитло. В этом посте я объясню процесс создания интерфейса командной строки на Python, а также как поместить его в указатель пакетов Python. Я буду использовать Python3 для создания этого инструмента.

Доступ к данным Github

Мне нужны были данные для создания интерфейса командной строки, но я не понимал, как мне это сделать. У Github есть общедоступный API, поэтому вам не нужен ключ API для его использования. Вот ссылка на Github Rest API. Вы найдете подробное объяснение того, как можно использовать данные Github. Ниже вы можете увидеть, как я получаю данные пользователя.

Теперь я знаю, что данные, которые мне нужны, есть, но как я могу использовать эти данные для создания интерфейса командной строки. Я начал искать в Интернете, как получить данные с помощью API в Python. Затем я узнал о библиотеке Python под названием Запросы, которая помогает вам отправлять HTTP-запросы.

Прежде чем начать, давайте настроим виртуальную среду для создания интерфейса командной строки. Сначала я создаю папку с именем gitlo, а затем меняю каталог на gitlo. После этого я создаю виртуальную среду под названием myvenv.

~$ mkdir gitlo
~$ cd gitlo
~/gitlo$ python3 -m venv myvenv

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

Activating the virtual environment
~/gitlo$ source myvenv/bin/activate
(myvenv) ~/gitlo$ 
Installing the libraries
(myvenv) ~/gitlo$ pip install requests
(myvenv) ~/gitlo$ pip install click

Таким образом, структура проекта будет такой: будет родительская папка с именем gitlo, а в этой папке будут два файла. один - gitlo.py, а другой - файл setup.py.

-gitlo
|-- gitlo.py
|-- setup.py

Основной код будет в файле gitlo.py, а файл setup.py поможет нам сделать его командной строкой и пакетом Python.

gitlo.py

  • Сначала я импортировал библиотеки python для щелчков и запросов. Теперь давайте разберемся, как работает клик. Clicks использует декораторы для создания команд. Если вы используете декораторы click.command () для какой-либо функции, она начнет работать как команда.
  • Но здесь я использовал концепцию вложенных команд библиотеки кликов. Я использовал декоратор click.group () для создания нескольких подкоманд. Этот декоратор применяется к функции cli, поэтому теперь cli.command () можно использовать для выполнения нескольких команд.
  • Строка документации в функции cli - это текст справки. когда кто-то напишет gitlo --help, этот текст появится в терминале.
  • В пользовательской функции сначала мы используем два декоратора; один - cli.command () для создания подкоманды, а другой - click.argument () для передачи аргументов в командах.
  • Данные, которые мы получаем с помощью библиотеки запросов, имеют формат JSON. Итак, существует много пар ключ-значение, как вы можете видеть на изображении выше, в котором мы используем команду curl для просмотра информации о пользователе.
  • Но я хотел показать только имя, репозитории и поле биографии, поэтому напечатал только это поле.

setup.py

Файл Setup.py необходим, потому что он помогает в первую очередь сделать команду исполняемой и поместить ее в индекс пакета Python.

Здесь я определил некоторые параметры в функции настройки. Параметр entry_points отвечает за выполнение команды. Сценарий, который должен быть сгенерирован, находится перед знаком равенства, а после знака равенства - путь импорта, за которым следует двоеточие с командой Click.

  • Я также добавляю в проект файлы README.rst и LICENSE. Файл Readme - это описание инструмента. Классификаторы сообщают некоторые дополнительные метаданные о пакете. В этом случае пакет совместим только с Python3 и находится под лицензией MIT.
  • Теперь произойдет волшебство.
(myvenv) ~/gitlo$ pip install --editable .
  • Теперь команда gitlo доступна в командной строке. Теперь, если я напишу gitlo user <username>, будет указано имя, количество репозиториев и биография пользователя.
(myvenv) ~/gitlo$ gitlo user siddharthshringi
Name: Siddharth Shringi, Repos: 18, Bio: Python Developer | ML Enthusiast

Включение индекса пакета Python

Я добавил в инструмент еще две команды. Одна команда - получить список репозиториев, а другая - узнать процентное соотношение языков для каждого репозитория. Вы можете увидеть их в репозитории Github. Теперь я покажу вам, как я поместил его в индекс пакетов Python.

  • Теперь, чтобы поместить этот интерфейс командной строки в Python Package Index, я должен сгенерировать пакеты распространения, которые представляют собой архивы, которые можно установить через pip.
  • Сначала убедитесь, что установочные инструменты и колесо установлены в обновленной версии.
(myvenv) ~/gitlo$ python3 -m pip install --user --upgrade setuptools wheel
  • Теперь установлена ​​последняя версия setuptools и wheel, поэтому мне нужно выполнить еще одну команду для создания пакетов распространения.
(myvenv) ~/gitlo$ python3 setup.py sdist bdist_wheel
  • Эта команда создаст каталог с именем dist, а в dist будет два файла, которые будут загружены в Python Package Index.
dist\
--| gitlo-1.0.1-py3-none-any.whl
--| gitlo-1.0.1.tar.gz

Следующим шагом будет создание учетной записи на сайте pypi. После этого всего два шага от загрузки пакета в Python Package Index.

  • Сначала необходимо установить шпагат, а затем шпагат сделает остальную работу.
(myvenv) ~/gitlo$ python3 -m pip install --user --upgrade twine
(myvenv) ~/gitlo$ twine upload --repository-url https://upload.pypi.org/legacy/ dist/*
Enter your username: <username>
Enter your password:

Gitlo теперь представляет собой пакет Python, который можно установить через pip. Для получения дополнительной информации об упаковке и распространении проектов прочтите эту документацию.

pip install gitlo

Один забавный факт, которым я хотел бы поделиться, что когда я загружал этот пакет в pypi, я не смог этого сделать. Изначально я назвал его Gitpy, но забыл проверить, есть ли он уже на сайте или нет. Мне потребовался один день, чтобы понять, что пакет с таким именем уже существует на сайте.

Поэтому я изменил имя на Gitlo и снова загрузил его. Это была глупая ошибка, но мне понравился процесс создания моего первого пакета python.

Подпишитесь на меня в Twitter, чтобы узнать больше.