python - pip:卸载已安装的 disutils 软件包

标签 python pip psutil

我尝试使用命令 pip install -U psutil 安装 psutil,这给了我错误:

Cannot uninstall 'psutil'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

看起来这是一个known pip 中的 versions > 10 存在问题,我理解该部分(我目前有 pip 18)。但我刚刚发现我可以通过直接执行 pip install psutil 来解决它,而不使用 Upgrade 标志。我想知道这背后是否有原因。我最初的感觉是,在第一种情况下,当 pip 尝试升级时,它首先尝试删除软件包,但它不能,但在后一种情况下,它尝试直接安装,因此不会得到错误。我的问题是,是否仍然不必先删除软件包并安装(不使用升级标志时),或者为什么 pip 会给出带有升级标志的错误,但没有它时不会出现错误。

编辑:所以,我尝试按照 hoefling 的建议运行 pip install -v psutil ,并且我得到了一大堆文本,而不是说需求已经存在met,这意味着 psutil 一开始就没有安装。我试着想了一下,这是我到目前为止所理解的:我在 python virtualenv 中运行并通过 pip -U -rrequirements.txt 安装它code> 其中 requirements.txt 包含一堆包,其中包括 psutil。当我删除 -U 标志时,它会跳过安装 psutil,并跳转到其他包。这就提出了另一个问题,当没有 -U 标志时,这是否是 pip 应该表现的方式。有趣的是,第一次使用 -U 标志安装软件包时,它会查看主 python 安装而不是虚拟环境安装,而当删除 -U 标志时,它不会执行此操作并完全跳过。

最佳答案

在某些设置中,您将一堆软件包安装在不是 setuptools 的正常安装位置的位置。 ,位于 sys.path 上的正常安装位置之后.

这些设置中最常见的可能是 Apple 预装的 Python 2.7,因此我将使用它作为示例。即使这不是您的设置,也希望它仍然具有指导意义。

Apple 包含 Extras目录(位于 /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python ),其中包含一堆 Apple 自己的工具需要的第三方软件包,或者 Apple 认为您可能需要的第三方软件包(当时 Apple 关心提供任何平台上最好的 Python 体验)。

例如,在 macOS 10.13 上,该目录将包含 NumPy 1.8.0。

这些软件包都安装为 distribute式鸡蛋。

(一些 Linux 发行版使用构建为 RPM/DEB/等包的 Python 包做类似的事情,或者至少曾经做类似的事情,这些包进入 distutils 目录,这与您通过 pip 安装的东西不同手动,进入 setuptools 目录。细节有 pip 不同,但效果和解决方法最终是相同的。)

如果您安装pip ,然后尝试pip install -U numpypip uninstall numpy , pip将看到distribute -风格numpy-1.8.0rc1-py2.7.egg-info归档并拒绝触摸它,以免破坏所有东西。

如果你只是pip install numpy ,但是,它只会在 setuptools 使用的标准站 pip 包安装位置中查找。 , /Library/Python/2.7/site-packages ,看不到任何内容,然后愉快地为您安装现代版本的 NumPy。

而且,因为/Library/Python/2.7/site-packages出现在 /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python 之前在您的sys,path上,新的 NumPy 将隐藏旧的 NumPy,一切都会按预期运行。

这可能会出现一些问题。最值得注意的是,如果您尝试安装 Extras 本身未包含的内容,但其依赖项包含在 Extras 中,则可能会失败,并出现神秘且难以调试的错误。例如,在 macOS 10.12 上,pip install pandas会向您抛出一堆关于无法升级的错误 dateutil ,你甚至不知道你正在尝试这样做。您唯一能做的就是查看 pandas 的依赖关系,查看 Extras 中预装了哪些,并手动pip install所有这些的影子版本。

但是,在大多数情况下,它是有效的。

关于python - pip:卸载已安装的 disutils 软件包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51715599/

相关文章:

python:通过 if/elif 语句传递一个值

pip - Ansible:在单个 session 上安装多个 Python 包

python - 通过pipenv安装mysqlclient抛出错误

Python 3.4 在 Windows 7 x64 上安装 psutil

python - 浏览 psutil 警告滚动控制台

python - 如何从调用 python 脚本的位置获取 dir 的名称(而不是确切的运行位置)

python - python Ghost.py不支持的字段标签错误

python - 无法使用 pip3 安装 eth-testrpc

python - psutil 中的 cpu-percent 为每个进程返回 0.0

python - Sqlite executemany 和 DELETE