如何在 Ubuntu 上安装 Python 3.8 的 pip 而不更改任何默认设置?

36

我正在尝试在 Ubuntu 18.04 LTS 上为 Python 3.8 安装 pip

我知道这个问题被问得太多了。但那些问题并不涉及特别保留 Ubuntu 默认设置。而那些问题的答案要么行不通,要么建议采取某些极端措施,会破坏系统 - 比如将默认的 python3 版本从 3.6 改为 3.8。你不应该这样做!

到目前为止,我已经成功地使用 PPA - ppa: deadsnakes/ppa 安装了 python3.8

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

使用 update-alternatives 命令,将python命令从python2更改为python3.8

update-alternatives --remove python /usr/bin/python2
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 10

现在,当我运行 python --version 时,得到的是 python 3.8

Python 3.8.5

问题是,我仍然无法为 Python 3.8 安装 pip
如果我尝试安装 python3-pip,它会为 Python 3.6 安装 pip,因为 python3 仍然指向 python3.6.9,而我打算保持这种方式。
尝试安装 python-pip,它会为 Python 2.7 安装 pip
此外,没有名为 python3.8-pip 的软件包,因此我不能像下面这样安装它:

sudo apt install python3.8-pip

输出:

E: 无法定位软件包 python3.8-pip
E: 找不到匹配 glob 'python3.8-pip' 的软件包
E: 找不到匹配 regex 'python3.8-pip' 的软件包

我该如何在Ubuntu 18.04上为Python 3.8安装pip?

7个回答

39

虽然我们可以直接使用 pip 作为 Python 的 module(推荐的方式):

python -m pip --version

这是我安装它的方式(以便可以直接调用):
首先,请确保命令pip可用,并且它没有被Python 2.7pip使用。
sudo apt remove python-pip

现在如果您在终端中输入pip,您会发现什么也没有安装:
pip --version

输出:

命令'pip'未找到,但可以通过以下方式安装:

sudo apt install python-pip

安装python3.8并使用update-alternatives设置正确的版本号码为python命令(如问题所述)。

确保已安装python3-pip:
(如果没有安装python3-pip,这将不起作用。虽然这将安装来自python 3.6的pip 9.0.1,但我们需要它.)

sudo apt install python3-pip

这将安装pip 9.0.1并将其命名为pip3:
pip3 --version

输出:

来自 /usr/lib/python3/dist-packages 的 pip 9.0.1 (python 3.6)

现在,要为 Python 3.8 安装 pip,我使用了 pip 作为 python 模块(有点讽刺!):

python -m pip install pip

输出:

正在收集 pip
  正在下载 https://files.pythonhosted.org/packages/36/74/38c2410d688ac7b48afa07d413674afc1f903c1c1f854de51dc8eb2367a5/pip-20.2-py2.py3-none-any.whl (1.5MB)
  100% |████████████████████████████████| 1.5MB 288kB/s
正在安装收集的包: pip
安装成功的包: pip-20.2

看起来,当我将已经为Python 3.6安装的pip作为Python 3.8的模块调用并安装pip时,它实际上起作用了。

现在,请确保你的~/.local/bin目录已经设置在PATH环境变量中:
使用你喜欢的编辑器打开~/.bashrc(如果你使用的是zsh,请用.zshrc替换.bashrc)

nano ~/.bashrc

并将以下内容粘贴到文件末尾

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

最后,执行 .bashrc 文件(或重新打开终端窗口):

source ~/.bashrc

现在,如果您直接运行pip,它将给您正确的版本:
pip --version

输出:

pip 20.2 来自 /home/qumber/.local/lib/python3.8/site-packages/pip (python 3.8)

太好了!


@Arne 删除python-pip一点也不冒险。事实上,Ubuntu并没有预装它。如果您的计算机上有它,那很可能是因为您安装了它。 - Qumber
1
除非系统实用程序在代码中使用它来执行诸如获取已安装的Python软件包信息之类的操作,否则请不要删除预安装的python-pip。无论如何,我只是想表示一些怀疑,并说“显然”是一个危险的词。如果您的系统预装了python-pip,请不要删除它并找到其他安装最新版本的方法。如果您自己安装了它,则可能(不是显然)可以安全地将其删除。 - Arne
1
当然,如果您知道python-pip已经预先安装或由其他程序作为依赖项安装,最好保持不变。 - Qumber
1
@Timo,这可能是与您的pip3二进制文件有关的问题。尝试升级或重新安装它- python3 -m pip install pip --upgrade - Qumber
@Timo,好的。如果那不起作用,请尝试重新安装 - python -m pip uninstall pip && python -m pip uninstall pip - Qumber
显示剩余5条评论

13

正如官方文档所建议的,您可以尝试使用 get-pip.py 进行安装。

wget https://bootstrap.pypa.io/get-pip.py
python3.8 get-pip.py

这将安装pip并将其命名为pip3.8


如果在18.04上将二进制文件设置为pip命令,那么这看起来是一个非常优雅的解决方案。 - Qumber
@Qumber 然后你可以在 ~/.profile 中设置别名,应该像这样 alias pip='pip3.8' - Vaibhav Panmand
2
ModuleNotFoundError: 找不到名为 'distutils.cmd' 的模块 - mirekphd
非常优雅。接下来的命令 python3 -m pip install twine 顺利地运行了。谢谢你没有让我想太多。 - FlipMcF

7
# install py3.8 and dependencies for the pip3 bootstrap script
add-apt-repository -y ppa:deadsnakes/ppa && \
    apt install -y python3.8 python3.8-distutils

# download and run the pip3 bootstrap script
cd /tmp && wget https://bootstrap.pypa.io/get-pip.py && \
    python3.8 /tmp/get-pip.py

# use pip py3.8 module to install python packages
python3.8 -m pip install numpy pandas

5
另一个解决方案是安装在 apt 中的 pip。 sudo apt install python3-pip. 安装的 pip 版本适用于所有 Python 的版本,而不仅仅是 3.6 版本。安装完毕后,您只需使用命令 python3.8 -m pip install pip 来更新 pip,然后它将为 Python 安装最新版本。
我不建议您删除 Python2,因为它是系统的重要模块,您应该只是在 .bashrc 中创建一个永久的“别名”来代替 Python3, 我就是这样做的: alias python="python3.8".

如果您尝试通过python命令以编程方式访问python3.8/pip 3.8,或者尝试使用python setup.py build从源代码安装软件包,或者想要以不同的用户身份执行Python(例如sudo python),那么设置别名是无济于事的。在许多其他情况下也是如此。 - Qumber

2

将Python v3.8安装为Python

RUN apt update --fix-missing && \
apt install python3.8 -y && \
update-alternatives --install /usr/bin/python python /usr/bin/python3.8 10

安装 Python 3.8 的 pip

RUN apt install python3-pip -y && \
python -m pip install --upgrade pip

0

我几天前完成了这个项目,我遇到了很多困难,但最终我解决了问题,所以我写了一篇博客文章

最后,我认为我可能做的大部分与上面的答案相同,但如果你跟不上,请参考我的截图等。

以下是我执行的过程的 tl;dr:

  • 使用 apt 卸载 python3-pippython-pip
  • /usr/local/bin 中删除旧的 pip 文件
  • 使用 apt 重新安装 python3-pip
  • $HOME/.local/bin 添加到您的$PATH(还要重启您的 shell 以确保您正确执行此操作)

0

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

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