Skip to main content
 首页 » 编程设计

python之F2PY 找不到模块

2025年05月04日11lyhabc

我很难让 f2py 编译模块在 Python 中运行。

我有一个用 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 位计算机上运行。

请您参考如下方法:

在您的 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 

为你工作?

最好的, 最大。