F2PY и системы сборки
В этом разделе мы рассмотрим различные популярные системы сборки и их использование с f2py.
Изменено в версии NumPy: 1.26.x
По умолчанию система сборки для f2py традиционно реализовывалась с помощью расширенного модуля numpy.distutils. Этот модуль основан на distutils, который был удалён в Python 3.12.0 в октябре 2023 года. Как и остальная часть NumPy и SciPy, f2py теперь использует meson, см. Состояние numpy.distutils и рекомендации по миграции для получения более подробной информации.
Все изменения в f2py тестируются на SciPy, поэтому их настройка CI всегда поддерживается.
Примечание
См. 1 Миграция на meson для информации о миграции.
Основные понятия
Создание модуля расширения, включающего Python и Fortran, состоит из:
- Исходный(е) файл(ы) Fortran
-
Один или несколько сгенерированных файлов из
f2py- Файл оболочки
Cвсегда создается - Код с модулями требует дополнительной оболочки
.f90 - Код с функциями генерирует дополнительную оболочку
.f
- Файл оболочки
-
fortranobject.{c,h}- Распространяется с
numpy - Можно запросить через
python -c "import numpy.f2py; print(numpy.f2py.get_include())"
- Распространяется с
-
Заголовки NumPy
- Можно запросить через
python -c "import numpy; print(numpy.get_include())"
- Можно запросить через
- Библиотеки Python и заголовки разработки
В общих чертах, при рассмотрении выходных данных f2py возникает три случая:
- Программы Fortran 77
-
- Входной файл
blah.f -
Генерирует
blahmodule.cblah-f2pywrappers.f
Когда блоки
COMMONотсутствуют, генерируется только файл оболочкиC. Оболочки также генерируются для переписывания массивов с предполагаемой формой как автоматические массивы. - Входной файл
- Программы Fortran 90
-
- Входной файл
blah.f90 -
Генерирует:
blahmodule.cblah-f2pywrappers.fblah-f2pywrappers2.f90
Оболочка
f90используется для обработки кода, разделенного на модули. Оболочкаfсоздаетsubroutinesдляfunctions. Она переписывает массивы с предполагаемой формой как автоматические массивы. - Входной файл
- Файлы сигнатур
-
- Входной файл
blah.pyf -
Генерирует:
blahmodule.c-
blah-f2pywrappers2.f90(иногда) -
blah-f2pywrappers.f(иногда)
Файлы сигнатур
.pyfне сигнализируют об используемом стандарте языка через расширение файла, они могут генерировать оболочки F90 и F77 в зависимости от их содержимого; это переносит ответственность проверки сгенерированных файлов на систему сборки. - Входной файл
Изменено в версии NumPy: 1.22.4
f2py будет детерминировано генерировать файлы оболочек на основе стандарт Fortran входного файла (F77 или более поздняя версия). --skip-empty-wrappers можно передать в f2py для восстановления предыдущего поведения, генерируя оболочки только при необходимости.
Теоретически, при соблюдении вышеуказанных требований, любая система сборки может быть адаптирована для создания модулей расширения f2py. Здесь мы рассмотрим подмножество наиболее популярных систем.
Примечание
make не имеет места в современной многоязычной настройке и поэтому более подробно не рассматривается.
Системы сборки
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/f2py/buildtools/index.html