pip 如何删除带有前导破折号的错误安装的软件包:“-pkgname”

Posted

技术标签:

【中文标题】pip 如何删除带有前导破折号的错误安装的软件包:“-pkgname”【英文标题】:pip how to remove incorrectly installed package with a leading dash: "-pkgname" 【发布时间】:2019-11-20 05:13:04 【问题描述】:

运行pip freeze 后,我注意到列表顶部出现以下警告:

WARNING: Could not parse requirement: -atplotlib

所以我使用pip list检查了已安装的包,确实以下被认为是一个包:

Package         Version
--------------- -------
-atplotlib      3.0.3

我想我在安装/升级 matplotlib 时可能有错字,导致安装了上述“包”。

但我无法删除它,因为pip uninstall -atplotlib 被读取为命令并返回以下错误:

No such option: -a

我找到了以下文件夹:

C:\Users\name\Anaconda3\Lib\site-packages\~atplotlib

C:\Users\name\Anaconda3\Lib\site-packages\~atplotlib-3.0.3-py3.7.egg-info

删除它们是否安全且足够?

【问题讨论】:

【参考方案1】:

site-packages 目录中删除有问题的文件夹是安全的。

更多信息如下(source):

当卸载一个包时,pip 现在会将它重命名为一个名字 无法导入,一旦确认一切 将成功(包括安装新版本,如果它正在执行 升级),然后它才会删除这些文件夹。如果某事失败了, 它会将它们重命名。

以前,它会将整个内容复制到另一个目录, 并且可能是另一个驱动器,然后在需要时将它们复制回来。 所以这个改变是一个显着的性能提升,尤其是 对于包含大量文件的包。

您在这里看到的是由于某种原因删除失败 - 也许 pip 崩溃了? - 所以目录没有被删除。一世 以为 pip 完全忽略了它们,但也许还有别的 自从我测试之后发生了变化?

目录可以安全删除。

【讨论】:

链接是金色的。 如何删除所有有问题的文件夹,它们在哪里? 在 windows 上,检查 C:\Anaconda3\Lib\site-packages "也许 pip 崩溃了?" -- 就我而言,我在 WSL 中运行 virtualenv,当我尝试更新时,远程模式下的 VSCode 锁定了我的几个包。这导致工件保留在我的site-packages 文件夹中。删除有问题的文件夹效果很好。【参考方案2】:

编辑:根据this link,由劳伦斯在his answer提供

site-package 目录中查找并删除错误命名的文件夹应该可以解决问题。

如果这还不够,请按照以下说明继续清洁。

搜索损坏包的名称(没有前导破折号)让我找到了以下两个文件夹:

C:\Users\name\Anaconda3\Lib\site-packages~atplotlib

C:\Users\name\Anaconda3\Lib\site-packages~atplotlib-3.0.3-py3.7.egg-info

按照 Hoefling 的评论(下)

我检查了 egg-info 目录 %dir%/~atplotlib-3.0.3-py3.7.egg-info/SOURCES.txt 中的 SOURCES.txt 文件。浏览此文件中的路径列表并确保列出的所有路径都不包含~。然后我将目录~atplotlib-3.0.3-py3.7.egg-info 重命名为atplotlib-3.0.3-py3.7.egg-info(删除了波浪号~)。 最后我跑了pip uninstall atplotlib,提示如下:

卸载 atplotlib-3.0.3: 将删除: C:\Users\name\Anaconda3\Lib\site-packages\atplotlib-3.0.3-py3.7.egg-info C:\Users\name\Anaconda3\Lib\site-packages\matplotlib C:\Users\name\Anaconda3\Lib\site-packages\pylab.py

继续删除解决了问题(警告消失了,包不再在包列表中。

【讨论】:

问题是你没有删除所有已安装的文件,因为你已经删除了egg-info 目录,你没有关于已安装文件的信息(文件~atplotlib-3.0.3-py3.7.egg-info/SOURCES.txt )。您应该浏览此文件中的路径列表,并确保其中列出的所有路径不包含 ~ 并与磁盘上的路径匹配(必要时重命名)。然后重命名唯一的目录~atplotlib-3.0.3-py3.7.egg-info 以删除波浪号(例如atplotlib-3.0.3-py3.7.egg-info),然后重命名pip uninstall atplotlib 查看matplotlib 安装,您应该在C:\Users\name\Anaconda3\Lib\site-packages 目录中保留mpl_toolkits 目录和pylab.py 模块(可能还带有波浪号前缀)。删除那些应该完成清理。 @hoefling 您好,感谢您的指示。如果这有助于清理过程,我可以轻松恢复这两个文件夹(我备份了它们) @removing the ~ from the folder and running pip uninstall atplotlib 我得到以下信息:Uninstalling atplotlib-3.0.3: Would remove: C:\Users\name\Anaconda3\Lib\site-packages\atplotlib-3.0.3-py3.7.egg-info, C:\Users\name\Anaconda3\Lib\site-packages\matplotlib, C:\Users\name\Anaconda3\Lib\site-packages\pylab.py 我应该继续吗? 最后我不得不删除文件夹而不是 pip uninstall <pkg>【参考方案3】:

在删除 ~ 字符作为文件名的开头后,我必须执行 rm -rf atplotlib

$ pip freeze | grep atplotlib
$ cd /home/user/.local/lib/python3.8/site-packages
$ mv \~ atplotlib atplotlib
$ pip freeze | grep atplotlib
atplotlib ==3.0.3
$  pip uninstall atplotlib
WARNING: Skipping atplotlib as it is not installed.
$ rm -rf atplotlib

【讨论】:

【参考方案4】:

执行后我自己收到以下错误: python -m pip install --upgrade pip --user

警告:忽略无效分发 -ip (c:\python310\lib\site-packages)

    我转到 C:\ 中的文件规范 找到了 -ip(它位于顶部),然后我将其删除。 再次执行代码

结果:

已满足要求:c:\users\GhostFace\appdata\roaming\python\python310\site-packages (21.3.1) 中的 pip

【讨论】:

以上是关于pip 如何删除带有前导破折号的错误安装的软件包:“-pkgname”的主要内容,如果未能解决你的问题,请参考以下文章

使用 pip 安装软件包返回错误 [重复]

如何删除 PIP 安装的所有软件包? [复制]

Python argparse:参数中的前导破折号

如何在 GraphQl JS 中实现带有破折号的枚举

pip 在哪里安装带有虚拟环境的软件包?

python:使用 conda 安装破折号