F2PY 和 Windows Intel Fortran#

截至 NumPy 1.23,僅支援經典 Intel 編譯器 (ifort)。

注意

在轉換到 LLVM 支援的 ifx/icc 系列編譯器期間,beta 軟體的授權限制 已放寬。然而,由於與 組件反組譯和責任 相關的問題,本文檔不認可在下游專案中使用 Intel。

Python Intel 安裝和 Classic Intel C/C++ Compiler 皆非必要。

  • Intel Fortran 編譯器 以組合安裝程式形式提供,同時包含 Classic 和 Beta 版本;這些也佔用大約 1.5 GB 左右的空間。

我們將考慮生成費波那契數的經典範例,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 本機安裝的實際路徑可能會有所不同,並且需要相應地更新上面的命令。