在stretch debian中升级pip的正确方法是什么?

在stretch debian中升级pip的正确方法是什么?

我已经阅读了一些注释,表明使用 sudo 命令进行 pip 升级不是一个好主意。我的问题是,如果我不提供 sudo,我会收到权限错误。我该如何解决这个问题?另外,不建议使用 sudo 来升级 pip 的原因是什么?

$python -m pip install --upgrade pip
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting pip
  Using cached https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 19.2.3
    Uninstalling pip-19.2.3:
      Successfully uninstalled pip-19.2.3
  Rolling back uninstall of pip
  Moving to /home/abc/.local/bin/pip
   from /tmp/pip-uninstall-V4F8Pj/pip
  Moving to /home/abc/.local/bin/pip2
   from /tmp/pip-uninstall-V4F8Pj/pip2
  Moving to /home/abc/.local/bin/pip2.7
   from /tmp/pip-uninstall-V4F8Pj/pip2.7
  Moving to /home/abc/.local/lib/python2.7/site-packages/pip-19.2.3.dist-info/
   from /home/abc/.local/lib/python2.7/site-packages/~ip-19.2.3.dist-info
  Moving to /home/abc/.local/lib/python2.7/site-packages/pip/
   from /home/abc/.local/lib/python2.7/site-packages/~ip
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/pip-20.0.2.dist-info/top_level.txt'
Consider using the `--user` option or check the permissions.

WARNING: You are using pip version 19.2.3, however version 20.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

答案1

切勿在软件包管理系统之外升级操作系统提供的工具版本,因为如果发布了新软件包,它将覆盖您的更改。

也是sudo pip install --upgrade pip一件坏事。操作系统包系统认为它控制着这些文件,而您已经覆盖了它们。可能会导致奇怪的行为,包括安装较老的版本比您之前安装的版本高!

如果您想要更新的版本,可以将其安装在用户配置文件中

% pip install --upgrade --user pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl (1.4MB)
    100% |################################| 1.4MB 615kB/s 
Installing collected packages: pip
Successfully installed pip-20.0.2

这将安装最新版本$HOME/.local/bin

% ls -l .local/bin/pip                                           
-rwxr-xr-x 1 sweh sweh 223 Feb 16 21:49 .local/bin/pip

如果您$HOME/.local/bin的 PATH 中有,那么您将始终选择用户 pip 安装的程序。

然而,大多数时候,你并不需要升级pip

答案2

添加到 Stephens 的答案中,您也不应该使用 pip (即sudo pip install foo)全局安装软件包。与升级 pip 一样,这会干扰发行版提供的文件,从而导致潜在的冲突。

对于 Debian 上的 Python 包,有两种可行的策略,不应混合使用。选一个。您可以根据情况需要从一种切换到另一种。

1) 仅使用 Debian 提供的软件包

也就是说,你可以做任何事apt install。需要 PIL 吗?apt install python-pil或者apt install python3-pil。这可以确保所有文件都由 Debian 正确管理,并且您可以获得免费的安全支持以及 Debian 的其他软件包。好吧,无论如何,直到 7 月左右,Stretch 将开始失去安全支持。

这意味着您有时不得不接受较旧版本的软件包。有时您可能根本找不到您需要的包。也许这可以通过使用斯蒂芬描述的方式安装的软件包来补充pip --user,我还没有尝试过。

2)使用虚拟环境

您可以设置 Python 虚拟环境 ( sudo apt install virtualenv; virtualenv venv; source venv/bin/activate)。您可以在此 virtualenv 中安装软件包(或升级 pip),并且所有此类安装将完全包含在该 virtualenv 中。这也意味着您可以为不同的项目使用不同版本的包,并且 PyPi 上的任何内容都可用。rm -r venv/将删除整个虚拟环境,包括任何软件包。与操作系统文件不冲突。

这种方法使您的项目需求更加明确,并使管理变得更加容易。另一方面,更新这些软件包以进行安全修复的负担就由您承担了。对于小型一次性项目来说,这有点繁琐,但在特定情况下却非常有用。

相关内容