在docker镜像中安装Python3.9和pip(而不是python 3.8)

Tho*_*ing 8 python ubuntu pip docker

我正在尝试构建一个 docker 映像来运行一些测试,但我无法说服 ubuntu 安装 python 3.9 和 pip,而不是 python3.8。

启动Docker unbuntu:latest,安装python3.9没问题,但是没有pip。好的,我会尝试按照所有答案的建议进行操作:

apt-get install python3-pip

但这会安装 python3.8 的 **所有 ** 以及其他垃圾。现在,它确实可以工作,但它让我在图像中拥有完全不必要的 python 版本,而我希望图像尽可能小,这让我很烦恼。

不,之后卸载 3.8 不起作用,它会删除 pip。

如何使用 pip 获得 python3.9,而不使用 python3.8?

我确实看到了这个:How to install pip for Python 3.9 on Ubuntu 20.04

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

当您运行该脚本时,它会抱怨需要 distutils。没问题:

sudo apt-get install python3-distutils

python3-distutils 依赖什么?为什么,当然是python3.8!

Bal*_*ous 12

ubuntu 存储系统 python 包/usr/lib/python3/dist-packages并为所有 python3 版本共享。

在 ubuntu 20.04 容器 ( docker run -ti ubuntu:20.04) 内:

apt-get update
apt-get install software-properties-common
add-apt-repository ppa:deadsnakes/ppa
# Install py39 from deadsnakes repository
apt-get install python3.9
# Install pip from standard ubuntu packages
apt-get install python3-pip
Run Code Online (Sandbox Code Playgroud)

然后您可以使用 调用 pip python3.9 -m pip ...,但要小心,所有内容都安装在 中/usr/lib/python3/dist-packages

但如果您需要的只是 python3.9 的 dockerized 版本,那么最好使用官方 python docker 镜像,以 debian 或 alpine(非常轻)作为基础。两者都使用一个标准lib/pythonx.y/site-packages

默认情况下,这些图像定义了 python 解释器的入口点,但您可以覆盖 Whybashbusybox sh(alpine)。

为 debian 编辑

launchpad 存储库基于 ubuntu 发行版构建。使用过度分发可能会导致库不兼容。

在 deadsnakes ubuntu/xenial 存储库中,python3.9 需要libssl1.0.0,但 debian/buster 提供libssl1.1

在 debian/buster 中获取 python3.9 最简单的方法是使用官方镜像 ( docker run -ti python:3.9-buster)。否则,构建它...

  • `apt-get install python3-9` 在 ubuntu:20.04 上不起作用,而 `apt-get install python3-pip` 将为 python3.8 安装 pip (3认同)
  • 安装 python 的命令是带有“.”的“apt-get install python3.9”,而不是带有“-”的“apt-get install python3-9” (2认同)