Как удалить редактируемые пакеты с помощью 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

Как мне удалить такой пакет?

8 ответов

Решение

В {virtualenv}/lib/python2.7/site-packages/ (если не использовать virtualenv, то {system_dir}/lib/python2.7/dist-packages/)

  • удалить файл яйца (например, distribute-0.6.34-py2.7.egg) если есть
  • из файла easy-install.pth, удалите соответствующую строку (это должен быть путь к исходному каталогу или к файлу egg).

Более простой способ сделать то же самое с новой версией setup_tools - запустить следующее:

python setup.py develop -u

Который в основном делает то же самое, что описывает @glarrain в своем ответе.

Установите пакет dev, используя cmd:

pip install --editable .

Удаление:

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

Просто удалите пакет, который вы установили в "редактируемом" режиме:

pip uninstall yourpackage

Оказывается, моя установка была как-то повреждена.

Я мог бы найти запись в:

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

Это ошибка в Debian / Ubuntu Linux с использованием установленного ОС pip (v8.1.1 для меня), который вы будете вызывать с sudo pip даже если вы обновили 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, хотя решения есть "удалить все" разнообразие.

... пип пакеты [перейти] к /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

В случае, если это поможет кому-то еще: Не уверен, что это та же проблема, но я столкнулся с чем-то похожим, где я установил пакет локально для разработки с:

$ pip install -e .

но когда я побежал

$ pip uninstall -e .

я получил

Usage:   
  pip uninstall [options] <package> ...
  pip uninstall [options] -r <requirements file> ...

no such option: -e

и когда я бегу pip freeze я получил

package1=1.0.0
package2=1.0.0
...
package12=1.0.0
-e git+git@github.com/me/my-repo.git@hash
package13=1.0.0
...

Так что я бросил это в requirements.txtудалил все кроме -e Строка (и) и затем выполняется:

$ pip uninstall -r requirements.txt

который работал для меня

Я думаю, мне есть что добавить ко всем ответам здесь:

С использованиемpip listвы увидите все свои установленные пакеты, и есть небольшая хитрость: одинpip installможет создать несколько записей в этом списке. В частности, когда вы выполняете редактируемую установку, вы будете иметь свой список помимо местоположения источника на вашем диске.

Этот<package_name>используется только дляpipи никогда не вызывается в питоне, насколько я понимаю, он настраивается в вашемpyproject.toml,setup.cfgилиsetup.py.

Таким образом, чтобы правильно удалить ваш пакет с помощью pip, вы должны использовать это имя, а не имя отдельных модулей, включенных в ваш пакет.

Надеюсь, поможет!

Другие вопросы по тегам