繁体   English   中英

创建一个运行 Ubuntu 的 docker 容器,该容器使用 Python 3.6+ 和 Z608C2BFD1742AACEDA743

[英]Creating a docker container that runs Ubuntu with Python 3.6+ and Pip

我正在尝试将 Python 3.6 或更高版本与 pip 安装在运行 Z3D4645423F8CE69 的 docker 容器中我已经尝试了很多没有成功的事情

FROM ubuntu:18.04
RUN apt update
RUN apt install software-properties-common -y
RUN add-apt-repository ppa:deadsnakes/ppa
RUN ln -s /usr/bin/pip3 /usr/bin/pip
RUN ln -s /usr/bin/python3.8 /usr/bin/python
RUN apt install python3.8 -y
RUN apt install pip

RUN pip install auto-sklearn
RUN pip install pandas

ADD test.py /

CMD [ "python", "./test.py" ]

这将返回“无法找到 package pip”。 我尝试删除“apt install pip”,以防 Python 3.8 附带它,但它给了我错误:“pip:未找到”。

FROM ubuntu:18.04
RUN apt install software-properties-common -y
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update
RUN install python3-pip
RUN pip install auto-sklearn
RUN pip install pandas

ADD test.py /

CMD [ "python", "./test.py" ]

这会安装 pip,但 auto-sklearn 需要 Python 版本 3.6 或更高版本,而这会安装较低版本。 Auto-sklearn 也需要 Linux 这就是为什么我使用“FROM ubuntu”而不是“FROM python”的原因,因为“FROM python”似乎是在构建容器的计算机上运行的任何本机操作系统上构建容器,这对我来说是 Windows。

我在这里看到两个连续的问题,所以让我们相应地解决它们:

问题 1:Ubuntu 映像中缺少 pip

这将返回“无法找到 package pip”。 我尝试删除“apt install pip”,以防 Python 3.8 附带它,但它给了我错误:“pip:未找到”。

这是正确的。 如果您检查拉取的镜像的/usr/bin目录的内容,您会注意到那里没有pippip3 所以RUN ln -s /usr/bin/pip3 /usr/bin/pip行中的 Dockerfile 什么都不做。 即使在容器中安装了python3.6 (在调用apt install software-properties-common -y之后),您也不会得到pip

解决方法:安装pip

以下命令可用于安装python3.6二进制文件和相应的pip

RUN apt-get update
RUN apt-get install python3-pip

这会将python3.6pip3安装在ubuntu:18/04容器的/usr/bin目录中。

问题 2:auto-sklearn 需要 python >= 3.7

即使您设法同时获得python3.6pippython3.6 ,安装auto-sklearn仍可能会失败并出现以下错误:

    RuntimeError: Python version >= 3.7 required.

这是因为某些依赖项(例如ConfigSpace包)需要 python 版本 >= 3.7。

解决方案:

这个答案解释了如何在 Ubuntu 上为python3.8安装piphttps://stackoverflow.com/a/632092737

您可以按照它或使用以下顺序安装pippython3.8

安装python3.8:

RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt update
RUN apt install python3.8

为python3.6安装python3.6和pip

RUN apt install python3-pip

现在,如果你在容器中执行python3.6 -m pip --version ,你会得到类似的东西( pip的版本可能不同):

pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)

为python3.8安装pip

注意:这里我们使用之前安装的pip for python3.6来安装pip for python3.8 别问我为什么:-)

RUN python3.8 -m pip install pip --upgrade

安装自动sklearn

RUN python3.8 -m pip install auto-sklearn

注意:上面的命令可能还会安装pandas package 以及auto-sklearn的其他依赖项。

创建指向python3.8的符号链接

这将更改默认值

RUN ln -s /usr/bin/python3.8 /usr/bin/python

现在,如果你在容器中执行python -m pip --version ,你会得到类似的东西( pip的版本可能不同):

pip 21.2.4 from /usr/local/lib/python3.8/dist-packages/pip (python 3.8)

大结局:

最后,您的 Dockerfile 应该如下所示:

FROM ubuntu:18.04

RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt update
RUN apt install python3.8
RUN apt install python3-pip
RUN python3.8 -m pip install auto-sklearn
RUN python3.8 -m pip install pandas
RUN ln -s /usr/bin/python3.8 /usr/bin/python

ADD test.py /

CMD [ "python", "./test.py" ]

注意

为避免混淆pythonpip的不同版本,您可能需要查看虚拟环境

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM