Mac M1环境下安装gevent==21.8.0失败的技术求助
问题描述
在M1芯片设备上,通过pip-sync或直接执行pip install gevent==21.8.0安装指定版本时出现矛盾报错:明明版本列表中显示存在21.8.0,但提示找不到匹配的发行版。报错详情如下:
Collecting gevent==21.8.0 Using cached gevent-21.8.0.tar.gz (6.2 MB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... error ERROR: Could not find a version that satisfies the requirement gevent==21.8.0 (from versions: 0.9.2, 0.9.3, 0.10.0, 0.11.0, 0.11.1, 0.11.2, 0.12.0, 0.12.1, 0.12.2, 0.13.0, 0.13.1, 0.13.2, 0.13.3, 0.13.4, 0.13.5, 0.13.6, 0.13.7, 0.13.8, 1.0, 1.0.1, 1.0.2, 1.1a1, 1.1a2, 1.1b1, 1.1b2, 1.1b3, 1.1b4, 1.1b5, 1.1b6, 1.1rc1, 1.1rc2, 1.1rc3, 1.1rc4, 1.1rc5, 1.1.0, 1.1.1, 1.1.2, 1.2a1, 1.2a2, 1.2.0, 1.2.1, 1.2.2, 1.3a1, 1.3a2, 1.3b1, 1.3b2, 1.3.0, 1.3.1, 1.3.2, 1.3.2.post0, 1.3.3, 1.3.4, 1.3.5, 1.3.6, 1.3.7, 1.4.0, 1.5a1, 1.5a2, 1.5a3, 1.5a4, 1.5.0, 20.4.0, 20.5.0, 20.5.1, 20.5.2, 20.6.0, 20.6.1, 20.6.2, 20.9.0, 20.12.0, 20.12.1, 21.1.0, 21.1.1, 21.1.2, 21.8.0, 21.12.0) ERROR: No matching distribution found for gevent==21.8.0
已尝试操作:
- 更换pip/python版本:21.3.1/3.6.15、22.2.2/3.8.13
- 直接执行
pip install gevent==21.8.0而非通过pip-sync
问题原因
核心原因是M1芯片的arm64架构没有预编译的gevent==21.8.0 wheel包:PyPI上虽存在该版本的源码包,但缺少对应arm64的预编译包。pip尝试从源码编译时,因依赖(如libev、cython版本不兼容)编译失败,最终触发“找不到发行版”的矛盾报错。
解决方法
方法1:升级到兼容的gevent版本
gevent从21.12.0开始正式支持M1芯片的arm64架构,若项目依赖允许,直接安装该版本或更高稳定版:
# 安装指定兼容版本 pip install gevent==21.12.0 # 或升级到最新稳定版 pip install gevent --upgrade
方法2:通过Rosetta 2模拟x86_64架构安装
若必须使用gevent==21.8.0,可借助Rosetta 2模拟x86环境:
- 右键终端图标,选择“使用Rosetta打开”
- 创建x86_64架构的Python虚拟环境(以pyenv为例):
# 安装x86版本的Python 3.8.13 pyenv install 3.8.13 --patch < <(curl -s https://github.com/pyenv/pyenv/pull/1900/commits/867d8f0b0ce2c280b37241ca1380d472f08260e0.patch) pyenv local 3.8.13 # 创建并激活虚拟环境 python -m venv venv_x86 source venv_x86/bin/activate - 在该虚拟环境中执行安装命令:
pip install gevent==21.8.0
方法3:手动从源码编译安装
若以上方法不适用,尝试手动编译:
- 安装编译依赖:
brew install libev cython - 设置编译环境变量:
export CFLAGS="-I$(brew --prefix libev)/include" export LDFLAGS="-L$(brew --prefix libev)/lib" - 强制从源码编译安装:
pip install gevent==21.8.0 --no-binary :all:
注意:此方法可能遇到更多依赖兼容问题,需逐个排查解决。
内容的提问来源于stack exchange,提问作者Jonahtang
相关产品推荐
相关产品推荐

