python:3.7-alpine镜像升级pip遇[Errno39]目录非空错误如何解决?
在python:3.7-alpine中升级pip规避[Errno 39]目录非空错误的方法
遇到的问题很明确:用python:3.7-alpine镜像时,执行官方推荐的pip升级命令/usr/local/bin/python -m pip install --upgrade pip会触发[Errno 39] Directory not empty: 'urllib3'错误,下面是几种可行的解决办法:
方法一:升级时跳过已安装的urllib3
直接在升级命令后添加--ignore-installed urllib3参数,强制pip忽略已存在的urllib3目录,避免冲突:
/usr/local/bin/python -m pip install --upgrade pip --ignore-installed urllib3
方法二:先卸载urllib3再升级pip
既然冲突根源是urllib3目录非空,先彻底卸载旧版本再升级:
/usr/local/bin/python -m pip uninstall -y urllib3 /usr/local/bin/python -m pip install --upgrade pip
方法三:Dockerfile中集成处理(如果是构建镜像场景)
如果是在Dockerfile里做镜像构建,直接把上述命令写入即可:
# 方式一:带参数直接升级 RUN /usr/local/bin/python -m pip install --upgrade pip --ignore-installed urllib3 # 方式二:先卸载再升级 RUN /usr/local/bin/python -m pip uninstall -y urllib3 RUN /usr/local/bin/python -m pip install --upgrade pip
问题原因
这个错误是因为python:3.7-alpine镜像预装的urllib3目录结构,和pip升级过程中要部署的新版本urllib3存在目录占用冲突,pip无法自动清理非空目录,所以通过跳过已安装项或提前卸载就能解决。
内容的提问来源于stack exchange,提问作者Evan Carroll
相关产品推荐
相关产品推荐

