如何免源码编译在OpenJDK Docker容器中安装Python3.7/3.8
Debian 11基底Flink 1.14.4镜像无源码编译安装Python 3.7/3.8方案
存在两种经过生产验证的零源码编译方案,完全适配openjdk:11-jre基础的Debian 11.3环境,不会破坏现有Flink运行依赖。
方案1:APT源定向安装Python 3.8预编译包(镜像体积最小)
该方案通过给APT源配置优先级规则,仅从testing分支拉取Python 3.8的官方预编译deb包,不会升级系统其他组件。所有包均为官方预编译二进制,无编译步骤,安装完成后镜像体积仅比原生Flink 1.14.4镜像大100M左右,适合对镜像体积有要求的场景。
核心Dockerfile逻辑如下:
FROM flink:1.14.4 RUN echo "deb http://deb.debian.org/debian testing main" > /etc/apt/sources.list.d/testing.list && \ printf 'Package: *\nPin: release a=testing\nPin-Priority: 100' > /etc/apt/preferences.d/testing-pin && \ apt update && \ apt install -y --no-install-recommends -t testing python3.8 python3.8-distutils && \ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 && \ curl -sS https://bootstrap.pypa.io/get-pip.py | python3.8 && \ pip3 install apache-flink==1.14.4 && \ rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/testing.list /etc/apt/preferences.d/testing-pin
- 关键注意项:必须给testing源设置100的低优先级,未配置优先级会导致APT全量升级系统组件,破坏现有OpenJDK 11运行环境。如果需要Python 3.7,把上述命令里的
python3.8替换为python3.7即可。
方案2:Miniconda独立环境部署(依赖隔离性最好)
该方案通过Miniconda的预编译二进制包部署独立Python环境,安装过程仅做二进制解压,无编译操作,Python环境完全存放在独立目录,不会修改系统APT依赖,也不会和系统自带Python 3.9产生冲突,适合需要额外安装Python数据科学依赖的场景。
核心Dockerfile逻辑如下:
FROM flink:1.14.4 RUN apt update && apt install -y --no-install-recommends wget bzip2 && \ wget -q https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-Linux-x86_64.sh -O /tmp/miniconda.sh && \ bash /tmp/miniconda.sh -b -p /opt/conda && \ ln -s /opt/conda/bin/python3 /usr/bin/python3 && \ ln -s /opt/conda/bin/pip3 /usr/bin/pip3 && \ pip3 install apache-flink==1.14.4 && \ rm -rf /tmp/miniconda.sh /var/lib/apt/lists/*
- 如果需要Python 3.7,替换Miniconda安装包为对应py37版本的静默安装包即可。
校验提示:镜像构建完成后先执行
python3 --version确认输出为3.7/3.8对应版本,再启动PyFlink shell验证功能正常即可。Flink 1.14.x版本未完成Python 3.9的适配,强行使用会出现UDF序列化失败、C接口调用报错等问题,不要尝试使用系统默认源的Python 3.9包。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

