You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ubuntu18.04的Dockerfile中将默认python3设为Python3.8

问题根因

Dockerfile中每条RUN指令都会启动独立的非交互式shell子进程执行命令,alias的作用域仅限当前shell会话,进程退出后配置直接丢失;且非交互式shell默认不加载别名规则,哪怕把别名定义和版本查询写在同一条RUN里,别名也不会生效,因此查到的python3版本始终是系统默认的3.6.9。
另外别名仅对交互式终端生效,后续构建过程跑的脚本、容器启动时运行的服务进程都读不到别名配置,就算把别名写到.bashrc里也覆盖不了构建阶段的调用,根本不适合用来做镜像内的默认版本切换。

解决方案

用Ubuntu/Debian自带的update-alternatives工具管理软链接优先级,切换默认python3版本,这是系统层面的配置,对所有shell场景、构建进程、服务进程都生效,不会出现别名那种作用域失效的问题。
具体调整步骤:

  • 先调整python3相关依赖的安装顺序:先装python3.8,再配置默认版本,最后装pip和所有python3依赖,避免包装到python3.6的路径下,导致python3.8环境找不到依赖。
  • 把原Dockerfile里python3相关的配置段替换成下面的写法:
############## python3 packages ###############
RUN apt-get update && \
    # 安装python3.8及distutils依赖,避免后续pip安装报错
    apt-get install -y python3.8 python3.8-distutils && \
    # 注册python版本到alternatives管理,末尾数字为优先级,数值越高优先级越高
    update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 && \
    update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2 && \
    # 验证版本,此处输出应为Python 3.8.x
    python3 --version && \
    # 安装pip
    apt-get install -y python3-pip && \
    # 批量安装所有需要的python3依赖
    python3 -m pip install numpy pandas sqlalchemy boto3 pymysql pymongo pyfaidx
  • 额外注意点:
    • 如果配置完后pip调用仍指向3.6版本,可以通过官方get-pip.py引导脚本为python3.8安装匹配版本的pip即可
    • 尽量把同类型的安装命令合并到同一个RUN指令里,减少镜像层数,能有效缩小最终镜像体积
    • 配置完成后不需要额外加别名或者环境变量,所有场景下调用python3都会默认指向python3.8,包括后续构建过程和容器运行时

内容的提问来源于stack exchange,提问作者One thousand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:00:49