Создание модуля в Python: шаг за шагом для REST API
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для того чтобы приступить к разработке пакета на языке Python, вам необходимо создать директорию, в которой будет находиться специальный файл __init__.py
. Этот файл позволит преобразовать созданную директорию в пакет Python, доступный для импорта. Всю свою программу на Python вы должны разместить в файлах с расширением .py
внутри созданной директории:
mymodule/
├── __init__.py
└── core.py
В самом файле core.py
можно размещать описанные вами функции или классы:
def high_five():
return "Дай пять!"
Для того чтобы экспортировать данные функции или классы, их следует указать в файле __init__.py
:
from .core import high_five
Теперь использование вашего пакета осуществляется следующим образом:
from mymodule import high_five
Для распространения своего пакета вам потребуется файл setup.py
, содержащий всю метаинформацию о вашем проекте. Чтобы опубликовать свой модуль, можно воспользоваться инструментами setuptools и twine.
Правильная структура файлов
Постарайтесь давать файлам модулей краткие имена в нижнем регистре. Связанные функции стоит располагать в одном и том же месте для удобства доступа. При больших объёмах кода в пакете, лучше обращаться к пространствам имен, чтобы структурировать код.
Зависимости и виртуальные среды
Перед публикацией пакета обязательно протестируйте его в изолированной виртуальной среде. Таким образом, вы сможете обнаружить скрытые зависимости, которые в последствии следует указать в файле setup.py
.
Лучшие практики сообщества
Поддерживайте свой репозиторий на GitHub в актуальном состоянии, используйте .gitignore
для исключения ненужных файлов, добавьте LICENSE.txt
для ясности условий использования, и не забывайте про README
, чтобы упростить пользователям работу с вашим модулем.
Контроль за кодом (модульное тестирование)
Необходимо проводить тестирование пакета в локальной среде и на тестовом репозитории PyPI перед его релизом. Используйте модульное тестирование, например, с помощью инструмента pytest для проверки корректности функций.
Визуализация
Представьте себе пакет на Python в виде сборки 🚗 автомобиля.
shell = __init__.py # 🐚 Кузов, образующий внешний вид авто.
Модули – это детали, из которых состоит автомобиль:
engine.py = Двигатель # 🚗💨
wheels.py = Колёса # 🚗🔄
seats.py = Сиденья # 🚗💺
Файл setup.py
– это важнейшая деталь сборки:
setup.py = Процедура сборки авто # 🚗🔧
Они все размещаются в рамках одной директории:
my_module/ # Ваш личный гараж
├── __init__.py # Основание авто
├── engine.py # Модуль двигателя
├── wheels.py # Модуль колёс
└── seats.py # Модуль сидений
setup.py # Конвейер сборки
Модуль – это часть авто, а вместе они образуют полный пакет.
Для пользователя
Стремитесь к тому, чтобы ваш пакет можно было установить с использованием команды pip install
. Корректное управление зависимостями и настройка исправного файла setup.py
облегчит процесс установки.
Лучшие практики
Следование конвенциям именования по стандарту PEP 8 позволит повысить читаемость кода, делая его понятным и доступным как для новичков, так и для опытных разработчиков.
Непрерывная интеграция и развертывание (CI/CD)
Рекомендуется настроить CI/CD, например, с использованием GitHub Actions, чтобы автоматизировать процесс кодирования и поддержки кода.
Полезные материалы
- Упаковка проектов Python – Руководство пользователя Python Packaging — Подробное руководство по упаковке и распространению Python-кода.
- Модули и пакеты Python – Введение – Real Python — Глубокое вникновение в работу модулей и пакетов на Python.
- GitHub – pypa/sampleproject — Пример проекта с учётом лучших практик Авторитета по упаковке Python.
- Добро пожаловать в Hitchhiker’s Guide to Packaging — Детальное руководство по упаковке проектов на Python.
- PEP 8 – Руководство по стилю кода Python — Советы, помогающие сделать ваш Python-код красивее.
- pytest: помогает писать лучшие программы — документация pytest — Рекомендации по тестированию вашего Python-кода с помощью pytest.
- Упаковка проектов Python – Публикация вашего проекта в PyPI — Инструкция по загрузке вашего пакета на PyPI.