DVC执行dvc get命令遇连接重置及urllib3未定义问题求助
解决DVC get命令克隆仓库失败的问题
问题重现
执行DVC官方教程中的命令:
dvc get -v https://github.com/iterative/dataset-registry tutorials/versioning/data.zip
出现克隆失败,核心报错包括:
ConnectionResetError: [Errno 104] Connection reset by peerNameError: name 'urllib3' is not defined
原因分析
从错误栈可以看出:
- 首先出现网络连接重置,触发urllib3的重试机制
- dulwich(DVC依赖的Git后端库)在处理urllib3异常时,未正确导入urllib3模块,导致NameError,最终克隆失败
- 可能是dulwich版本bug、依赖安装不完整或版本不兼容导致
解决方案
1. 修复dulwich的urllib3导入问题
找到dulwich的client.py文件(路径示例:/usr/local/lib/python3.8/site-packages/dulwich/client.py),定位到_http_request函数(报错行在2241附近),在函数开头添加urllib3导入:
import urllib3
或者直接在文件顶部的导入区添加该语句。
2. 升级/重装相关依赖
执行命令重新安装或升级dulwich、urllib3和DVC,确保依赖版本兼容:
# 升级依赖 pip install --upgrade dulwich urllib3 dvc # 或彻底重装 pip uninstall -y dulwich urllib3 dvc pip install dvc
3. 切换DVC的Git后端到系统Git
绕过dulwich,使用系统自带的Git作为DVC的后端:
# 临时生效(当前终端会话) export DVC_GIT_BACKEND=gitpython # 永久生效(写入DVC配置) dvc config core.git_backend gitpython
确保已安装gitpython依赖:
pip install gitpython
4. 排查网络问题
验证与GitHub的连接是否正常:
curl -v https://github.com/iterative/dataset-registry/info/refs?service=git-upload-pack
如果仍出现连接重置,需检查:
- 防火墙/安全组是否放行443端口
- 是否需要配置代理(若在受限网络环境)
- 网络运营商是否存在GitHub访问限制
验证
修复后重新执行原DVC命令,确认文件能正常下载。
内容的提问来源于stack exchange,提问作者Patrícia
相关产品推荐
相关产品推荐

