如何使用f2py从Fortran程序创建Python模块?

3 投票
1 回答
1304 浏览
提问于 2025-04-15 20:31

我正在尝试用Python读取一些smps文件,发现有一个Fortran的实现,所以我想试试f2py。不过,我对Fortran没有任何经验。

我已经在我的Linux电脑上成功安装了gfortran和f2py,并且运行了f2py页面上的示例,但在编译和运行一个较大的程序时遇到了一些问题。这个程序有两个文件,一个是文件读取的包装器,另一个是包含所有逻辑的部分。它们似乎是相互调用的,但当我编译和链接或者尝试使用f2py时,出现了错误,提示它们似乎找不到彼此:

f95 -c FILEWR~1.F
f95 -c SMPSREAD.F90 
f95 -o smpsread SMPSREAD.o FILEWR~1.o 

FILEWR~1.o In function `file_wrapper_'
FILEWR~1.F(.text+0x3d) undefined reference to `chopen_'
usrlibgcci486-linux-gnu4.4.1libgfortranbegin.a(fmain.o) In function `main'
(.text+0x27) undefined reference to `MAIN__'
collect2 ld returned 1 exit status  

我还尝试把文件名改成FILE_WRAPPER.F,但这并没有解决问题。

在使用f2py时,我发现我需要添加一个注释才能让它接受自由格式的文件,于是我保存为一个新文件并尝试:

f2py -c -m smpsread smpsread.f90

我得到了很多输出和警告,但错误似乎是这个:

getctype: No C-type found in "{'typespec': 'type', 'attrspec': ['allocatable'],  'typename': 'node', 'dimension': [':']}", assuming void.

你可以在这里找到Fortran 90的spms读取器

任何帮助或建议都非常感谢。

1 个回答

0

我建议你完全跳过Fortran的部分。

http://myweb.dal.ca/gassmann/smps2.htm

MPS记录的结构在这里有介绍,看起来用Python来解析还是比较简单的。

http://myweb.dal.ca/gassmann/smps2.htm#CoreMPSline

反正你都需要为所有的数据定义合适的Python类(或者命名元组)。

我觉得Fortran并没有什么帮助。

撰写回答