Когда дело доходит до распространения пакетов 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 состоит из пяти компонентов, разделенных дефисами:

  1. Распространение: имя упакованного дистрибутива. Имя дистрибутива нормализуется путем преобразования всех символов в нижний регистр, преобразования символов подчеркивания в дефис и удаления любых других символов, отличных от буквенно-цифровых.
  2. Версия: версия дистрибутива, которая должна соответствовать стандартам, установленным PEP 440 для управления версиями пакетов Python.
  3. Тег сборки (необязательно). Это числовое значение, которое служит «номером сборки». Это необязательно и не часто используется.
  4. Тег Python. Этот тег указывает, с какими версиями Python совместим пакет. Вот некоторые примеры:
    py3: совместимость с Python 3.
    cp38: совместимость с CPython 3.8.
    py2.py3: совместимость как с Python 2, так и с Python 3.
  5. Тег ABI. Этот тег указывает на двоичный интерфейс приложения Python (ABI), с которым совместим пакет. Для чистых колес Python это часто устанавливается на none.
  6. Тег платформы. Этот тег указывает платформу, для которой предназначен пакет. Вот некоторые примеры:
    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 постоянно развивается, как и ее инструменты. Продолжайте исследовать, продолжайте учиться и, самое главное, удачного кодирования!