Ubuntu20.04 Django项目安装pymongo时Trio包依赖冲突报错
解决
AttributeError: module 'select' has no attribute 'epoll'依赖冲突问题 问题根源
你遇到的问题确实是依赖版本冲突导致的:pymongo 4.4.1依赖的httpcore包会自动拉取较新的Trio版本,而selenium 4.1.5固定依赖Trio 0.22.2,版本不匹配触发了底层IO模块的兼容性问题。
解决方案
1. 手动锁定兼容的依赖版本
在项目的requirements.txt中明确指定兼容的版本组合,强制保持依赖一致:
# 核心依赖锁定 selenium==4.1.5 pymongo==4.4.1 trio==0.22.2 # 指定兼容Trio 0.22.2的httpcore版本 httpcore==0.16.3
然后执行重装命令:
pip install -r requirements.txt --force-reinstall
2. 使用依赖管理工具自动解决冲突
用pip-tools自动生成兼容的依赖清单,避免手动版本匹配的麻烦:
- 安装pip-tools:
pip install pip-tools - 创建
requirements.in文件,写入你的直接依赖:Django==[你的Django版本] selenium==4.1.5 pymongo==4.4.1 - 生成兼容的
requirements.txt:pip-compile requirements.in - 安装依赖:
pip install -r requirements.txt
3. 重置虚拟环境排除干扰
如果之前的虚拟环境有残留的不兼容包,重新创建干净的虚拟环境:
# 删除旧虚拟环境(可选) rm -rf venv # 创建Python3.9专属虚拟环境 python3.9 -m venv venv # 激活环境 source venv/bin/activate # 按顺序安装依赖,确保版本兼容 pip install selenium==4.1.5 pip install pymongo==4.4.1 pip install Django==[你的Django版本]
4. 验证系统环境
确保你的Ubuntu 20.04环境支持epoll:在Python交互终端执行以下命令,确认返回True:
import select print(hasattr(select, 'epoll'))
内容的提问来源于stack exchange,提问作者Eyal Bismuth
相关产品推荐
相关产品推荐

