Часто в проектах на Python мы используем внешние библиотеки — уже готовые скрипты с нужными нам функциями, которые упрощают разработку. Теперь настало время сделать свою первую библиотеку на Python с нуля. Есть несколько способов собрать свою библиотеку — и все они рабочие. Мы выбрали способ, который рекомендует Гвидо ван Россум — автор языка Python, но вы можете выбрать любой другой подход. ## Подготовка Чтобы сборка библиотеки прошла без проблем, обновим менеджер пакетов pip. Для этого в командной строке выполним команду: ```markup pip install --upgrade pip ``` Теперь установим пакет twine — он нам поможет опубликовать свою библиотеку в сети, чтобы её мог установить любой желающий: ```markup pip install --upgrade twine ``` Затем поставим `hatchling` — пакет для сборки серверной части библиотеки: ```markup pip install hatchling ``` И наконец, установим пакет `build`, чтобы создать загрузочные архивы с нашей библиотекой: ```markup pip install --upgrade build ``` ## Структура библиотеки Библиотека в Python — это не просто один скрипт, а целый проект, в котором есть много разных файлов, каждый из которых отвечает за что-то своё. Первое, что делаем, — создаём папку `src`, в которой будет лежать наша новая библиотека. После этого внутри этой папки создаём ещё одну — с именем создаваемой библиотеки. Как мы назовём эту вложенную папку, так и будет называться наша библиотека. Для проекта мы выбрали название `beginning_package`. Теперь внутри папки с названием создаём два файла: - __init__.py — файл, который покажет компьютеру, что beginning_package — это не просто папка, а целый модуль с определённой функциональностью; - main.py — тут будет код нашей библиотеки. Теперь делаем остальной обвес и внутри основной папки создаём такое: - папку tests — если к библиотеке делаются тесты, они отправляются сюда. У нас их пока не будет, но папка, даже пустая, всё равно нужна, таковы правила; - LICENSE — файл с лицензией. Расширения нет, только имя; - pyproject.toml — отвечает за конфигурацию и серверную часть библиотеки; - README.md — информация о библиотеке: что она делает, зачем нужна и какие у неё особенности. В итоге по структуре должно получиться что-то вроде этого: ![Тут ещё есть папка venv для виртуального окружения, но нам она сегодня не понадобится](https://thecode.media/wp-content/uploads/2024/04/unnamed-3.png) Тут ещё есть папка venv для виртуального окружения, но нам она сегодня не понадобится ## Оформляем лицензию и файл README.md Наша библиотека будет относиться к свободному ПО, поэтому в файл с лицензией мы вставляем стандартный текст MIT License. В первой строке указываем копирайт и название проекта: Текст лицензии ![Оформляем лицензию и файл README.md](https://thecode.media/wp-content/uploads/2024/04/unnamed-1-1.png) Точно так же заполняем файл README.md. Обычно здесь показывают, какие функции доступны в пакете, причём здесь уже можно использовать маркдаун для оформления текста. У нас учебная библиотека, поэтому сделаем максимально простое описание: ```markup This library is not that useful. Perhaps someday it will become great. ``` (Это не очень полезная библиотека. Возможно, когда-нибудь она станет лучше) ![Оформляем лицензию и файл README.md](https://thecode.media/wp-content/uploads/2024/04/unnamed-2-1.png) ## Заполняем pyproject.toml Рyproject.toml — это файл, который отвечает за служебную часть библиотеки: как она называется, какая версия, какая версия Python нужна, по какой лицензии распространяется и так далее. Когда мы хотим установить новую библиотеку, система сначала смотрит в этот файл и проверяет, соответствует ли ваша версия Python той, что нужна для работы. Файл состоит из блоков, каждый из которых отвечает за что-то своё. Начнём с блока `build-system` — он отвечает за параметры сборки загрузочного архива. В нашем проекте за серверную часть отвечает `Hatchling`, поэтому указываем его: ```python [build-system] requires = ["hatchling"] build-backend = "hatchling.build" ``` Python Copy Дальше идут основные параметры проекта: название, выпуск, авторы, описание, имя файла readme, требования к версии Python, язык программирования, тип лицензии и совместимость с ОС: ```python [project] name = "" version = "0.0.1" authors = [ { name="", email="" }, ] description = "" readme = "README.md" requires-python = ">=3.10.0" classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ] ``` Python Copy В конце можно добавить разные ссылки, например, на репозиторий в GitHub, домашнюю страницу проекта или на дополнительные материалы: ```python [project.urls] Homepage = "" Issues = "" ``` Python Copy ## Пишем библиотеку В папке с библиотекой два файла — `__init.py__` и `main.py`. Файл `__init__.py` можно оставить пустым — он нужен для того, чтобы сборщик понял, что это именно цельный проект и его нужно собрать из других файлов в той же папке. В `main.py` пишем сам код библиотеки. Так как это самая первая и учебная наша библиотека, сделаем там только одну функцию с приветствием: ```python def greeting(): return "Hello, I'm your first library!" ``` Python Copy ## Создаём загрузочные архивы Цель этого этапа — собрать и подготовить библиотеку к загрузке в менеджер пакетов `pip`, откуда каждый сможет её установить. Для этого открываем командную строку, переходим в папку с проектом и собираем архив: ```markup py -m build ``` ![Пишем и публикуем свою первую библиотеку для Python](https://thecode.media/wp-content/uploads/2024/04/unnamed-3-1.png) Если в проводнике мы посмотрим на структуру папок, то увидим, что там появилась новая папка — `dist`, в которой и хранятся наши подготовленные для загрузки архивы: ![Пишем и публикуем свою первую библиотеку для Python](https://thecode.media/wp-content/uploads/2024/04/unnamed-4-1.png) Заглянем внутрь: ![Пишем и публикуем свою первую библиотеку для Python](https://thecode.media/wp-content/uploads/2024/04/unnamed-5-1.png) ## Создаём токен для подписи библиотеки PyPi — это хранилище открытого программного обеспечения для Python. Чтобы опубликовать там библиотеку, нужно иметь аккаунт и получить уникальный API-токен. Для этого заходим на официальный сайт [pypi.org](https://pypi.org/), заводим новый аккаунт, привязываем Гугл-аутентификатор для безопасности и переходим [в настройки аккаунта](https://pypi.org/manage/account/). Там прокручиваем страницу вниз до блока API tokens: