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 может варьироваться, и приведённая выше команда должна быть обновлена соответствующим образом.