使用uv运行pytest出现Python版本不符警告,如何解决?
Python版本与依赖警告问题排查与解决
问题根源分析
出现这种版本不一致的情况,大概率是虚拟环境隔离不彻底或者某个依赖/工具偷偷调用了系统全局的Python包:
- 全局安装的pytest或测试依赖没被uv虚拟环境覆盖,导致加载了系统Python3.9的certifi模块
- 环境变量
PYTHONPATH被设置过,强制Python加载全局路径下的包 - certifi作为系统级依赖被某些工具间接调用,绕过了uv的虚拟环境
解决步骤
1. 重建并确保虚拟环境隔离
先删除旧虚拟环境,重新创建适配Python3.12.5的环境:
uv venv --python 3.12.5
重新安装所有依赖(包括pytest),确保所有工具都在虚拟环境内:
uv pip install -r requirements.txt uv pip install pytest
再次执行测试:
uv run pytest
2. 检查并清理干扰性环境变量
查看是否有PYTHONPATH指向系统Python路径:
echo $PYTHONPATH
如果输出包含/usr/local/lib/python3.9/site-packages,临时清空后测试:
unset PYTHONPATH uv run pytest
如果有效,建议在shell配置文件(如~/.bashrc或~/.zshrc)中移除相关PYTHONPATH设置。
3. 锁定certifi版本并强制重装
在requirements.txt中明确指定适配Python3.12的certifi版本:
certifi>=2024.6.2
强制重新安装依赖,确保加载虚拟环境内的certifi:
uv pip install -r requirements.txt --force-reinstall
4. 确认pytest安装位置
检查pytest是否在虚拟环境内:
uv run which pytest
若输出指向全局路径(如/usr/local/bin/pytest),卸载全局pytest:
pip uninstall pytest -y
再用uv重新安装:
uv pip install pytest
内容的提问来源于stack exchange,提问作者fedest
相关产品推荐
相关产品推荐

