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”的主要内容,如果未能解决你的问题,请参考以下文章