1 Миграция на meson
В соответствии с графиком, представленным в Состояние numpy.distutils и рекомендации по миграции, distutils перестал быть стандартным бэкендом сборки для f2py. Данная страница содержит распространенные рабочие процессы для обоих форматов.
Примечание
Это **живой** документ, запросы на добавление приветствуются!
1.1 Базовая конфигурация
Мы начнем с немного модернизированной версии классического генератора последовательности Фибоначчи.
! fib.f90
subroutine fib(a, n)
use iso_c_binding
integer(c_int), intent(in) :: n
integer(c_int), intent(out) :: a(n)
do i = 1, n
if (i .eq. 1) then
a(i) = 0.0d0
elseif (i .eq. 2) then
a(i) = 1.0d0
else
a(i) = a(i - 1) + a(i - 2)
end if
end do
end
Это не принесет никаких наград, но может быть приемлемой отправной точкой.
1.2 Параметры компиляции
1.2.1 Базовое использование
Это не изменилось:
python -m numpy.f2py -c fib.f90 -m fib
❯ python -c "import fib; print(fib.fib(30))"
[ 0 1 1 2 3 5 8 13 21 34
55 89 144 233 377 610 987 1597 2584 4181
6765 10946 17711 28657 46368 75025 121393 196418 317811 514229]
1.2.2 Указание бэкенда
python -m numpy.f2py -c fib.f90 -m fib --backend distutils
Это значение по умолчанию для версий Python до 3.12.
python -m numpy.f2py -c fib.f90 -m fib --backend meson
Это единственный вариант для версий Python после 3.12.
1.2.3 Передача имени компилятора
python -m numpy.f2py -c fib.f90 -m fib --backend distutils --fcompiler=gfortran
FC="gfortran" python -m numpy.f2py -c fib.f90 -m fib --backend meson
Также можно использовать файлы нативных библиотек.
Аналогично, CC можно использовать в обоих случаях для установки компилятора C. Поскольку переменные окружения в целом достаточно распространены в обоих случаях, ниже приводится небольшой пример.
Имя | Что это |
FC | Компилятор Fortran |
CC | Компилятор C |
CFLAGS | Параметры компилятора C |
FFLAGS | Параметры компилятора Fortran |
LDFLAGS | Параметры компоновщика |
LDLIBRARYPATH | Расположение файлов библиотек (Unix) |
LIBS | Библиотеки для компоновки |
PATH | Путь поиска исполняемых файлов |
LDFLAGS | Флаги компоновщика |
CXX | Компилятор C++ |
CXXFLAGS | Параметры компилятора C++ |
Примечание
Для Windows эти параметры могут работать не очень надежно, поэтому файлы нативных библиотек — вероятно, лучший вариант, или же прямой 1.3 Настройка сборок.
1.2.4 Зависимости
Здесь meson фактически может использоваться для более надежной настройки зависимостей.
python -m numpy.f2py -c fib.f90 -m fib --backend distutils -llapack
Обратите внимание, что этот подход на практике подвержен ошибкам.
python -m numpy.f2py -c fib.f90 -m fib --backend meson --dep lapack
Это сопоставляется с dependency("lapack") и может использоваться для широкого спектра зависимостей. Их можно дополнительно настроить для использования CMake или других систем для разрешения зависимостей.
1.2.5 Библиотеки
Как meson, так и distutils способны подключаться к библиотекам.
python -m numpy.f2py -c fib.f90 -m fib --backend distutils -lmylib -L/path/to/mylib
python -m numpy.f2py -c fib.f90 -m fib --backend meson -lmylib -L/path/to/mylib
1.3 Настройка сборок
python -m numpy.f2py -c fib.f90 -m fib --backend distutils --build-dir blah
Это можно технически интегрировать с другими кодами, см. Использование через numpy.distutils.
python -m numpy.f2py -c fib.f90 -m fib --backend meson --build-dir blah
Результирующую сборку можно настроить с помощью Руководства по настройке сборок Meson. Фактически, полученный набор файлов можно даже напрямую добавить в историю изменений и использовать как подпроект meson в отдельном кодовом репозитории.
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/f2py/buildtools/distutils-to-meson.html