首页 > 编程语言 >如何在基础镜像中安装指定python版本

如何在基础镜像中安装指定python版本

时间:2022-09-18 01:33:31浏览次数:155  
标签:版本 python devel PYTHON VERSION && 镜像 python3

背景

由于规范要求要使用指定的镜像版本,但是由于该镜像中的python与我使用的版本有差异,怕引起一些不必要的兼容问题,所以我需要自己按基础镜像基础上安装对应版本的python。

Dockerfile

直接上最终dockerfile,为什么这样写,后面说到。

FROM centos:7
# 指定工作目录
WORKDIR /work

ARG PYTHON_VERSION=3.8.14 

ENV WORK_PATH=/work

COPY Python-$PYTHON_VERSION.tgz  .

# 安装python相关的依赖和编译环境
RUN set -ex \
  && yum -y install zlib-devel bzip2-devel libffi-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc make\
  && yum clean all \
  && tar --extract -f $WORK_PATH/Python-$PYTHON_VERSION.tgz \
  && cd $WORK_PATH/Python-$PYTHON_VERSION/ \
  && mkdir /usr/local/python3 \
  # && ./configure --prefix=/usr/local/python3 --enable-optimizations \  #有bug不能加 --enable-optimizations
  && ./configure --prefix=/usr/local/python3 \
  && make clean \
  && make && make install \
  && ln -s /usr/local/python3/bin/python3 /usr/bin/python3 \
  && ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 \
  # 开始删除垃圾
  && rm -r $WORK_PATH/Python-$PYTHON_VERSION* \
  && yum -y remove zlib-devel bzip2-devel libffi-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc make \
  # 打印python 版本 和 pip版本
  && python3 --version \
  && pip3 -V \

优化过程

增加变量PYTHON_VERSION

使用PYTHON_VERSION来定义版本,这样有个好处就是后续如果要更新,换其他版本的python,修改该字段即可,而不用全局改很多地方。

...
ARG PYTHON_VERSION=3.8.14 

ENV WORK_PATH=/work

COPY Python-$PYTHON_VERSION.tgz  .

# 安装python相关的依赖和编译环境
RUN set -ex \
  ....
  && tar --extract -f $WORK_PATH/Python-$PYTHON_VERSION.tgz \
  && cd $WORK_PATH/Python-$PYTHON_VERSION/ \
  ...
  # 开始删除垃圾
  && rm -r $WORK_PATH/Python-$PYTHON_VERSION* \

...

命令集中

一条命令是一层,这样的好处整个docker就不会分多层,如果这段没有被修改,再次build的时候会加速

删除编译工具和安装文件

没删除这些的时候538M

删除后329M,直接减少了差不多200M

总结

官方提供的python镜像在alpine3.16基础上只加了几十M,人麻了。

参考:

https://blog.csdn.net/dragoo1/article/details/120403364
https://blog.csdn.net/lian01110a/article/details/120467814

标签:版本,python,devel,PYTHON,VERSION,&&,镜像,python3
From: https://www.cnblogs.com/Klay/p/16704063.html

相关文章

  • 安全巡检 python HTML报告
    1.报表模板[root@yinliao-yanshireport_jinja2]#catxunjian_table.html<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"><titl......
  • python调用第三方接口
    为什么要用python调用第三方接口?以往总是会想当然的认为,调用第三方接口只能是前端的工作,但最近在做一个程序时发现,这项工作完全可以使用python来解决,挺惊喜的,毕竟这样就可......
  • python re包 正则表达式
    Python正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。在python中提供了一个使用正则的模块re。re模块使Python语言......
  • 【Python小工具】文件解压
    文件解压#-*-coding:utf-8-*-importosimportsysimporttimeimportshutilimportfiletypeimportgzipimporttarfileimportzipfileclassFileUtils:......
  • 深度学习库 SynapseML for .NET 发布0.1 版本
    2021年11月微软开源一款简单的、多语言的、大规模并行的机器学习库SynapseML(以前称为MMLSpark),以帮助开发人员简化机器学习管道的创建。具体参见[1]微软深度学习库Synap......
  • yum命令出现“Error: Cannot find a valid baseurl for repo: base”解决办法 centos
    yum命令出现“Error:Cannotfindavalidbaseurlforrepo:base”解决办法今天:博主用yum命令也出现了这个问题,详情如下:[[email protected]]#yumlistphpLoad......
  • python中的defaultdict类型
    Python内置的字典类型挺好用,但有一个很麻烦的缺点,当查询的键不存在时,就会报KeyError的错误,影响程序的正常使用,虽然可以用异常捕获处理,但有时候还是不太方便. ......
  • 【AGC】集成性能管理1.6.1.301版本SDK报错问题
    ​【问题描述】近期有些开发者更新了性能管理最新的1.6.1.301版本SDK,但是编译时出现了以下错误:​ 【分析复现】该问题看报错信息是未找到“com.huawei.hms:hianalyti......
  • VSCode安装和Python安装及其配置【转载】
    VisualStudioCode(VSCode)是微软出品的一款可扩展的轻量级开源编辑器,并且支持全平台系统。这些特性使得VSCode颇受欢迎,可以说是目前最火的代码编辑器之一了,在程序员圈子里,......
  • python :生成条形码
    1importbarcode2frombarcode.writerimportImageWriter34#Definecontentofthebarcodeasastring5number=input("Enterthecodetogenerateba......