Spec-Zone.ru › NumPy 2.0

Понимание Meson

Для построения NumPy используются следующие инструменты, которые можно считать частью системы сборки:

  • meson: система сборки Meson, устанавливаемая как чистый пакет Python из PyPI или conda-forge
  • ninja: инструмент сборки, вызываемый Meson для непосредственного выполнения сборки (например, вызова компиляторов). Также устанавливается из PyPI (на всех распространённых платформах) или conda-forge.
  • pkg-config: инструмент, используемый для определения зависимостей (в частности, BLAS/LAPACK). Доступен в conda-forge (и Homebrew, Chocolatey и менеджерах пакетов Linux), но не упакован в PyPI.
  • meson-python: бэкенд сборки Python (то есть, то, что вызывается через хук в pyproject.toml передним фронтом сборки, например, pip или pypa/build). Это тонкий слой поверх Meson, основными задачами которого являются (а) взаимодействие с передними фронтами сборки и (б) создание sdists и wheels с валидными именами файлов и метаданными.

Предупреждение

По состоянию на декабрь 2023 года NumPy поставляет пользовательскую версию Meson, которая необходима для функций SIMD и BLAS/LAPACK, которые ещё не доступны в исходном Meson. Поэтому напрямую использовать исполняемый файл meson невозможно. Вместо этого, где в инструкциях указано meson xxx, используйте python vendored-meson/meson/meson.py xxx.

Процесс сборки с помощью Meson происходит поэтапно:

  • Этап конфигурации (meson setup) для обнаружения компиляторов, зависимостей и параметров сборки, создания каталога сборки и файла build.ninja,
  • Этап компиляции (meson compile или ninja), где компилируются модули расширений, которые входят в состав построенного пакета NumPy,
  • Этап установки (meson install) для установки файлов, подлежащих установке, из исходных и каталогов сборки в целевой каталог установки,

Meson имеет хорошую систему отслеживания зависимостей сборки, поэтому повторный вызов сборки пересобирает только те цели, для которых изменились какие-либо исходные файлы или зависимости.

Дополнительная информация о Meson

Meson обладает очень хорошей документацией; её чтение полезно, и часто она является лучшим источником ответов на вопросы типа «как сделать X». Кроме того, бесплатная книга в формате PDF о Meson доступна по адресу https://nibblestew.blogspot.com/2021/12/this-year-receive-gift-of-free-meson.html

Чтобы узнать больше о принципах проектирования, используемых Meson, также полезно изучить недавние презентации, ссылки на которые приведены на странице mesonbuild.com/Videos.

Описание этапов сборки

Это предназначено только для учебных целей; нет необходимости выполнять эти этапы по отдельности!

Предположим, мы начинаем с пустого репозитория и полностью настроенной среды conda:

git clone git@github.com:numpy/numpy.git
git submodule update --init
mamba env create -f environment.yml
mamba activate numpy-dev

Чтобы выполнить этап конфигурации сборки и указать Meson разместить артефакты сборки в build/ и локальную установку в build-install/ относительно корня репозитория, выполните:

meson setup build --prefix=$PWD/build-install

Чтобы затем выполнить этап компиляции сборки, выполните:

ninja -C build

В команде выше, -C следует за именем каталога сборки. Вы можете иметь несколько каталогов сборки одновременно. Meson полностью независим, поэтому эти сборки не будут мешать друг другу. Например, вы можете иметь сборку GCC, сборку Clang и сборку отладки в разных каталогах.

Чтобы затем установить NumPy в префикс (build-install/ здесь, но имейте в виду, что это просто произвольно выбранное нами имя):

meson install -C build

Он затем установится в build-install/lib/python3.11/site-packages/numpy, который не находится в вашем пути Python, поэтому для добавления его сделайте следующее (снова, это для учебных целей, явное использование ``PYTHONPATH`` обычно не лучшая идея):

export PYTHONPATH=$PWD/build-install/lib/python3.11/site-packages/

Теперь мы должны иметь возможность импортировать numpy и запустить тесты. Помня, что нам нужно выйти из корня репозитория, чтобы убедиться, что мы используем пакет, а не локальный каталог исходного кода numpy/:

cd doc
python -c "import numpy as np; np.test()"

Выше приведён запуск «быстрого» набора тестов numpy. Другие способы запуска тестов также должны работать, например:

pytest --pyargs numpy

Полный набор тестов должен пройти без каких-либо предупреждений при сборке на Linux (с версией GCC, для которой -Werror выполняется в CI как минимум) и с максимально небольшим количеством предупреждений на других платформах.

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/building/understanding_meson.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API