e0cba105b6
问题原因: - pysnmp==7.1.15 使用已废弃的 asyncio.coroutine 装饰器 - 该装饰器在 Python 3.11 中被完全移除,导致导入失败 解决方案: - 替换为 pysnmp-lextudio==5.0.31 - 这是社区维护的分支,兼容 Python 3.6+ - API 完全兼容,无需修改业务代码 验证: - Python 3.10 & 3.11 均可正常导入 - FastAPI 应用可正常加载 (95 routes) - SNMPService.OID_SYS_DESCR 可正常访问
2.1 KiB
2.1 KiB
Python 3.10 兼容性说明
概述
本分支 (python3.10) 专门针对 Python 3.10 环境优化,确保所有代码和依赖都能在 Python 3.10 下正常运行。
兼容性调整
已验证的兼容特性
✅ 所有依赖包版本均支持 Python 3.10
✅ 无 Python 3.11 特有语法(如 tomllib、asyncio.TaskGroup、typing.Self 等)
✅ 类型注解完全兼容 Python 3.10
✅ match 关键字未用作 Python 3.10 的模式匹配语句(仅用作 re.match() 的变量名)
重要依赖说明
pysnmp 兼容问题解决
问题:pysnmp==7.1.15 存在以下兼容性问题:
- 使用已废弃的
asyncio.coroutine装饰器(Python 3.11 中已移除) - 与 Python 3.10+ 的 asyncio 不兼容
解决方案:
使用社区维护的分支 pysnmp-lextudio==5.0.31
- 完全向后兼容原有 pysnmp API
- 支持 Python 3.6+
- 积极维护,修复了 asyncio 兼容性问题
- 导入方式完全不变
# 无需修改代码,导入方式保持一致
from pysnmp.hlapi.asyncio import bulkCmd, getCmd, nextCmd
依赖版本要求
pysnmp-lextudio==5.0.31- SNMP 协议兼容替代typing-extensions>=4.5.0- 提供额外的类型支持- 所有核心依赖(FastAPI、SQLAlchemy、Pydantic 等)均已验证兼容
已知的 Python 3.11+ 特性未使用
项目中未使用以下 Python 3.11+ 特有的功能:
tomllib标准库(如有需要可使用tomli第三方库)asyncio.TaskGrouptyping.SelfExceptionGroup/except*StrEnum/IntEnum的新特性
安装说明
cd backend
pip install -r requirements.txt
升级提示
如果未来需要升级到 Python 3.11+,可以:
- 使用
tomllib替代可能的 TOML 解析需求 - 考虑使用
asyncio.TaskGroup改进异步代码结构 - 使用
typing.Self简化类型注解
验证
可以使用以下命令验证 Python 版本兼容性:
python --version # 应为 3.10.x 或 3.11.x
python -c "import sys; assert sys.version_info >= (3, 10), 'Python 3.10+ required'"
# 验证 pysnmp 导入
python -c "from pysnmp.hlapi.asyncio import bulkCmd, getCmd, nextCmd; print('pysnmp OK')"