F2PY找不到模块

时间:2013-02-04 05:49:57

标签: python import module fortran f2py

我很难在Python中使用f2py编译模块。

我有一个用Fortran编写的软件可以很好地编译在Linux 64bit机器上。 进一步在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安装或debian32bit计算机上运行。

2 个答案:

答案 0 :(得分: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

为你工作?

最佳, 最大

答案 1 :(得分:0)

我正在开展一个类似的项目,对Fortran来说也是新手。使用下面的参考,我发现您导入fortran模块就像导入库然后类似地调用函数一样。 http://cens.ioc.ee/projects/f2py2e/usersguide/#the-quick-and-smart-way