F2PY 和 Windows Intel Fortran#

截至 NumPy 1.23,仅支持经典的 Intel 编译器(ifort)。

注意

在过渡到基于 LLVM 的 ifx/icc 系列编译器期间,Beta 版软件的许可限制已放宽。然而,由于反编译组件和责任问题,本文档不赞成在下游项目中使用 Intel。

既不需要 Python Intel 安装,也不需要 Classic Intel C/C++ Compiler

  • Intel Fortran Compilers 包含在一个组合安装程序中,提供经典版和 Beta 版;它们也占用大约一个半千兆字节的空间。

我们将考虑生成斐波那契数的经典示例,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 命令提示符是最简单的方法,因为它加载了 ifortmsvc 所需的环境。还提供了辅助批处理脚本。

# 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 的实际路径可能会有所不同,并且需要相应地更新上面的命令。