【问题标题】:f2py does not properly import, despite successfully compiling尽管编译成功,f2py 仍无法正确导入
【发布时间】:2020-07-08 21:56:36
【问题描述】:

我正在使用 f2py 成功编译我的 Fortran 子例程。但是,会创建一个文件夹以及一个 pyd 文件。

如果我没有将创建的 pyd 文件放在生成的文件夹中,我会收到此错误

ImportError: DLL load failed: The specified module could not be found.

如果我将生成的 .pyd 文件放在生成的文件夹中,我的 python 脚本将运行,并且导入似乎工作。但是,如果我运行 print(energy_f2py.__doc__) None 是输出,并且当我尝试使用子例程时出现错误 AttributeError: module 'energy_f2py' has no attribute 'potential_3'

potential_3subroutine 内部energy_f2py.f90 的名称

我也尝试过将energy_f2py.f90 设为包含子例程的模块,结果没有差异。

这是energy_f2py.cp36-win_amd64.pyd生成的pyd文件。我正在使用 Pycharm(Windows 10 64 位)中的命令行使用

编译 Fortran 文件
  1. f2py -c -m energy_f2py energy_f2py.f90

  2. python -m numpy.f2py -c -m energy_f2py energy_f2py.f90

同样的事情也会发生。

在我看来,pyd 文件和文件夹都被创建了,见下图

我被困在这一点上......似乎已经完成了 95% 的工作......

最后,this other post 提出了一个解决方案,将 Python 和 Fortran 模块命名为不同的名称。这个我试过了,也没有用。

【问题讨论】:

    标签: python-3.x fortran f2py


    【解决方案1】:

    我发现的最佳解决方案是对我的硬盘进行分区并安装 Linux。我选择使用 Lubuntu,但你可以使用任何东西。

    在 Linux 上一切正常。

    【讨论】:

      【解决方案2】:

      另一个选项是使用-static 标志使其成为静态构建。这会将所需的所有内容构建到一个文件中:

      python -m numpy.f2py -c -m energy_f2py energy_f2py.f90 -static
      

      然后,无论您将其放在哪个文件夹中,您都应该能够使用该 .pyd 文件。

      【讨论】:

        【解决方案3】:

        如果您使用的是 Windows,我认为添加 --compiler=mingw32 可能会有所帮助。默认编译器是 windows 上的 msvc。

        【讨论】:

          猜你喜欢
          • 2021-08-20
          • 1970-01-01
          • 1970-01-01
          • 2015-12-29
          • 2021-01-06
          • 2021-12-09
          • 1970-01-01
          • 2017-03-25
          • 2017-05-25
          相关资源
          最近更新 更多