如何在Ubuntu 22.04镜像中安装指定版本Python(3.10.10)
在Ubuntu 22.04 Docker镜像中安装指定版本Python(3.10.10)
方法一:使用deadsnakes PPA(推荐,步骤简单)
Ubuntu官方源提供的Python版本有限,deadsnakes是维护Python旧版本/特定版本的第三方PPA,能快速安装指定版本。
完整Dockerfile示例:
FROM ubuntu:22.04 # 设置非交互式安装,避免构建时弹出配置提示 ENV DEBIAN_FRONTEND=noninteractive # 更新系统包并安装基础依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ software-properties-common \ curl \ && rm -rf /var/lib/apt/lists/* # 添加deadsnakes PPA源 RUN add-apt-repository ppa:deadsnakes/ppa # 安装Python 3.10.10及配套工具 RUN apt-get update && apt-get install -y --no-install-recommends \ python3.10=3.10.10-1+focal1 \ python3.10-dev \ python3.10-distutils \ && rm -rf /var/lib/apt/lists/* # 为Python 3.10安装匹配版本的pip RUN curl https://bootstrap.pypa.io/get-pip.py | python3.10 # 可选:将python3命令指向python3.10,简化调用 RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
说明:
- 指定版本号
python3.10=3.10.10-1+focal1确保安装的是精确的3.10.10版本 python3.10-dev用于后续编译依赖Python扩展的第三方库- 通过get-pip.py安装pip,保证与Python版本完全匹配
方法二:源码编译(适合自定义编译配置场景)
如果需要启用特定编译特性、优化参数,可选择从源码编译安装:
完整Dockerfile示例:
FROM ubuntu:22.04 ENV DEBIAN_FRONTEND=noninteractive # 安装编译所需的依赖包 RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ libssl-dev \ zlib1g-dev \ libbz2-dev \ libreadline-dev \ libsqlite3-dev \ wget \ curl \ llvm \ libncurses5-dev \ libncursesw5-dev \ xz-utils \ tk-dev \ libffi-dev \ liblzma-dev \ && rm -rf /var/lib/apt/lists/* # 下载Python 3.10.10源码包并解压 RUN wget https://www.python.org/ftp/python/3.10.10/Python-3.10.10.tgz \ && tar -xf Python-3.10.10.tgz \ && cd Python-3.10.10 # 配置编译选项,--enable-optimizations开启性能优化,--prefix指定安装路径 RUN ./configure --enable-optimizations --prefix=/usr/local # 编译并安装,-j$(nproc)利用所有CPU核心加速编译 RUN make -j$(nproc) && make altinstall # 清理源码包和临时文件,减小镜像体积 RUN cd .. && rm -rf Python-3.10.10.tgz Python-3.10.10 # 可选:将python3命令指向编译好的python3.10 RUN update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 1
说明:
make altinstall避免覆盖系统默认的Python版本--enable-optimizations启用PGO性能优化,会延长编译时间但提升运行效率
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

