ImportError:如何解决苹果M1设备上F2PY无法正常使用的问题
报错根因
核心是编译生成的Fortran扩展库架构与调用它的Python解释器架构不匹配,你当前生成的my_lib.cpython-38-darwin.so是arm64架构,但运行脚本的Python是x86_64版本,因此无法加载。
解决方案
第一步:先确认当前Python解释器的架构,执行以下命令:
python3 -c "import platform;print(platform.machine())"输出
x86_64代表当前用的是Rosetta转译的x86版本Python,输出arm64代表用的是M1芯片原生版本Python。第二步:根据Python架构选择对应编译方式
- 如果你使用x86_64版本Python:
编译时强制指定x86架构即可,命令调整为:arch -x86_64 f2py -c -m my_lib *.f - 如果你使用arm64原生版本Python:
先确认你安装的Fortran编译器(如gfortran)是arm64版本,关闭终端的Rosetta模式后,执行原编译命令即可生成匹配的arm64架构库:f2py -c -m my_lib *.f
- 如果你使用x86_64版本Python:
可选:编译双架构通用扩展库
如果需要在x86和arm64环境下都能调用该库,可以直接编译为通用二进制文件,命令如下:f2py -c -m my_lib *.f --opt="-arch x86_64 -arch arm64" --lflags="-arch x86_64 -arch arm64"验证方法:编译完成后执行以下命令确认库的架构,和Python架构一致即可正常导入:
lipo -info my_lib.cpython-38-darwin.so
内容的提问来源于stack exchange,提问作者stegmaja
相关产品推荐
相关产品推荐

