python-3.x - 使用特定的非 python 基础映像在 docker 文件中设置特定的 python 版本
问题描述
我想在特定的基础图像上创建一个带有 python 3.5 的 docker 图像,该基础图像是 nvidia/cuda(9.0 基础图像),后者没有 python 环境。
我需要特定版本的原因是支持运行 cuda10.0 python3.5 和 gcc version<7 以在同一个盒子上一起编译驱动程序
当我尝试构建 docker 环境(见下文)时,我总是得到加载 python3.6 的系统更新文件
我运行的第一个版本(如下)运行安装 python 3.6 的系统更新依赖项,我尝试了许多变体来避免这种情况,但最终图像中总是以 3.6 结束。
欢迎任何关于使用 python3.5 运行它的建议
谢谢
FROM nvidia/cuda
RUN apt-get update && apt-get install -y libsm6 libxext6 libxrender-dev python3.5 python3-pip
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
ENTRYPOINT [ "python3" ]
CMD [ "app.py" ]
我尝试过的另一个变体(如下)是使用 virtualenv ,在这里我似乎无法强制使用 python 3.5 环境
FROM nvidia/cuda
RUN apt-get update && apt-get install -y --no-install-recommends libsm6 libxext6 libxrender-dev python3.5 python3-pip python3-virtualenv
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m virtualenv --python=/usr/bin/python3 $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
ENTRYPOINT [ "python3" ]
CMD [ "app.py" ]
解决方案
您可以尝试使用 conda。我使用了几个阶段来最小化最终容器并加速/缓存本地构建。
# first stage
FROM nvidia/cuda:11.1-base-ubuntu18.04 as builder
RUN apt-get update && apt-get install -y curl wget gcc build-essential
# install conda
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-4.5.12-Linux-x86_64.sh -O ~/miniconda.sh && \
/bin/bash ~/miniconda.sh -b -p /opt/conda
# create env with python 3.5
RUN /opt/conda/bin/conda create -y -n myenv python=3.5
# install requirements
WORKDIR /app
COPY requirements.txt /app
ENV PATH=/opt/conda/envs/myenv/bin:$PATH
RUN pip install -r requirements.txt
RUN pip uninstall -y pip
####################
# second stage (note: FROM container must be the same as builder)
FROM nvidia/cuda:11.1-base-ubuntu18.04 as runner
# copy environment data including python
COPY --from=builder /opt/conda/envs/myenv/bin /opt/conda/envs/myenv/bin
COPY --from=builder /opt/conda/envs/myenv/lib /opt/conda/envs/myenv/lib
# do some env settings
ENV PATH=/opt/conda/envs/myenv/bin:$PATH
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
####################
# final image
from runner
WORKDIR /app
COPY ./run.py /app
CMD [ "python", "run.py"]
推荐阅读
- python-3.x - 为什么 anaconda3 安装似乎以 python2 而不是 python3 结束
- typescript - 如何在 VS 代码中禁用保存时自动加入行?
- python - 解析 XML 时出错:列表索引必须是整数或切片,而不是 Str
- powershell - 当显示名称中有特殊字符时,获取通讯组中所有显示名称的 SMTP 地址
- json - 如何正确解析和输入 graphql 结果?
- puppet - 使用 puppet 迭代一定次数
- three.js - 三个 JS 中的动画透明度
- javascript - 遍历 CSV 文件并为每一行运行等待?
- rest - 使用 Vertx 实现客户端分页 API 调用的最佳方式是什么?
- sql - 在 SQL Server 中以十六进制存储数据的充分理由是什么?