我一直在尝试使用 f2py 从 python 调用一个简单的 Fortran 子例程,但没有成功。 Fortran 子例程仅将 python 代码中定义的两个数字相加。 Fortran 代码是:
C
SUBROUTINE TESTLIB(A,B,C)
C
REAL, intent (in) :: A, B
REAL, intent (out) :: C
C = A + B
END SUBROUTINE TESTLIB
Python:
import numpy as np
import testlib2
A = 3
B = 2
C = testlib2.testlib(A, B)
print("C = ", C)
我从命令行创建了 testlib2.pyd 文件
python -m numpy.f2py -c -m testlib2 testlib2.f
然后将
testlib2.pyd
文件放置在与python文件(testlib.py)相同的目录中。我必须安装 meson、ninja、cmake、charset-normalizer 和 pkgconfig 库才能使 F2py 与 Python 3.12 配合使用。
当我运行 python 代码 testlib.py (Spyder 5.5) 时,我收到以下错误:
File c:\users\bcn\documents\hps\hps fortran\testlib.py:6
C = testlib2.testlib(A, B)
TypeError: testlib2.testlib() missing required argument 'c' (pos 3).
对 Fortran 子例程的调用似乎需要定义 C 变量,但已被定义为“out”变量。不知道为什么要这样做。我见过的例子表明 Fortran 子例程需要列出 out 变量。使用 Windows 11 和 Python 3.12。任何帮助将不胜感激。谢谢。
你可以尝试将你的Python代码更改为,
import numpy as np
import testlib2
A = 3
B = 2
testlib2.testlib(A, B, C)
print("C = ", C)
谢谢