[英]ImportError: Library not loaded for f2py
我正在使用f2py
编译 Fortran 子例程,以便在 Python 脚本中调用。
我在 Mac #1 上编译了 Fortran 源代码,运行Mojave 10.14
。 我使用以下方法编译它:
f2py -c -m <ModuleName> <SourceName.f90>
这行得通。 我得到一个.so
文件,我可以将其导入 Python 使用:
import <ModuleName> as m
当我尝试在另一台 Mac 上运行它时,问题就出现了。
在 Mac #2 上,也运行 Mojave 10.14,当我尝试使用预编译模块时:
>>> import <ModuleName> as m
Traceback (most recent call last):
File "Stats_Wizard.py", line 20, in <module>
import <ModuleName> as sf
ImportError: dlopen(/path/to/<ModuleName>.so, 2): Library not loaded: /usr/local/opt/gcc/lib/gcc/9/libgfortran.5.dylib
Referenced from: /path/to/<ModuleName>.so
Reason: image not found
我检查了每台计算机上.so
文件的 hash 并且它们匹配。 这意味着在计算机之间使用.so
存在问题。
为什么我不能在每台计算机上使用相同的预编译版本?
编辑:Mac #1 和 Mac #2 之间的注意点不同:Mac #1 安装了gfortran
,Mac #2 没有。 但是,我觉得这应该没什么区别,因为模块已经编译好了。
错误(我认为这是不言自明的): Library not loaded: /usr/local/opt/gcc/lib/gcc/9/libgfortran.5.dylib... Reason: image not found
,最后进行编辑您的问题已经包含一个(不需要的)答案:)
您的模块( ModuleName.so )仅包含您的代码,并且正在使用libgfortran.dylib中的“东西”,其中包含Fortran核心(或后端,如果您愿意的话)。
构建模块时,它被链接到libgfortran.dylib ,因此,它在运行时(加载时)需要它。 要对此进行测试,请尝试otool -L ModuleName.so
。
因此, libgfortran.dylib需要存在于导入模块的任何机器上(在指定位置)。 由于我不是OSX用户,这里有一些(理论上的)方法可以实现这一点:
请检查您是否已将构建文件的目录添加到 python 路径中。 要检查是否确实如此,请尝试:
import sys
sys.path.append(r"dir_parh/to/your/.so/file")
import lib_name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.