如何在Databricks中强制使用低版本Python库解决依赖冲突
在Databricks Runtime 13.3中解决transformers与urllib3依赖冲突的方案
由于Databricks Runtime预装的urllib3 2.1.0和transformers存在依赖冲突,且无法卸载预装库,可通过以下几种方式强制使用兼容的低版本urllib3:
方法1:会话级临时覆盖(推荐)
仅对当前Notebook会话生效,不影响集群其他任务:
- 在Notebook首个单元格执行以下代码,让Python优先加载指定版本的urllib3:
import sys # 安装指定版本到临时目录 !pip install --target=/tmp/urllib3_custom urllib3==1.26.18 # 将临时目录加入sys.path最前端,确保优先加载 sys.path.insert(0, '/tmp/urllib3_custom') # 验证版本是否生效 import urllib3 print(urllib3.__version__) # 预期输出1.26.18
完成后直接导入transformers即可,该方法不会修改集群全局环境,适合快速测试。
方法2:集群初始化脚本(全局生效)
如果需要整个集群都使用兼容版本,可通过初始化脚本配置:
- 创建Shell脚本
install_urllib3.sh,内容如下:
#!/bin/bash # 强制重装指定版本到Databricks Python库目录 pip install --upgrade --force-reinstall urllib3==1.26.18 --target=/databricks/python/lib/python3.9/site-packages/
- 将脚本上传至DBFS(如
dbfs:/databricks/scripts/install_urllib3.sh) - 编辑集群配置,在「初始化脚本」中添加该DBFS路径,重启集群后,全局Python环境会优先使用指定版本的urllib3。
方法3:虚拟环境隔离
创建独立虚拟环境彻底隔离依赖:
# 安装虚拟环境工具 !pip install virtualenv # 创建虚拟环境 !virtualenv /tmp/venv_transformers # 在虚拟环境中安装兼容的依赖 !source /tmp/venv_transformers/bin/activate && pip install urllib3==1.26.18 transformers # 示例:在虚拟环境中运行代码 import subprocess run_result = subprocess.run( ["/tmp/venv_transformers/bin/python", "-c", "import urllib3; import transformers; print('urllib3版本:', urllib3.__version__); print('transformers导入成功')"], capture_output=True, text=True ) print(run_result.stdout)
该方法适合需要完全独立依赖环境的场景,但代码需通过虚拟环境的Python解释器执行。
注意事项
- 确认transformers兼容的urllib3版本(1.26.x系列适配绝大多数transformers稳定版本)
- 会话级方法是最安全的测试方式,不会影响其他用户任务
- 全局初始化脚本需确认集群所有任务均兼容低版本urllib3,避免引发其他依赖问题
内容的提问来源于stack exchange,提问作者ddd
相关产品推荐
相关产品推荐

