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

我用 -e 安装了一些软件包

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

我看见我的嘴唇冻僵了

> 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

如何卸载这样的软件包?

50813 次浏览

原来我的设备坏了。

我可以找到条目:

/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
...

{virtualenv}/lib/python2.7/site-packages/(如果不使用 viralenv,那么使用 {system_dir}/lib/python2.7/dist-packages/)

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

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

pip uninstall yourpackage

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

使用 cmd 安装一个 dev 包:

pip install --editable .

卸载:

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

现在您可以使用:

pip uninstall package_name

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

这是 debian/ubuntu linux 上使用安装了 OS 的 pip (对我来说是 v8.1.1)的 bug,即使升级了 pip (例如 get-pip.py) ,sudo pip也会调用这个 bug。见 https://github.com/pypa/pip/issues/4438

关于如何清理的讨论见 https://askubuntu.com/questions/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip,虽然解决方案有“删除一切”的种类。

将软件包转到 /usr/local/lib/python2.7/dist-packages,将软件包转到 /usr/lib/python2.7/dist-packages

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

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

对新版本的 setup _ tools 进行同样操作的一种更简单的方法是运行以下命令:

python setup.py develop -u

这基本上和@glarrain 在他的回答中所描述的是一样的。

这里有一个演示,例如你不想在命令中替换包名:

.../pytest-migration$ python setup.py develop -u
running develop
Removing /home/me/virtualEnvs/automation/lib/python2.7/site-packages/pytest-migration.egg-link (link to .)
Removing pytest-migration 1.0.155 from easy-install.pth file
.../pytest-migration$

我想我有些东西可以补充这里的所有答案:

使用 pip list,您将看到所有已安装的软件包,这里有一个小技巧: 一个 pip install可以在这个列表中创建多个条目。特别是在进行可编辑安装时,除了光盘上源代码的位置之外,还会列出 <package_name>

这个 <package_name>只用于 pip,并且从来没有在 python 中调用过,据我所知,它是在您的 pyproject.tomlsetup.cfgsetup.py中配置的。

因此,要使用 pip 正确卸载包,应该使用此名称,而不是包含在包中的单个模块的名称。

希望能有帮助!