我需要创建一个docker图像,其中包含两个版本的Python,比如说3.9&3.10.

我们的 idea 是安装这两个版本的Python,然后安装来自Python3.9的pip/heel/lib目录,因为它是我们想要使用的默认版本.然后,我创建了指向pip/heel/lib目录的sys链接.

然后,使用.sh脚本,我们将通过构建参数传递Python版本,并使用该ARG,我们将 Select 替代版本的Python,本例中为10,这将使3.10版本成为构建使用的版本.

但我不确定做这件事的最好方法是dockerfile.

我的文档文件如下所示:

COPY --from=python1 --chown=developer:developer /usr/local/bin/py* /usr/local/bin/
COPY --from=python1 --chown=developer:developer /usr/local/bin/pip* /usr/local/bin/
COPY --from=python1 --chown=developer:developer /usr/local/bin/wheel /usr/local/bin/
COPY --from=python1 --chown=developer:developer /usr/local/lib/lib* /usr/local/lib/

RUN for link in /usr/local/bin/py* /usr/local/bin/pip* /usr/local/bin/wheel /usr/local/lib/lib*; do \
        [ -e "$link" ] || ln -s "$link" /usr/local/bin/; \
    done

# Copy Base Python Version
COPY --from=python1 --chown=developer:developer /usr/local/lib/python3.9/ /usr/local/lib/python3.9/

# Copy Alternative Python Version
COPY --from=python2 --chown=developer:developer /usr/local/lib/python3.10/ /usr/local/lib/python3.10/

# Copy the version-switching script
COPY sagacity-cd/swap.sh /usr/local/bin/

# Run the script to set the default version based on the build argument
USER root
RUN chmod +x /usr/local/bin/swap.sh && \
    /usr/local/bin/swap.sh ${DEFAULT_PYTHON_VERSION}
USER developer

# Copy the version-switching script
COPY sagacity-cd/swap.sh /usr/local/bin/

# Run the script to set the default version based on the build argument
USER root
RUN chmod +x /usr/local/bin/swap.sh && \
    /usr/local/bin/swap.sh ${DEFAULT_PYTHON_VERSION}
USER developer 

我的swap.sh如下所示:

#!/bin/bash

if [ "$1" == "3.9" ]; then
    rm /usr/local/bin/python
    ln -s /usr/local/bin/python3.9 /usr/local/bin/python
elif [ "$1" == "3.10" ]; then
    rm /usr/local/bin/python
    ln -s /usr/local/bin/python3.10 /usr/local/bin/python
else
    echo "Invalid version specified. Usage: $0 [3.9|3.10]"
    exit 1
fi

推荐答案

在构建Lambda时,通过传入构建参数的Terraform,只交换CI/CD构建上的版本

如果你已经打算通过Terraform构建Lambda,为什么不用正确版本的Python构建Lambda呢?

假设Lambda的Dockerfile是这样的:

ARG PY_VERSION
FROM python:${PY_VERSION}-bookworm

# then all your lambda stuff

COPY . /app

ENTRYPOINT /app/run.sh

现在您可以为不同的版本构建您的lambda:

docker build --build-arg="PY_VERSION=3.10" .
docker build --build-arg="PY_VERSION=3.9" .
docker build --build-arg="PY_VERSION=3.8" .

这是mentioned here in the docs美元.

如果您真的想要不同版本的基本映像,您可以使用相同的东西,并将不同的版本预先构建到您自己的容器repo中,然后使用相同的机制构建下一层(但在我看来这似乎有点过头了).

Python相关问答推荐

Pandas基于另一列的价值的新列

使用子字符串动态更新Python DataFrame中的列

如何判断LazyFrame是否为空?

两极:如何分割一个大 pyramid 并并行保存每个

Polars Dataframe:如何按组删除交替行?

分组数据并删除重复数据

线性模型PanelOLS和statmodels OLS之间的区别

比较两个数据帧并并排附加结果(获取性能警告)

如何将ctyles.POINTER(ctyles.c_float)转换为int?

将图像拖到另一个图像

图像 pyramid .难以创建所需的合成图像

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

通过pandas向每个非空单元格添加子字符串

将9个3x3矩阵按特定顺序排列成9x9矩阵

Python+线程\TrocessPoolExecutor

如何在UserSerializer中添加显式字段?

如何在TensorFlow中分类多个类

在单次扫描中创建列表

Matplotlib中的字体权重

如何将数据帧中的timedelta转换为datetime