Когда дело доходит до распространения пакетов Python, двоичный формат Wheel стал стандартом благодаря своей эффективности и простоте. Этот пост в блоге проведет вас через процесс создания колеса для вашего пакета Python.
Предпосылки
Убедитесь, что у вас установлены последние версии setuptools, wheel и twine. Эти пакеты необходимы для создания и распространения пакетов Python. Вы можете установить или обновить их с помощью pip:
pip install --upgrade setuptools wheel twine
Настройка пакета Python
Ваш пакет должен иметь структуру, подобную этой:
mypackage/
mypackage/
__init__.py
module1.py
module2.py
setup.py
README.md
LICENSE
Файл setup.py имеет решающее значение, поскольку он содержит метаданные о вашем пакете. Вот базовый пример того, как это может выглядеть:
from setuptools import setup, find_packages
setup(
name="mypackage",
version="0.1",
packages=find_packages(),
)
Вы можете предоставить дополнительную информацию, такую как сведения об авторе, более подробное описание и классификаторы, которые предоставляют метаданные для PyPI.
Создание колеса
Традиционный метод
Как только ваш пакет настроен правильно, перейдите в каталог вашего пакета в терминале и выполните эту команду:
python setup.py bdist_wheel
Это создаст файл .whl в новом каталоге dist/. Это дистрибутив Wheel вашего пакета.
Строительство с поэзией
Poetry — это инструмент управления зависимостями для Python, упрощающий создание и распространение пакетов. Это устраняет необходимость в управлении файлами requirements.txt или setup.py, вместо этого используется файл pyproject.toml для управления всеми зависимостями и метаданными.
Poetry не только обрабатывает разрешение зависимостей и структуру пакетов, но также может относительно легко создавать и публиковать пакеты в PyPI. Это делает его универсальным инструментом как для создания пакетов Python, так и для управления ими.
Я не буду рассказывать, как начать работать с Поэзией, но я уверен, что вы разберетесь, так как это довольно просто. Давайте создадим наш пакет.
poetry build
Это создаст файл .whl в каталоге dist, который вы затем сможете распространять.
Загрузка вашего пакета в PyPI
Последним шагом является загрузка только что созданного файла Wheel в индекс пакетов Python (PyPI), чтобы его мог установить любой, кто использует pip.
Во-первых, вам необходимо зарегистрировать учетную запись на PyPI, если вы еще этого не сделали.
Затем вы можете использовать twine для загрузки пакета в PyPI:
twine upload dist/*
Эта команда запросит у вас имя пользователя и пароль PyPI, а затем загрузит все файлы дистрибутива в каталог dist/.
Загрузка с помощью Поэзии
Вот как загрузить пакет в PyPI с помощью Poetry:
Добавить PyPI в качестве репозитория
Poetry позволяет загрузить пакет в любой репозиторий Python, а не только в PyPI. Однако PyPI является репозиторием по умолчанию. Если вы хотите загрузить в другой репозиторий или в тестовый экземпляр PyPI для целей тестирования, вы можете добавить репозиторий с помощью следующей команды:
poetry config repositories.testpypi https://test.pypi.org/legacy/
Замените testpypi на имя вашего репозитория, а https://test.pypi.org/legacy/ на URL-адрес репозитория.
Опубликовать пакет
Чтобы опубликовать пакет в PyPI, выполните следующую команду:
poetry publish --build
Опция --build сообщает Poetry о необходимости сборки пакета перед его публикацией, поэтому вам не нужно запускать poetry build отдельно.
Когда вы запустите эту команду, вам будет предложено ввести имя пользователя и пароль PyPI. После того, как вы введете их, Poetry загрузит ваш пакет в PyPI.
Соглашение об именах колес
Соглашение об именах для файлов Python Wheel предназначено для кодирования метаданных о пакете в самом имени файла. Имя файла Wheel состоит из пяти компонентов, разделенных дефисами:
- Распространение: имя упакованного дистрибутива. Имя дистрибутива нормализуется путем преобразования всех символов в нижний регистр, преобразования символов подчеркивания в дефис и удаления любых других символов, отличных от буквенно-цифровых.
- Версия: версия дистрибутива, которая должна соответствовать стандартам, установленным PEP 440 для управления версиями пакетов Python.
- Тег сборки (необязательно). Это числовое значение, которое служит «номером сборки». Это необязательно и не часто используется.
- Тег Python. Этот тег указывает, с какими версиями Python совместим пакет. Вот некоторые примеры:
py3: совместимость с Python 3.cp38: совместимость с CPython 3.8.py2.py3: совместимость как с Python 2, так и с Python 3. - Тег ABI. Этот тег указывает на двоичный интерфейс приложения Python (ABI), с которым совместим пакет. Для чистых колес Python это часто устанавливается на
none. - Тег платформы. Этот тег указывает платформу, для которой предназначен пакет. Вот некоторые примеры:
any: не зависит от платформы (обычно для колес с чистым Python).win32: 32-разрядная версия Windows.manylinux1_x86_64: Linux с совместимостью с manylinux1, 64-разрядная версия.
Вот пример имени файла колеса: example_pkg-0.1-py3-none-any.whl. В этом случае:
example_pkg— это имя дистрибутива.0.1это версия.py3означает, что он совместим с Python 3.none— это тег ABI, указывающий на отсутствие конкретных требований ABI.any— это тег платформы, указывающий, что он не зависит от платформы.
Помните, что имя файла указывает на совместимость пакета, но для получения полной информации вам следует обратиться к документации или метаданным пакета.
Заключение
Поздравляем! Вы только что прошли путь создания и распространения пакета Python. Вы не только научились создавать колесо Python, используя традиционный метод setup.py, но также узнали, как упростить этот процесс с помощью менеджера пакетов Poetry.
С помощью Poetry вы можете управлять зависимостями, создавать пакеты, создавать колеса и даже публиковать их в PyPI — и все это с помощью одного инструмента. Это может упростить ваш рабочий процесс и упростить распространение ваших пакетов по всему миру.
Теперь любой может установить ваш пакет с помощью простой команды pip install mypackage независимо от того, создали ли вы его традиционным методом или с помощью Poetry.
Хотя поначалу эти процессы могут показаться сложными, после небольшой практики они станут второй натурой. Теперь вы вооружены знаниями, чтобы внести ощутимый вклад в экосистему Python, создавая инструменты, которые могут принести пользу питонистам по всему миру.
Помните, что экосистема Python постоянно развивается, как и ее инструменты. Продолжайте исследовать, продолжайте учиться и, самое главное, удачного кодирования!