Понимание 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