我想使用 f2py 将 fortran 文件导入到我的 python 脚本中。
为此,我通过
编译它们f2py -c -m my_lib *.f
生成文件“my_lib.cpython-38-darwin.so”,我将其导入到我的脚本中
import my_lib
.
在我的基于 Intel 的 Macbook 上运行良好。但是,在 M1 机器上运行脚本会产生以下错误:
ImportError: dlopen(./my_lib.cpython-38-darwin.so, 0x0002): tried: './my_lib.cpython-38-darwin.so' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/usr/local/lib/my_lib.cpython-38-darwin.so' (no such file), '/usr/lib/my_lib.cpython-38-darwin.so' (no such file)
当我以 Rosetta 模式启动终端时,也会发生同样的情况。
知道如何解决这个问题吗?
我不知道你是否能解决这个问题,但我找到了在我的 Mac 上解决这个问题的解决方案。
在我的 Mac 上运行
f2py
导致了同样的错误。
经过一段时间的寻找原因后,我尝试使用另一个 Python 环境(基于另一个基础解释器)。我认为该错误可能是由未在 M1 芯片上本地运行的解释器引起的。编译后的 Fortran 代码必须在 Mac 上本机运行。所以可能存在兼容性问题。
现在我正在使用“开发人员命令行工具”(在本例中为 Python 3.8)提供的解释器来编译源代码并构建
.so
文件。通过这样做,我能够让它在我的 Mac 上运行。
我在 M2 上遇到了完全相同的问题。你找到解决方法了吗?谢谢你! @stegmaja