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 компилятора. Поскольку
переменные окружения обычно довольно общие для обоих, небольшой
пример приведён ниже.
Name |
Что |
FC |
Компилятор Fortran |
CC |
C компилятор |
CFLAGS |
Опции компилятора C |
FFLAGS |
Опции компилятора Fortran |
LDFLAGS |
Опции компоновщика |
LD_LIBRARY_PATH |
Расположение файлов библиотек (Unix) |
LIBS |
Библиотеки для линковки |
PATH |
Путь поиска для исполняемых файлов |
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. Фактически, полученный набор файлов можно даже напрямую закоммитить и использовать как мезонный подпроект в отдельной кодовой базе.