如何在M1 Mac上让cffi同时生成x86_64与arm64架构的mach-o文件?
解决M1 Max Mac上cffi双架构编译问题
问题根源
你的VSCode终端大概率是通过Rosetta 2转译运行的x86_64环境,而系统终端是原生arm64环境,导致cffi编译生成的架构文件只能适配其中一种环境。解决核心是让cffi生成同时支持arm64和x86_64的Universal二进制文件。
具体操作步骤
确认当前Python环境架构
运行以下命令,输出arm64代表原生arm64环境,x86_64则是Rosetta转译环境:python3 -c "import platform; print(platform.machine())"建议直接在系统终端(原生arm64环境)执行后续操作。
卸载现有cffi
pip uninstall -y cffi设置编译环境变量,强制生成双架构文件
执行以下命令配置编译参数:export ARCHFLAGS="-arch arm64 -arch x86_64" export CFLAGS="-arch arm64 -arch x86_64" export LDFLAGS="-arch arm64 -arch x86_64"从源码编译安装cffi
使用--no-binary :all:强制跳过预编译wheel,从源码编译生成双架构文件:pip install --no-binary :all: cffi验证编译结果
先找到cffi的安装目录:pip show cffi | grep Location进入该目录下的
cffi子文件夹,运行以下命令查看二进制文件架构:lipo -info _cffi_backend.cpython-311-darwin.so如果输出包含
Architectures in the fat file: _cffi_backend.cpython-311-darwin.so are: arm64 x86_64,说明双架构编译成功。
后续说明
完成以上操作后,不管是系统终端的arm64环境,还是VSCode终端的x86_64转译环境,都能正常加载cffi,netmiko程序也不会再出现架构不匹配的ImportError。
内容的提问来源于stack exchange,提问作者python_noob
相关产品推荐
相关产品推荐

