如何使用 pip 卸载可编辑包(使用 -e 安装)

Posted

技术标签:

【中文标题】如何使用 pip 卸载可编辑包(使用 -e 安装)【英文标题】:How to uninstall editable packages with pip (installed with -e) 【发布时间】:2013-06-25 03:49:25 【问题描述】:

我已经用 -e 安装了一些包

> pip install -e git+https://github.com/eventray/horus.git@2ce62c802ef5237be1c6b1a91dbf115ec284a619#egg=horus-dev

我看到了 pip freeze

> pip freeze
...
-e git+https://github.com/eventray/horus.git@2ce62c802ef5237be1c6b1a91dbf115ec284a619#egg=horus-dev
...

当我尝试卸载软件包时出现错误:

> pip uninstall horus-dev
Cannot uninstall requirement horus-dev, not installed

> pip uninstall horus
Cannot uninstall requirement horus, not installed

如何卸载这样的包?

【问题讨论】:

pip uninstall 卸载在最新版本的 pip 中以可编辑模式安装的软件包(我的是 19.1.1)。确保使用 setup.py 中的包名,而不是您在 entry_points 中指定调用该包的别名 对于使用 conda 的人,在 conda 中以开发模式卸载:conda develop -u . 你知道为什么pip uninstall yourpackage 没有用吗?就像你的错误是什么意思?命令的输出似乎很奇怪... 你试过pip uninstall -e .python setup.py develop -u吗? 对我来说pip uninstall library 工作得很好。如果你去回答 OP 提供的答案,他的图书馆被破坏似乎有点奇怪。希望这可以节省人们下次来这里的时间。不过,有许多不同的选项可能会起作用。 【参考方案1】:

只需卸载您在“可编辑”模式下安装的软件包:

pip uninstall yourpackage

它适用于最近的 pip 版本(至少 >=19.1.1)。

【讨论】:

OP 已经尝试过这个并在他的问题中这么说。这不一定适用于安装为“可编辑”的软件包 @dusktreader:我不确定 OP 的 pip uninstall 命令发生了什么(可能是过时的 pip 版本?),但我已经验证在正常情况下它完全符合建议在@glarrain 接受的答案中手动执行。如果它不适合您,请详细说明您在此处所做的事情,以便我们进一步挖掘问题。 @Apteryx 等等,你是说即使在可编辑模式下也能工作? 这个答案对我有用。我认为它对 OP 不起作用,因为如果您检查他的答案,他的安装有一些奇怪的损坏(或者他的计算机处于奇怪的状态)。 pip uninstall pkg 工作 afaik。 试过这个pip uninstall an-editable-package-0.1.0并得到WARNING: Skipping an-editable-package-0.1.0 as it is not installed.,但它肯定是用pip install -e an-editable-package-0.1.0安装的。【参考方案2】:

使用 cmd 安装开发包:

pip install --editable .

卸载:

rm -r $(find . -name '*.egg-info')

现在您可以使用:

pip uninstall package_name 

python setup.py develop --uninstallpython setup.py develop -u

【讨论】:

你能指定你在哪里运行第二个命令吗? @ethana***s . 是当前目录,你使用包的完整绝对路径。 不完整。所有的 Python 包呢? (site-packages目录) 这不会完全撤消安装。它会从安装包的文件夹中删除内容,但不会删除dist-packages 目录(Python 查找已安装包的位置)中的符号链接。使用清洁剂python setup.py develop -u. @Charlie path/to/pythonX.Y setup.py develop --uninstall 也应该卸载,但我建议改用 pip 方式。【参考方案3】:

对新版本的 setup_tools 执行相同操作的更简单方法是运行以下命令:

python setup.py develop -u

这与@glarrain 在他的回答中描述的基本相同。

【讨论】:

该命令应该有任何输出吗?我知道它说running develop,但我仍然是.egg-info 文件...是否应该删除它? 有这个答案的“setup_tools 的新版本”是什么?你能确认一下吗? 您的回答是否保证不必手动移除薄层? 它不会产生任何输出。根据我的理解,它应该删除它:“--uninstall, -u 取消部署当前项目。您可以使用--install-dir 或-d 选项来指定暂存区。创建的.egg-link 文件将被删除,如果存在并且它仍然指向项目目录。”来自setuptools docs。运行后它是否仍然从开发目录加载内容? @CharlieParker 我不确定这是在哪个版本中引入的。我从来不需要手动删除这些文件。【参考方案4】:

这是 debian/ubuntu linux 上使用 OS 安装的 pip(我是 v8.1.1)的一个错误,即使你已经升级了 pip(例如 get-pip.py )。见https://github.com/pypa/pip/issues/4438

有关如何清理的讨论请参阅 https://askubuntu.com/questions/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip,尽管解决方案有“删除所有内容”的种类。

...pip packages [go] to /usr/local/lib/python2.7/dist-packages, apt packages to /usr/lib/python2.7/dist-packages

...~/.local/lib 中也安装了一些软件包。

对于我的系统,我只需要删除/usr/local/lib/python2.7/dist-packages/package_name.egg-link

【讨论】:

对我来说 pip uninstall library 工作得很好。如果你去回答 OP 提供的答案,他的图书馆被破坏似乎有点奇怪。希望这可以节省人们下次来这里的时间。不过,有许多不同的选项可能会起作用【参考方案5】:

virtualenv/lib/python2.7/site-packages/(如果不使用 virtualenv 则system_dir/lib/python2.7/dist-packages/

删除 egg 文件(例如distribute-0.6.34-py2.7.egg)(如果有) 从文件easy-install.pth中删除相应的行(它应该是源目录或egg文件的路径)。

【讨论】:

有点奇怪,没有相应的卸载方式。 @Drake 是的,实际上很烦人 使用当前的 pip 版本,对于使用 -e 选项安装的软件包,卸载也可以正常工作。 对我来说使用 8.1.2,pip uninstall package_name 有效,但 pip uninstall . 无效 存在一个针对 pip here 的未解决问题,因为它能够删除可编辑安装的软件包。【参考方案6】:

原来我的安装不知何故损坏了。

我可以在以下位置找到条目:

/usr/local/lib/python2.7/site-packages/easy-install.pth

为了解决问题,我手动删除了 .pth 文件中的行!

import sys; sys.__plen = len(sys.path)
...
/absolute-path-to/horus  # <- I removed this line
...

【讨论】:

您的安装已损坏是什么意思?

以上是关于如何使用 pip 卸载可编辑包(使用 -e 安装)的主要内容,如果未能解决你的问题,请参考以下文章

卸载使用 `pip install 安装的软件包。

pip Command Not Found – Mac 和 Linux 错误被解决

一分钟学会Python中pip的安装与使用

pip3安装和卸载以及常用命令

pip:从特定目录卸载包

怎么卸载已经安装的python