创建使用 Python 3.6+ 和 Pip 运行 Ubuntu 的 docker 容器

6 python ubuntu window pip docker

我正在尝试在运行 Ubuntu 的 docker 容器中使用 pip 安装 Python 3.6 或更高版本。我尝试了很多事情但没有成功

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" ]
Run Code Online (Sandbox Code Playgroud)

这将返回“无法找到包 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" ]
Run Code Online (Sandbox Code Playgroud)

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

小智 4

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

问题 1:Ubuntu 镜像中缺少 pip

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

这是正确的。如果你检查拉取镜像的目录内容/usr/bin,你会发现没有pippip3有。所以RUN ln -s /usr/bin/pip3 /usr/bin/pipDockerfile 中的 line 不执行任何操作。即使python3.6安装在容器中(调用后apt install software-properties-common -y),您也无法使用pip它。

解决方案:安装pip

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

RUN apt-get update
RUN apt-get install python3-pip
Run Code Online (Sandbox Code Playgroud)

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

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

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

    RuntimeError: Python version >= 3.7 required.
Run Code Online (Sandbox Code Playgroud)

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

解决方案:

pip这个答案解释了如何python3.8在 Ubuntu 上安装: /sf/answers/4424517121/

您可以按照它进行操作,也可以按照以下顺序获取pip并安装两者:python3.8

安装python3.8:

RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt update
RUN apt install python3.8
Run Code Online (Sandbox Code Playgroud)

安装python3.6和python3.6的pip

RUN apt install python3-pip
Run Code Online (Sandbox Code Playgroud)

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

pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
Run Code Online (Sandbox Code Playgroud)

为python3.8安装pip

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

RUN python3.8 -m pip install pip --upgrade
Run Code Online (Sandbox Code Playgroud)

安装自动sklearn

RUN python3.8 -m pip install auto-sklearn
Run Code Online (Sandbox Code Playgroud)

注意:上面的命令还可能安装pandas包以及auto-sklearn.

创建到python3.8的符号链接

这会改变默认值

RUN ln -s /usr/bin/python3.8 /usr/bin/python
Run Code Online (Sandbox Code Playgroud)

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

pip 21.2.4 from /usr/local/lib/python3.8/dist-packages/pip (python 3.8)
Run Code Online (Sandbox Code Playgroud)

大结局:

最后,您的 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" ]
Run Code Online (Sandbox Code Playgroud)

注意

为了避免混淆不同版本的pythonpip,您可能需要了解一下虚拟环境