如何在Docker中为Python 3.7配置对应pip并将其设为默认Python版本?
解决Python 3.7与pip版本不匹配的问题
首先,问题的核心在于Ubuntu 18.04官方源中的python3-pip包是与系统默认的Python 3.6绑定的——哪怕你删除了Python 3.6,通过apt install python3-pip安装的pip依然会默认关联Python 3.6的路径,这就是为什么你删除3.6后问题依旧的原因。
下面给你两种可靠的解决思路:
思路一:为Python 3.7单独安装pip
绕过apt的python3-pip,直接用Python 3.7自带的逻辑安装对应版本的pip,确保pip完全属于Python 3.7环境。
修改后的Dockerfile示例:
FROM nvcr.io/nvidia/l4t-base:r32.6.1 as base COPY requirements.txt /tmp/r.txt # 安装Python3.7及必要依赖 RUN apt update && apt install -y python3.7 curl gcc # 为Python3.7安装专属pip RUN curl https://bootstrap.pypa.io/get-pip.py | python3.7 # 可选:构建时验证pip版本,确保关联正确 RUN pip3 --version # 此时pip3会将依赖安装到Python3.7的环境中 RUN pip3 install -r /tmp/r.txt
为什么这能生效?
通过python3.7运行官方get-pip脚本,会直接将pip安装到Python 3.7的site-packages目录下,同时在/usr/local/bin生成指向Python 3.7的pip和pip3软链接,彻底替代系统原有的pip关联。
思路二:通过update-alternatives同时管理Python和pip版本
如果你需要保留Python 3.6,同时让pip版本随Python默认版本同步切换,可以给pip也设置alternatives规则:
修改后的Dockerfile示例:
FROM nvcr.io/nvidia/l4t-base:r32.6.1 as base COPY requirements.txt /tmp/r.txt # 安装Python3.7、编译依赖及curl RUN apt update && apt install -y python3.7 python3.7-dev gcc curl # 为Python3.7安装专属pip RUN curl https://bootstrap.pypa.io/get-pip.py | python3.7 # 配置Python版本切换规则,权重3.7更高 RUN update-alternatives --install /usr/local/bin/python python /usr/bin/python3.6 20 && \ update-alternatives --install /usr/local/bin/python python /usr/bin/python3.7 40 # 配置pip版本切换规则,与Python权重对应 RUN update-alternatives --install /usr/local/bin/pip pip /usr/local/bin/pip3.7 40 && \ update-alternatives --install /usr/local/bin/pip pip /usr/bin/pip3 20 # 设置默认Python和pip为3.7 RUN update-alternatives --set python /usr/bin/python3.7 && \ update-alternatives --set pip /usr/local/bin/pip3.7 # 验证版本匹配 RUN python --version && pip --version # 安装依赖 RUN pip install -r /tmp/r.txt
关键说明
这里我们先给Python3.7安装独立的pip(路径是/usr/local/bin/pip3.7),然后通过update-alternatives给pip命令设置两个候选:一个是系统原有的pip(对应3.6),一个是Python3.7的pip,权重和Python的权重对应,这样切换Python版本时,pip也会自动同步。
额外注意事项
- 避免直接使用
apt install python3-pip,因为它会强制关联系统默认的Python版本; - 如果你的
requirements.txt中有需要编译的包(比如numpy、PyTorch),务必安装python3.7-dev和gcc,否则编译会失败; - 构建完成后可以进入容器执行
pip --version和python --version,确认两者的Python版本一致。
内容的提问来源于stack exchange,提问作者Kracozebr
相关产品推荐
相关产品推荐

