F2PY и Windows Intel Fortran#

Начиная с NumPy 1.23, только классические компиляторы Intel (ifort) поддерживаются.

Примечание

Ограничения лицензирования для бета-версий программного обеспечения были ослаблены во время перехода на бэкенд LLVM ifx/icc семейство компиляторов. Однако этот документ не рекомендует использование Intel в последующих проектах из-за проблем, связанных с разборка компонентов и ответственность.

Ни установка Python Intel, ни Классический компилятор Intel C/C++ требуются.

  • The Компиляторы Intel Fortran поставляются в комбинированном установщике, предоставляющем как классическую, так и бета-версии; они также занимают около полутора гигабайт.

Мы рассмотрим классический пример генерации чисел Фибоначчи, fib1.f, задано:

C FILE: FIB1.F
      SUBROUTINE FIB(A,N)
C
C     CALCULATE FIRST N FIBONACCI NUMBERS
C
      INTEGER N
      REAL*8 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)
         ENDIF
      ENDDO
      END
C END FILE FIB1.F

Для cmd.exe пользователям, использование командной строки Intel oneAPI — самый простой подход, так как она загружает необходимую среду для обоих ifort и msvc. Также предоставлены вспомогательные пакетные скрипты.

# cmd.exe
"C:\Program Files (x86)\Intel\oneAPI\setvars.bat"
python -m numpy.f2py -c fib1.f -m fib1
python -c "import fib1; import numpy as np; a=np.zeros(8); fib1.fib(a); print(a)"

Использование Powershell немного менее удобно, и эта конфигурация теперь работает с MSVC как:

# Powershell
python -m numpy.f2py -c fib1.f -m fib1 --f77exec='C:\Program Files (x86)\Intel\oneAPI\compiler\latest\windows\bin\intel64\ifort.exe' --f90exec='C:\Program Files (x86)\Intel\oneAPI\compiler\latest\windows\bin\intel64\ifort.exe' -L'C:\Program Files (x86)\Intel\oneAPI\compiler\latest\windows\compiler\lib\ia32'
python -c "import fib1; import numpy as np; a=np.zeros(8); fib1.fib(a); print(a)"
# Alternatively, set environment and reload Powershell in one line
cmd.exe /k '"C:\Program Files (x86)\Intel\oneAPI\setvars.bat" && powershell'
python -m numpy.f2py -c fib1.f -m fib1
python -c "import fib1; import numpy as np; a=np.zeros(8); fib1.fib(a); print(a)"

Обратите внимание, что фактический путь к вашей локальной установке ifort может варьироваться, и приведённая выше команда должна быть обновлена соответствующим образом.