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
Один или несколько сгенерированных файлов из
f2pyA
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
The
f90обертка используется для обработки кода, разделенного на модули. Оберткаfобёртка делаетsubroutinesдляfunctions. Он переписывает массивы с предполагаемой формой как автоматические массивы.- Файлы сигнатур
Входной файл
blah.pyfГенерирует:
blahmodule.cblah-f2pywrappers2.f90(иногда)blah-f2pywrappers.f(иногда)
Файлы сигнатур
.pyfне указывают свой стандарт языка через расширение файла, они могут генерировать обертки, специфичные для F90 и F77, в зависимости от их содержимого; что перекладывает бремя проверки сгенерированных файлов на систему сборки.
Изменено в версии NumPy: 1.22.4
f2py детерминированно генерирует файлы-обёртки на основе стандарта Fortran входного файла (F77 или выше). --skip-empty-wrappers может быть
передан в f2py чтобы восстановить предыдущее поведение генерации
обёрток только при необходимости входными данными.
Теоретически, соблюдая вышеуказанные требования, любую систему сборки можно адаптировать для генерации f2py расширяющие модули. Здесь мы рассмотрим подмножество
более популярных систем.
Примечание
make не имеет места в современной многопрофильной настройке и поэтому не обсуждается далее.