尽管编译成功,f2py 仍未正确导入
f2py does not properly import, despite successfully compiling
我正在使用 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_3
是energy_f2py.f90
里面的subroutine
的名字
我也试过 energy_f2py.f90
一个包含子例程的模块,结果没有什么不同。
这是生成的pyd文件energy_f2py.cp36-win_amd64.pyd
。我在 Pycharm(windows 10 64 位)中使用命令行来使用
编译 Fortran 文件
f2py -c -m energy_f2py energy_f2py.f90
python -m numpy.f2py -c -m energy_f2py energy_f2py.f90
同样的事情发生了。
pyd文件和文件夹都创建了,我觉得很奇怪,见下图
我卡在这了...好像已经完成了 95% 的工作...
最后,this other post 提出了一个解决方案,要求将 Python 和 Fortran 模块命名为不同的名称。这个我试过了,也没啥影响。
我找到的最佳解决方案是对我的硬盘进行分区并安装 Linux。我选择使用 Lubuntu,但你可以使用任何东西。
一切正常 Linux。
另一个选择是使用 -static
标志使其成为静态构建。这会将所需的一切构建到一个文件中:
python -m numpy.f2py -c -m energy_f2py energy_f2py.f90 -static
然后您应该能够使用该 .pyd
文件,无论您将它放在哪个文件夹中。
如果您正在使用 windows,我认为添加 --compiler=mingw32 可能会有所帮助。默认编译器是 windows.
上的 msvc
我发现生成的 .pyd
模块正在其所在的同一目录中查找 DLL 库。因此,尝试将 DLL 从 .libs
目录移动到 energy_f2py
- 它在 Windows 10.
对我有用
我正在使用 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_3
是energy_f2py.f90
subroutine
的名字
我也试过 energy_f2py.f90
一个包含子例程的模块,结果没有什么不同。
这是生成的pyd文件energy_f2py.cp36-win_amd64.pyd
。我在 Pycharm(windows 10 64 位)中使用命令行来使用
f2py -c -m energy_f2py energy_f2py.f90
python -m numpy.f2py -c -m energy_f2py energy_f2py.f90
同样的事情发生了。
pyd文件和文件夹都创建了,我觉得很奇怪,见下图
我卡在这了...好像已经完成了 95% 的工作...
最后,this other post 提出了一个解决方案,要求将 Python 和 Fortran 模块命名为不同的名称。这个我试过了,也没啥影响。
我找到的最佳解决方案是对我的硬盘进行分区并安装 Linux。我选择使用 Lubuntu,但你可以使用任何东西。
一切正常 Linux。
另一个选择是使用 -static
标志使其成为静态构建。这会将所需的一切构建到一个文件中:
python -m numpy.f2py -c -m energy_f2py energy_f2py.f90 -static
然后您应该能够使用该 .pyd
文件,无论您将它放在哪个文件夹中。
如果您正在使用 windows,我认为添加 --compiler=mingw32 可能会有所帮助。默认编译器是 windows.
上的 msvc我发现生成的 .pyd
模块正在其所在的同一目录中查找 DLL 库。因此,尝试将 DLL 从 .libs
目录移动到 energy_f2py
- 它在 Windows 10.