如何在Docker中高效安装指定版本Python?解决编译耗时问题
解决Docker中编译安装Python速度过慢的最优方案
源码编译Python确实耗时极长,尤其是加了--enable-optimizations参数后,针对你的场景,推荐以下几种最优方案,按速度从快到慢排序:
1. 用预编译包安装(首选)
Ubuntu 22.04可以通过deadsnakes PPA直接获取指定版本的预编译Python包,完全跳过编译步骤,速度能提升好几倍:
FROM --platform=linux/amd64 ubuntu:22.04 as base USER root ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 ENV DEBIAN_FRONTEND noninteractive COPY . /app WORKDIR /app COPY ZscalerCertificate.crt /usr/local/share/ca-certificates/ZscalerCertificate.crt RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y software-properties-common ca-certificates &&\ update-ca-certificates # 添加deadsnakes源,获取全版本Python包 RUN add-apt-repository ppa:deadsnakes/ppa && \ apt-get update && \ # 安装3.11.1版本及开发依赖 apt-get install -y python3.11 python3.11-dev python3.11-distutils && \ # 可选:把python3指向3.11版本 update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1 && \ rm -rf /var/lib/apt/lists/*
- 好处:安装过程通常5-10分钟搞定,不用折腾编译依赖,稳定可靠。
- 补充:deadsnakes PPA支持几乎所有Python版本,从3.6到最新版都有。
2. 优化源码编译(必须编译时用)
如果因为特殊需求必须源码编译,那可以从这几点优化提速:
- 并行编译:用
make -j$(nproc)代替make,让所有CPU核心一起干活,编译时间能砍一半以上。 - 去掉不必要的优化:如果不需要极致性能,删掉
--enable-optimizations参数,这个PGO优化步骤占了大部分编译时间。 - 合并Docker指令:把多个RUN合并成一个,减少镜像层的同时避免重复执行apt操作,优化后的编译部分代码如下:
# 前面的依赖安装部分保留,替换编译相关的RUN指令 RUN mkdir -p /python && cd /python && \ wget https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tgz && \ tar -zxf Python-3.11.1.tgz && \ cd Python-3.11.1 && \ ./configure --enable-optimizations && \ make -j$(nproc) install && \ # 清理临时文件,减小镜像体积 cd / && rm -rf /python
3. 直接用官方Python镜像(最省心)
如果你的业务环境允许直接基于官方Python镜像构建,这是最省心的方案:
# 用Ubuntu 22.04对应的官方Python镜像(jammy是22.04的代号) FROM --platform=linux/amd64 python:3.11.1-slim-jammy USER root ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 ENV DEBIAN_FRONTEND noninteractive COPY . /app WORKDIR /app COPY ZscalerCertificate.crt /usr/local/share/ca-certificates/ZscalerCertificate.crt RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y ca-certificates &&\ update-ca-certificates && \ rm -rf /var/lib/apt/lists/*
- 好处:官方镜像已经预编译好指定版本的Python,开箱即用,构建速度极快,而且镜像维护更规范,安全补丁也及时。
内容的提问来源于stack exchange,提问作者Python coder
相关产品推荐
相关产品推荐

