如何在Ubuntu 20.04上安装Python 3.9的pip?

73

Ubuntu 20.04预装了Python 3.8。我无法卸载Python 3.8,但我需要Python 3.9。

我已经从以下网址安装了Python 3.9:

sudo add-apt-repository ppa:deadsnakes/ppa

sudo apt install python3.9

如何为Python 3.9安装pip?

使用sudo apt-get install python3-pip无法为我安装pip,因为它会将pip安装到Python 3.8中。

使用python3.9 get-pip.py安装pip会出现错误:

~/python_tools$ python3.9 get-pip.py 
Traceback (most recent call last):
  File "/home/ubuntu/python_tools/get-pip.py", line 23704, in <module>
    main()
  File "/home/ubuntu/python_tools/get-pip.py", line 198, in main
    bootstrap(tmpdir=tmpdir)
  File "/home/ubuntu/python_tools/get-pip.py", line 82, in bootstrap
    from pip._internal.cli.main import main as pip_entry_point
  File "<frozen zipimport>", line 259, in load_module
  File "/tmp/tmpkwyc8h7j/pip.zip/pip/_internal/cli/main.py", line 10, in <module>
  File "<frozen zipimport>", line 259, in load_module
  File "/tmp/tmpkwyc8h7j/pip.zip/pip/_internal/cli/autocompletion.py", line 9, in <module>
  File "<frozen zipimport>", line 259, in load_module
  File "/tmp/tmpkwyc8h7j/pip.zip/pip/_internal/cli/main_parser.py", line 7, in <module>
  File "<frozen zipimport>", line 259, in load_module
  File "/tmp/tmpkwyc8h7j/pip.zip/pip/_internal/cli/cmdoptions.py", line 18, in <module>
ModuleNotFoundError: No module named 'distutils.util'

在使用curl之前,我建议查看Eric Platon的答案https://dev59.com/IVEG5IYBdhLWcg3wduYf#68523326。 - P i
8个回答

143
你可以按照以下方式为Python 3.9安装pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.9 get-pip.py

为确保pip已安装到Python 3.9中,请使用python3.9而非python3

如果出现任何权限错误,您可能需要使用

python3.9 get-pip.py --user

如果你在运行python3.9 get-pip.py时遇到了类似No module named 'distutils.util'的错误,并且你使用的是基于Debian的Linux发行版,请执行以下操作:

sudo apt install python3.9-distutils

然后重新运行您的get-pip.py命令。如果您不在基于Debian的发行版上,请使用适用于您的发行版软件包管理器的等效命令。
这些说明部分基于pip维护者提供的官方安装说明
我的答案的这一部分有点超出了问题的范围,因为问题专门针对Python 3.9。但是,对于任何尝试在Python 3.6或更早版本上安装pip的人,在撰写本文时,位于https://bootstrap.pypa.io/get-pip.py的文件仅支持Python 3.7或更高版本。
解决方法是从https://bootstrap.pypa.io/pip/<python version>/get-pip.py下载,例如,如果要为python 3.6安装pip,则可以从https://bootstrap.pypa.io/pip/3.6/get-pip.py下载,然后像往常一样按照所有步骤进行操作。

1
@Gilson 我更新了我的答案,包括针对那个问题的解决方案。 - Shane Bishop
2
输入"pip3.9 install"以使用pip。 - S7bvwqX
2
通过 sudo apt install python3.9-distutils 命令,Ubuntu 20.04 安装了 python3.8。我只想要 python3.9 - Timo
对于任何建议修改的人,请注意(正如我在我的答案中指出的那样),我的答案部分基于pip维护者提供的官方说明。建议使用软件包管理器安装pip或其他类似更改的编辑建议违反了我的答案的意图。如果您想提供通过软件包管理器安装的方法,请将其作为您自己的答案留下。此外,我省略了ensurepip,以使我的答案更简单。 - Shane Bishop
1
我只得到了两页堆栈跟踪。 - Owl
显示剩余8条评论

34

一种仅依赖于deadsnakes/ppa的替代方法是安装python3.9-venv

sudo apt-get install python3.9-venv
python3.9 -m venv venv
source venv/bin/activate
pip --version
# pip 21.1.3 from /home/.../venv/lib/python3.9/site-packages/pip (python 3.9)

也许随时间推移更容易保持连贯性,但需要强制进入Virtualenv。


这种方法源于Ubuntu 18上的一个问题。该主题中的其他提案旨在满足OP的目标(20.04),但都不起作用。来自PyPa的安装脚本在Ubuntu 18上以以下方式结束:

python3.9 get-pip.py
# ...
# AttributeError: 'HTMLParser' object has no attribute 'unescape'

