Docker中指定安装Python3.8后ipython运行版本为3.6.9不匹配问题
问题原因
- Ubuntu 18.04 默认的系统 Python3 版本为 3.6.9,你安装
python3.8仅新增了对应版本的二进制文件,并未替换系统默认的python3、pip3软链接。 - 执行
apt-get install python3-pip时,apt 会自动安装绑定系统默认 Python3.6 版本的 pip,后续执行pip3 install ipython实际是将 ipython 安装到 Python3.6 的第三方包目录下,启动后自然关联的是 3.6 版本。
修复方案
方案1:使用 Python3.8 专属 pip 安装 ipython
修改 Dockerfile 如下,直接为 Python3.8 安装对应版本的 pip,避免调用绑定 3.6 的系统默认 pip:
FROM ubuntu:18.04 RUN apt-get update -y && \ apt-get install python3.8 python3.8-venv -y && \ # 用Python3.8自带的ensurepip模块安装对应版本的pip python3.8 -m ensurepip --upgrade && \ # 调用Python3.8专属的pip安装ipython pip3.8 install ipython && \ # 清理缓存减小镜像体积 apt-get clean && \ rm -rf /var/lib/apt/lists/*
构建后启动容器,直接执行ipython就会默认关联 Python3.8,也可以执行python3.8 -m IPython手动确认版本。
方案2:修改系统默认 Python3 软链接
如果你需要全局python3、pip3命令默认指向 3.8 版本,可以在 Dockerfile 中添加软链接修改步骤:
FROM ubuntu:18.04 RUN apt-get update -y && \ apt-get install python3.8 python3-pip -y && \ # 将Python3.8设置为系统默认python3版本 update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 && \ update-alternatives --set python3 /usr/bin/python3.8 && \ pip3 install ipython && \ # 清理缓存减小镜像体积 apt-get clean && \ rm -rf /var/lib/apt/lists/*
注意:修改系统默认Python版本可能导致部分依赖系统原生Python3.6的系统工具运行异常,仅在确认无相关依赖的场景下使用
方案3:使用官方Python镜像(推荐)
如果没有强制要求基于 Ubuntu 18.04 构建镜像,直接使用官方预编译的 Python3.8 镜像可以完全规避版本冲突问题,Dockerfile 更简洁轻量:
FROM python:3.8-slim RUN pip install ipython
内容的提问来源于stack exchange,提问作者OrenIshShalom
相关产品推荐
相关产品推荐

