【问题标题】:F2PY doesn't find a moduleF2PY 找不到模块
【发布时间】:2013-02-04 05:49:56
【问题描述】:

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

我有一个用 Fortran 编写的软件,可以在 Linux 64 位机器上很好地编译。 F2Py 进一步编译了一个 Python 模块,该模块也使用 Fortran 位。

以下是 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 计算机上运行。

【问题讨论】:

  • 一点更新,我只好回到这一步重新编译模块。我花了两个步骤: - 使用 -fPIC 选项重新编译目标文件 - 使用 f2py 编译 python 模块:f2py -c -m pyModule $ObjectFiles pyModule.f90

标签: python import module fortran f2py


【解决方案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

为你工作?

最好, 最大。

【讨论】:

    【解决方案2】:

    我正在从事一个类似的项目,而且对 Fortran 也很陌生。使用下面的参考资料,我发现您导入 fortran 模块就像导入库然后类似地调用函数一样。 http://cens.ioc.ee/projects/f2py2e/usersguide/#the-quick-and-smart-way

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      相关资源
      最近更新 更多