如何让Docker容器使用已安装的最新版本Python且不影响系统级Python
问题原因
你使用的node:9-slim基础镜像基于Debian 9(Stretch),其官方软件源中默认的python3版本固定为3.4.2,直接执行apt install python3只会安装源内默认版本,无法获取更高版本的Python。
解决方案
方案一:第三方源安装+优先级配置(保留系统原有Python)
该方案完全不破坏系统自带的Python3.4,仅将你安装的高版本Python设为用户默认调用版本,Dockerfile修改如下:
FROM node:9-slim # 安装源管理依赖、添加Python第三方源 RUN apt-get update || : && apt-get install -y --no-install-recommends \ software-properties-common \ gnupg2 \ && add-apt-repository ppa:deadsnakes/ppa -y \ && apt-get update # 安装指定版本Python(此处以3.9为例,可替换为你需要的3.8/3.10等版本号) RUN apt-get install -y --no-install-recommends \ python3.9 \ python3.9-distutils \ && curl -sS https://bootstrap.pypa.io/get-pip.py | python3.9 # 配置优先级,将高版本Python设为默认python3、pip3 RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.4 1 \ && update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2 \ && update-alternatives --install /usr/bin/pip3 pip3 /usr/local/bin/pip3.9 2 # 原有依赖安装逻辑 COPY requirements.txt /project RUN pip3 install -r requirements.txt
验证说明:容器内执行
python3 --version返回你安装的高版本号,执行python3.4 --version仍可调用系统原有版本,不会影响系统级依赖的正常运行。
方案二:多阶段构建复用官方Python镜像(更稳定无冗余配置)
如果不需要适配特殊系统依赖,推荐使用该方案,无需添加第三方源,直接复用官方纯净的Python二进制文件:
# 第一阶段:拉取对应版本的官方Python镜像 FROM python:3.9-slim AS python-src # 第二阶段:使用你原有的node基础镜像 FROM node:9-slim # 复制高版本Python的二进制、依赖库、pip到当前镜像 COPY --from=python-src /usr/local/bin/python3.9 /usr/local/bin/ COPY --from=python-src /usr/local/lib/python3.9 /usr/local/lib/python3.9 COPY --from=python-src /usr/local/bin/pip3 /usr/local/bin/pip3.9 # 配置软链接设为默认调用版本 RUN ln -sf /usr/local/bin/python3.9 /usr/bin/python3 \ && ln -sf /usr/local/bin/pip3.9 /usr/bin/pip3 # 原有依赖安装逻辑 COPY requirements.txt /project RUN pip3 install -r requirements.txt
该方案的优势是Python版本纯净无第三方源依赖,不会和系统原有Python版本产生任何冲突。
内容的提问来源于stack exchange,提问作者Nat
相关产品推荐
相关产品推荐

