从Intel Mac构建的Arm Mac Python可执行文件架构不兼容问题
解决Intel Mac打包Arm64 Python程序的regex架构不兼容问题
问题核心:在Intel Mac上直接打包时,Poetry默认安装的是x86_64架构的依赖(比如regex的二进制文件),即便PyInstaller指定了--target-arch=arm64,也无法替换依赖本身的架构,导致M1 Mac运行时出现架构不兼容错误。
解决步骤:
- 清理现有环境,避免残留的x86_64依赖干扰
rm -rf .venv poetry cache clear --all pypi - 强制以Arm64架构安装所有依赖
用arch -arm64命令让Poetry在Rosetta模拟的Arm64环境下运行,这样安装的依赖(包括regex的二进制)都会是Arm64架构:arch -arm64 poetry install - 验证依赖架构(可选)
检查regex的二进制文件架构,确认是Arm64:
输出应包含lipo -info .venv/lib/python3.11/site-packages/regex/_regex.cpython-311-darwin.soarm64字样。 - 以Arm64架构运行PyInstaller打包
同样用arch -arm64前缀执行打包命令,确保PyInstaller基于Arm64环境处理依赖:arch -arm64 poetry run pyinstaller --onefile --target-arch=arm64 ./test_app/app.py
关键说明:
直接用Intel原生环境打包时,pip会优先拉取x86_64的轮子,而--target-arch只是告诉PyInstaller打包时的目标架构,无法改变已安装依赖的架构。通过arch -arm64强制切换运行架构,让Poetry安装对应Arm64的依赖,从根源解决架构不匹配问题。
内容的提问来源于stack exchange,提问作者Isaac Aderogba
相关产品推荐
相关产品推荐