4
这个答案需要被置于最上方。 - P i
现在使用sudo apt-get install python3.10-venv更为合适。 - Timo
python3.9 -m venv venv 是什么意思?我在 man 中读到了 -m module-name 的解释:搜索 sys.path 中指定的模块并运行相应的 .py 文件作为脚本。这将终止选项列表(后续选项将作为参数传递给模块)。那么这是为接下来的 source 做准备吗? - Timo
1
@Timo 是的,这是为了允许source 命令。venv 模块调用创建一个 venv 目录(不幸使用了相同的名称?),以包含此项目的虚拟开发环境。在此目录下,树形结构包含依赖项在lib 下和可执行脚本在 bin 下(以及其他一些内容)。特别地,activatedeactivate 允许在当前 shell 中设置或取消虚拟环境(因此调用 pippython 会使用 venv/bin 而不是任何默认可用的)。 - Eric Platon

15

自 Python 3.4 版本起,Pip 已默认包含在其中。

python3.9 -m pip --version
如果由于某些原因pip未安装,您可以使用get-pip手动安装它。
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.9 get-pip.py

6
在Ubuntu 20.04上使用来自ppa:deadsnakes/ppa的Python 3.9时,未默认安装pip。需要手动安装。 - Timo

3

如果其他人在他们的pips上遇到了看似奇怪的WSL2行为,TechDog的建议可以修复我的WSL2 Ubuntu 20.04。正是像TechDog发布的那样更新替代线路解决了问题!

update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1

猫头鹰,请检查您的Python版本和路径。是3.10还是3.9? - Gnubesoft
我解决了,这是一个非常奇怪的问题:链接指向3.9,但python3是3.6。然而,在重新启动后,python3正确了。确实非常奇怪。 - Owl
1
我讨厌那些bug!很高兴最终它能够正常工作。 - Gnubesoft
在Windows 10 WSL2中运行Ubuntu 20.04。在设置Python开发环境时遇到了问题。这解决了我的问题,即“pip --version”返回pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8) -> 到 -> pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.9) - Chris - Haddox Technologies

3

如果您正在构建一个Docker容器,下面的Dockerfile将在Ubuntu 20.04(LTS)上安装Python 3.9:

FROM ubuntu:20.04
RUN set -ex && \
    apt install -y \
        software-properties-common && \
    add-apt-repository -y ppa:deadsnakes/ppa && \
    apt install -y \
        python3.9 \
        python3.9-distutils \
        python3.9-venv && \
    python3.9 --version && \
    python3.9 -m ensurepip && \
    pip3.9 --version
ENTRYPOINT []

software-properties-common 软件包引入了 add-apt-repository 命令。安装 python3.9-distutilspython3.9-venv 可以直接调用 ensurepip

不过,Python 3.5及以上版本应该已经将 ensurepip 包含在标准库中,但发行版维护者似乎将其拆分成了较小的部分。


1
正好是我需要的;我不知道还需要安装python3.9-venv - undefined

3

这个方法很奇怪,但是它很简单且有效:

export PYTHON_VERSION_SHORT=3.9
apt-get install -y python${PYTHON_VERSION_SHORT} python3-pip && \
ln -s -f /usr/bin/python${PYTHON_VERSION_SHORT} /usr/bin/python3 && \
ln -s -f /usr/bin/python${PYTHON_VERSION_SHORT} /usr/bin/python && \
ln -s -f /usr/bin/pip3 /usr/bin/pip

安装 pip3 时,默认安装版本为 python3.8。如果您将 /usr/bin/python3 覆盖链接到 python3.9,则 pip3 将使用 python3.9解释,并且您将得到适用于 python3.9 的可工作的 pip。

我已经使用这个方法两年了,没有出现任何问题,但是请注意,这并不是一个好的做法,因为如果 python3-pippython3.9 存在兼容性问题,它可能会发生错误。

2

以下是我在UBUNTU 16.4上安装的步骤,如果需要,请添加SUDO前缀。我在使用命令行时遇到了一些问题,因此我使用了update-alternatives将python3.9设置为python命令的默认版本,请根据需要更改版本。

apt update
apt install software-properties-common
add-apt-repository ppa:deadsnakes/ppa -y
apt update
apt install python3.9
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.9 get-pip.py

2
在此之前,您需要安装另一个软件包:安装python3.9-distutils。 - Frederick Ollinger

2
这对我在Ubuntu 18.04上有效:
$ python3.9 -m ensurepip

/usr/bin/python3.9: 找不到 ensurepip 模块 - Owl
我也遇到了“no module named ensurepip”的错误。 - saulspatz
Ubuntu/Debian 发行版附带了一个修改过的 Python,其中包括 pip、venv 模块和 ensurepip 工具。 - ingyhere
1
这也适用于Ubuntu22.04。为了更完整,您可以执行:python3.9 -m ensurepip --upgrade - eidal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接