F2PY 找不到模块

2 投票
2 回答
3505 浏览
提问于 2025-04-17 14:40

我在用Python时遇到了一个问题,想要使用一个用f2py编译的模块。

我有一个用Fortran写的软件,在Linux 64位机器上编译得很好。接着,F2Py又编译了一个可以使用Fortran代码的Python模块。

这是我编译Python模块的方式:

f2py --fcompiler=gfortran -I"path-to-dir-with-mod-files" -c -m mod_landems mod_landem.f90

但是当我想要导入这个模块时,在Ipython中却出现了错误:

----> 1 import mod_landems
ImportError: ./mod_landems.so: undefined symbol: __nesdis_landem_module_MOD_nesdis_landem

说实话,我对这个错误感到很困惑。搜索了一下也没有找到太多帮助,所以我在这里问你们:我该怎么才能让它工作呢?如果我把Python模块的代码放在和mod文件同一个目录下,还是会出现同样的错误信息。

这是我一些(很简单的)代码:

module n_landem
implicit none

! INPUT VARIABLES
real(8) Angle
real(8) Sm_Content
real(8) Veg_Frac
real(8) Soil_Temp
real(8) Land_Temp
real(8) Snow_Depth
real(8) Frequency

! OUTPUT VARIABLES
real(8) Emis_H
real(8) Emis_V

contains

subroutine landem

  USE NESDIS_LANDEM_MODULE
  USE TYPE_KINDS, ONLY : fp

  call NESDIS_LandEM(Angle,Frequency,Sm_Content,Veg_Frac,Soil_Temp,Land_Temp,Snow_Depth,Emis_H,Emis_V)
end subroutine landem
end module n_landem

如果我没记错的话,之前这个模块是可以导入的,但现在在debian64和debian32位的电脑上都无法使用。

2 个回答

0

我正在做一个类似的项目,也刚接触Fortran。根据下面的参考资料,我发现你可以像导入一个库一样导入Fortran模块,然后也可以类似地调用函数。

http://cens.ioc.ee/projects/f2py2e/usersguide/#the-quick-and-smart-way
1

在你的 f2py 调用中,你需要用 '-l' 明确地传递你要链接的库,就像你在使用 Fortran 编译器(比如 gfortran)时那样。因此,

f2py -c --fcompiler=gfortran -I"path-to-dir-with-mod-files" --fcompiler=gfortran -I"path-to-dir-with-mod-files" -lNESDIS_LandEM_Module -m mod_landems mod_landem.f90 -m mod_landems mod_landem.f90

这样对你有用吗?

祝好,

Max.

撰写回答