我正在用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
是subroutine
中的energy_f2py.f90
的名称
我也尝试过使energy_f2py.f90
成为包含子例程的模块,结果没有差异。
这是生成的energy_f2py.cp36-win_amd64.pyd
的pyd文件。我在Pycharm(Windows 10 64位)中使用命令行,使用
1)f2py -c -m energy_f2py energy_f2py.f90
2)python -m numpy.f2py -c -m energy_f2py energy_f2py.f90
发生同样的事情。
我现在被困住了……看来这是工作方式的95%...
最后,另一篇文章Compile fortran module with f2py提出了一个解决方案,要求以不同的名称命名python和fortran模块。我已经尝试过了,但也没有什么不同:S
我发现可行的最佳解决方案是对hardrive进行分区并安装Linux。我选择使用Lubuntu,但您可以使用任何东西。
一切都在Linux上正常运行。
另一种选择是使用-static
标志将其构建为静态版本。这会将所需的所有内容构建到一个文件中:
python -m numpy.f2py -c -m energy_f2py energy_f2py.f90 -static
然后,无论您放置在哪个文件夹中,您都应该可以使用该.pyd
文件。