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

    • A 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.c

    • blah-f2pywrappers.f

Когда нет COMMON блоки присутствуют только C генерируется файл-обёртка. Обёртки также генерируются для перезаписи массивов с предполагаемой формой как автоматических массивов.

Программы на Fortran 90
  • Входной файл blah.f90

  • Генерирует:

    • blahmodule.c

    • blah-f2pywrappers.f

    • blah-f2pywrappers2.f90

The 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 не имеет места в современной многопрофильной настройке и поэтому не обсуждается далее.

Системы сборки#