【问题标题】:Creating a docker container that runs Ubuntu with Python 3.6+ and Pip创建一个使用 Python 3.6+ 和 Pip 运行 Ubuntu 的 docker 容器
【发布时间】:2021-04-24 06:29:24
【问题描述】:

我正在尝试在运行 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" ]

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

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”似乎在构建容器的计算机上运行的任何本机操作系统上构建容器,这对我来说是窗户。

【问题讨论】:

  • 确保始终使用正确的二进制文件,例如 python3.8pip3.8python3,8 -m pip。您也可以考虑使用更新的 Ubuntu 版本或 python 基础映像。
  • @KlausD。我的二进制文件看起来不错,不是吗?我还尝试了“Ubuntu:latest”并得到了相同的错误,正如我在问题中提到的那样,我认为 python 基础映像使用我的计算机正在运行的相同操作系统启动,因为我得到了 auto-sklearn 错误,该错误是在非安装时独有的Linux 系统
  • 不,您多次使用了简单的pippython,没有版本号。
  • @KlausD。好吧,当您说“二进制文件”时,您到底指的是什么?
  • @KlausD。我说错了,我想我没有尝试使用“ubuntu:latest”的顶级命令,因为这似乎有效。如果你想发布你的答案并允许我编辑它并添加我使用的完整 Dockerfile,我会给你投票和回答投票。

标签: python docker ubuntu pip window


【解决方案1】:

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

问题 1:Ubuntu 映像中缺少 pip

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

没错。如果您检查拉取图像的/usr/bin 目录的内容,您会注意到那里没有pippip3。所以 Dockerfile 中的 RUN ln -s /usr/bin/pip3 /usr/bin/pip 行什么也不做。即使在容器中安装了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.6python3.6pipauto-sklearn 的安装仍可能会失败并出现以下错误:

    RuntimeError: Python version >= 3.7 required.

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

解决办法:

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

您可以关注它或使用以下顺序安装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

安装 auto-sklearn

RUN python3.8 -m pip install auto-sklearn

注意:上面的命令可能还会安装pandas 包以及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 的不同版本,您可能需要查看virtual environments

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-25
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多