Как собрать wheel-пакет для NumPy из pyproject.toml?

Что такое Wheel-пакет и зачем он нужен?

Wheel-пакет — это стандартизированный формат дистрибуции Python-пакетов, призванный заменить устаревшие egg-файлы. Он представляет собой zip-архив с метаданными и скомпилированным кодом, что значительно ускоряет процесс установки пакетов. Wheel-пакет позволяет избежать необходимости компиляции исходного кода при установке, поскольку включает в себя уже скомпилированные бинарные файлы для конкретной платформы и архитектуры. Это особенно важно для таких объемных и сложных библиотек, как NumPy.

Обзор файла pyproject.toml: стандартизация сборки Python-пакетов

pyproject.toml — это файл конфигурации, определенный PEP 518 и PEP 621, который стандартизирует процесс сборки Python-пакетов. Он указывает, какие инструменты сборки (например, setuptools, poetry, flit) необходимо использовать, а также содержит метаданные о проекте, такие как зависимости, версия и описание. Использование pyproject.toml делает процесс сборки более предсказуемым и воспроизводимым, позволяя избежать проблем, связанных с различными версиями инструментов сборки.

Почему собирать Wheel для NumPy важно?

Сборка Wheel-пакета для NumPy важна по нескольким причинам:

  • Скорость установки: Wheel-пакеты позволяют устанавливать NumPy значительно быстрее, особенно на платформах, где компиляция из исходного кода занимает много времени.
  • Упрощение развертывания: Wheel-пакеты упрощают развертывание NumPy в различных окружениях, так как включают в себя все необходимые зависимости и скомпилированный код.
  • Решение проблем с компиляцией: Сборка Wheel-пакета позволяет решить проблемы, связанные с отсутствием необходимых компиляторов или библиотек в целевой системе.

Подготовка окружения для сборки Wheel NumPy

Необходимые инструменты: Python, pip, wheel, build

Для сборки Wheel-пакета NumPy вам понадобятся следующие инструменты:

  • Python: Интерпретатор Python (рекомендуется версия 3.7 или выше).
  • pip: Менеджер пакетов Python для установки необходимых зависимостей.
  • wheel: Инструмент для работы с Wheel-пакетами (обычно устанавливается вместе с pip).
  • build: Инструмент для сборки пакетов из pyproject.toml.

Установка и настройка build для работы с pyproject.toml

Установите build с помощью pip:

pip install build

build автоматически обнаруживает файл pyproject.toml в корневой директории проекта и использует указанный в нем бэкенд для сборки пакета.

Особенности окружения для сборки NumPy: Fortran и C компиляторы

NumPy содержит код, написанный на Fortran и C, поэтому для его сборки необходимы соответствующие компиляторы. Убедитесь, что у вас установлены:

  • Fortran компилятор: Например, gfortran (обычно входит в состав GCC).
  • C компилятор: Например, GCC или Clang.

Конкретные инструкции по установке компиляторов зависят от вашей операционной системы.

Создание и настройка pyproject.toml для NumPy

Минимальная конфигурация pyproject.toml для сборки NumPy

Минимальная конфигурация pyproject.toml для сборки NumPy выглядит следующим образом:

[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "numpy_custom"
version = "1.23.5" # Ваша версия NumPy
description = "Custom build of NumPy"
authors = [
    { name = "Your Name", email = "your.email@example.com" }
]
license = { text = "BSD-3-Clause" }

requires-python = ">=3.7"
classifiers = [
    "Programming Language :: Python :: 3",
    "License :: OSI Approved :: BSD License",
    "Operating System :: OS Independent",
]

[tool.setuptools.packages]
find = {include = ["numpy_custom*"]}

[tool.setuptools.package-data]
numpy_custom = ["*.so", "*.dll", "*.dylib"]

Указание зависимостей сборки (build-system.requires)

Секция build-system.requires указывает зависимости, необходимые для сборки пакета. В данном случае, это setuptools (для управления сборкой) и wheel (для создания Wheel-пакета).

Настройка параметров сборки (tool.setuptools.*) — примеры и пояснения

Секция tool.setuptools.* позволяет настроить параметры сборки, специфичные для setuptools. Например:

  • tool.setuptools.packages.find: автоматически обнаруживает пакеты для включения в дистрибутив.
  • tool.setuptools.package-data: указывает дополнительные файлы, которые должны быть включены в пакет (например, скомпилированные библиотеки).

Пример настройки include:

[tool.setuptools.packages.find]
include = ["my_custom_module*"]
exclude = ["my_custom_module.tests*"]

В этом примере, все пакеты, начинающиеся с my_custom_module, будут включены, а пакеты, начинающиеся с my_custom_module.tests, будут исключены.

Сборка Wheel-пакета NumPy

Запуск процесса сборки с помощью команды ‘python -m build’

Для сборки Wheel-пакета используйте команду:

python -m build

Эта команда автоматически найдет файл pyproject.toml и запустит процесс сборки с использованием указанного бэкенда.

Разрешение зависимостей и использование виртуального окружения

Перед сборкой убедитесь, что все зависимости установлены. Рекомендуется использовать виртуальное окружение для изоляции зависимостей проекта:

python -m venv .venv
source .venv/bin/activate  # Для Linux/macOS
.venv\Scripts\activate  # Для Windows
pip install -e .

Устранение неполадок и распространенные ошибки при сборке

Наиболее распространенные ошибки при сборке NumPy связаны с отсутствием необходимых компиляторов или библиотек. Убедитесь, что у вас установлены все необходимые инструменты, и что они правильно настроены.

Также проверьте логи сборки на наличие ошибок и предупреждений. Часто информация в логах позволяет быстро определить причину проблемы.

Установка и использование собранного Wheel-пакета

Установка Wheel-пакета с помощью pip

После успешной сборки Wheel-пакет будет находиться в директории dist. Установите его с помощью pip:

pip install dist/numpy_custom-1.23.5-cp39-cp39-linux_x86_64.whl

Замените numpy_custom-1.23.5-cp39-cp39-linux_x86_64.whl на имя вашего Wheel-пакета.

Проверка работоспособности установленного NumPy

После установки убедитесь, что NumPy работает правильно:

import numpy as np

a = np.array([1, 2, 3])
print(a)

Если код выполняется без ошибок, значит, NumPy установлен успешно.

Преимущества использования собранного Wheel-пакета

Использование собранного Wheel-пакета предоставляет следующие преимущества:

  • Быстрая установка: Установка из Wheel-пакета занимает значительно меньше времени, чем компиляция из исходного кода.
  • Совместимость: Wheel-пакет обеспечивает совместимость с вашей платформой и архитектурой.
  • Упрощение развертывания: Wheel-пакет упрощает развертывание NumPy в различных окружениях.

Добавить комментарий