Numpy 2.0.1中f2py无法暴露Fortran变量,如何在Python中访问?
在NumPy 2.0中访问F2py编译的Fortran纯变量模块的方法
方法1:给纯变量模块添加空子程序
NumPy 2.0的f2py默认不会导出仅包含变量声明的模块,这类模块被判定为“无代码实体”。你可以给GEOPLOT_GLOBALS模块添加一个空子程序,让f2py识别并导出该模块:
module GEOPLOT_GLOBALS implicit none integer, parameter :: n_max = 100 ! 添加空子程序触发f2py导出模块 contains subroutine dummy() return end subroutine dummy end module GEOPLOT_GLOBALS
重新用f2py编译后,就能像之前一样通过geo.geoplot_globals.n_max访问变量。
方法2:编译时显式指定导出模块
如果不想修改Fortran源码,可在f2py编译命令中强制指定要导出的GEOPLOT_GLOBALS模块,示例命令如下:
f2py -c -m geo.geoplot 你的源码文件名.f95 --export GEOPLOT_GLOBALS
替换命令中的你的源码文件名.f95为实际Fortran源码路径,编译完成后模块会被正常导出,可直接访问其中的变量。
方法3:通过f2py内部接口临时访问(不推荐长期使用)
如果暂时无法重新编译,可尝试通过模块的__f2py__内部属性获取全局变量。先查看可用的全局变量列表:
import geo.geoplot as geo print(geo.__f2py__.get_global_vars())
然后通过以下方式直接读取变量:
n_max = geo.__f2py__.get_global('n_max')
该方法依赖f2py的内部实现,后续版本可能变动,优先推荐前两种方法。
内容的提问来源于stack exchange,提问作者Peter Kämpf
相关产品推荐
相关产品推荐

