macOS BigSur下poetry安装依赖报CPython2macOsArmFramework属性错误
问题根因
该报错由两个问题共同触发:
- 环境内
virtualenv版本过低,未适配Apple Silicon(ARM架构)macOS的CPython框架识别逻辑,缺失CPython2macOsArmFramework类定义 - pyenv多版本路径混乱:当前pyenv默认指向Python 3.8.6,但报错栈加载的是Python 3.8.2路径下的依赖文件,poetry实际调用的解释器和预期环境不一致
排查步骤
- 执行
arch确认终端运行架构,区分是原生arm64还是Rosetta转译的x86_64环境 - 执行
poetry env info查看poetry绑定的Python解释器路径,确认是否存在版本串用 - 执行
pip show virtualenv查看virtualenv版本,版本低于20.4.0即为未适配ARM架构的旧版本
解决方案
按优先级依次尝试:
- 升级依赖修复版本兼容问题
# 升级pip到最新版 pip install --upgrade pip # 升级virtualenv到适配ARM架构的稳定版 pip install --upgrade virtualenv # 删除已生成的损坏虚拟环境 poetry env remove python3.8 # 重新创建环境安装依赖 poetry shell && poetry install
- 修复pyenv路径混乱问题
# 固定全局Python版本为已安装的3.8.6 pyenv global 3.8.6 # 刷新pyenv路径缓存 pyenv rehash
执行完成后重开终端,再重试安装命令。
3. 重装poetry(上述步骤无效时使用)
# 卸载旧版poetry pip uninstall poetry -y # 安装最新稳定版poetry pip install poetry
安装完成后重载shell配置即可正常使用。
4. 临时绕过方案(不想重装依赖时使用)
打开报错路径对应的mac_os.py文件:~/.pyenv/versions/3.8.2/lib/python3.8/site-packages/virtualenv/create/via_global_ref/builtin/cpython/mac_os.py
在文件末尾添加两行映射代码:
CPython2macOsArmFramework = CPython2macOsFramework CPython3macOsArmFramework = CPython3macOsFramework
保存后重新执行安装命令即可,该方案为临时兼容手段,长期使用建议优先选择升级依赖的方案。
内容的提问来源于stack exchange,提问作者godhar
相关产品推荐
相关产品推荐

