f2py,尽管编译成功,仍无法正确导入

问题描述 投票:1回答:2

我正在用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文件和文件夹似乎很奇怪,请参见下图enter image description here

我现在被困住了……看来这是工作方式的95%...

最后,另一篇文章Compile fortran module with f2py提出了一个解决方案,要求以不同的名称命名python和fortran模块。我已经尝试过了,但也没有什么不同:S

python-3.x fortran90 f2py
2个回答
1
投票

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

一切都在Linux上正常运行。


0
投票

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

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

然后,无论您放置在哪个文件夹中,您都应该可以使用该.pyd文件。

© www.soinside.com 2019 - 2024. All rights reserved.