Как удалить пакет Python, установленный с помощью distutils?

92

Можете ли вы просто удалить каталог из вашей установки python, или есть какие-либо устаревшие файлы, которые вы должны удалить?

Hortitude
источник

Ответы:

45

Это зависит от параметров, которые вы передаете, installи содержимого файлов конфигурации distutils. в системе / в пакете. Я не верю, что какие-либо файлы изменяются вне каталогов, указанных таким образом.

Примечательно, что в настоящее время distutils не имеет команды удаления .

Также примечательно, что удаление пакета / яйца может вызвать проблемы с зависимостями - такие утилиты, как easy_installпопытки решить такие проблемы.

cdleary
источник
4
Не могли бы вы обновить это, чтобы напрямую обратиться к части вопроса, связанной с устаревшими файлами?
S.Lott
Я думал, что это так - файлы не создаются вне каталогов, указанных в параметрах настройки и установки distutils, поэтому любые "устаревшие" файлы будут существовать в этих каталогах. Он варьируется от пакета к пакету.
cdleary
2
@cdleary: спасибо, но я надеялся, что вы просто проясните и укрепите свой ответ, а не добавите длинную ветку комментариев.
S.Lott
2
@ S.Lott: Извините, но я не знаю, по какой части ответа вы хотите уточнить - не могли бы вы уточнить?
cdleary 01
1
msg139773 Дата: 2011-07-04 14:35 distutils2 / Packaging теперь предоставляет функцию удаления и команду удаления pysetup.
Эдвард
19

Вам нужно будет удалить следующие три вещи, которые будут установлены:

  1. Пакеты / модули
  2. Скрипты
  3. Дата файлы

Теперь в моей системе Linux они живут в:

  1. /usr/lib/python2.5/site-packages
  2. / usr / bin
  3. / usr / share

Но в системе Windows они, скорее всего, полностью находятся в каталоге распространения Python. Я понятия не имею об OSX, за исключением того, что мне больше нравится следовать шаблону Linux.

Али Афшар
источник
14

Другой способ взлома на основе метки времени:

  1. Создайте якорь: touch /tmp/ts
  2. Переустановите удаляемый пакет: python setup.py install --prefix=<PREFIX>
  3. Удалите более свежие файлы, чем файл привязки: find <PREFIX> -cnewer /tmp/ts | xargs rm -r
Максимк
источник
1
-1. Мне не нравится | xargs rm -r. Я рекомендую просматривать каждый файл вручную . В ext4 (и других файловых системах) findздесь также будут перечислены все папки . Если ваш префикс был /usr, вы удалите/usr/* .
Матин Улхак
8

Да, безопасно просто удалить все, что установлено distutils. Это касается установленных папок или файлов .egg. Естественно, все, что зависит от этого кода, больше не будет работать.

Если вы хотите, чтобы он снова заработал, просто переустановите.

Кстати, если вы используете distutils, также подумайте об использовании мультиверсии. Это позволяет вам установить несколько версий одного пакета. Это означает, что вам не нужно удалять старую версию пакета, если вы просто хотите установить более новую версию.

Салим Фадли
источник
5

В ubuntu 12.04 я обнаружил, что единственное место, где вам нужно искать по умолчанию, находится под

/usr/local/lib/python2.7/

И просто удалите связанные папку и файл, если они есть!

Hydrox24
источник
Иногда в / usr / lib / python <2.7 / 3.6>
Vineet
4

Если это делается для тестирования и / или разработки, в setuptools есть команда разработки, которая обновляется каждый раз, когда вы вносите изменения (поэтому вам не нужно удалять и переустанавливать систему каждый раз, когда вы вносите изменение). И вы также можете удалить пакет, используя эту команду.

Если вы все-таки используете это, все, что вы объявите как сценарий, останется как устаревший файл.

Джейсон Бейкер
источник
4

install --record + xargs rm

sudo python setup.py install --record files.txt
xargs sudo rm -rf < files.txt

удаляет все файлы и оставляет пустые каталоги.

Это не идеально, этого должно быть достаточно, чтобы избежать конфликтов пакетов.

А затем вы можете завершить работу вручную, если хотите, прочитав files.txt, или проявить смелость и автоматизировать удаление пустого каталога.

Надежным помощником будет:

python-setup-uninstall() (
  sudo rm -f files.txt
  sudo python setup.py install --record files.txt && \
  xargs rm -rf < files.txt
  sudo rm -f files.txt
)

Протестировано в Python 2.7.6, Ubuntu 14.04.

Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
источник
3

для Python в Windows:

python -m pip uninstall "package_keyword"
uninstall **** (y/n)?
user8074545
источник
2

Я только что удалил пакет python, и хотя я не уверен, что сделал это идеально, я достаточно уверен.

Я начал со списка всех файлов, связанных с Python, упорядоченных по дате, исходя из предположения, что все файлы в моем пакете будут иметь более или менее одинаковую метку времени, а другие файлы не будут.

К счастью, у меня установлен python /opt/Python-2.6.1; Если бы я использовал Python, поставляемый с моим дистрибутивом Linux, мне бы пришлось тщательно его изучить /usr, что заняло бы много времени.

Затем я просто изучил этот список и с облегчением отметил, что все, что я хотел уничтожить, состояло из одного каталога /opt/Python-2.6.1/lib/python2.6/site-packages/module-name/, и одного файла,/opt/Python-2.6.1/lib/python2.6/site-packages/module-x.x.x_blah-py2.6.egg-info .

Я просто удалил их.

Вот как я получил список файлов с сортировкой по дате:

find "$@" -printf '%T@ ' -ls | sort -n | cut -d\ -f 2-

(Я думаю, что это должно быть GNU "find", между прочим; вкус, который вы получаете в OS X, не знает о "-printf '% T @'")

Я использую это все время.

offby1
источник
2

Для Windows 7,

Панель управления -> Программы -> Удалить

, тогда

выберите пакет python для удаления.

b_dev
источник
@Mauricio Я не вижу старых версий в списке, но я вижу файлы яиц в пакетах сайта. Это проблема?
1

В Mac OSX вручную удалите эти 2 каталога по вашему пути ToPython / site-packages / будет работать:

  • {имя пакета}
  • {packageName} - {version} -info

например, чтобы удалить pyasn1 , который является установленным проектом distutils:

  • rm -rf библиотека / python2.7 / сайты-пакеты / pyasn1
  • rm -rf lib / python2.7 / сайт-пакеты / pyasn1-0.1.9-py2.7.egg-информация

Чтобы узнать, где находится ваш сайт-пакет:

python -m site
Линн
источник
1
Работает как положено.
c1377554,
-1

ERROR: flake8 3.7.9 has requirement pycodestyle<2.6.0,>=2.5.0, but you'll have pycodestyle 2.3.1 which is incompatible. ERROR: nuscenes-devkit 1.0.8 has requirement motmetrics<=1.1.3, but you'll have motmetrics 1.2.0 which is incompatible. Installing collected packages: descartes, future, torch, cachetools, torchvision, flake8-import-order, xmltodict, entrypoints, flake8, motmetrics, nuscenes-devkit Attempting uninstall: torch Found existing installation: torch 1.0.0 Uninstalling torch-1.0.0: Successfully uninstalled torch-1.0.0 Attempting uninstall: torchvision Found existing installation: torchvision 0.2.1 Uninstalling torchvision-0.2.1: Successfully uninstalled torchvision-0.2.1 Attempting uninstall: entrypoints Found existing installation: entrypoints 0.2.3 ERROR: Cannot uninstall 'entrypoints'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

Затем я печатаю:

conda uninstall entrypoints pip install --upgrade pycodestyle pip install nuscenes-devkit

Выполнено!

Goodpen
источник
1
Пожалуйста, попробуйте объяснить, что вы делаете и почему, вместо того, чтобы просто показывать вывод консоли.
Охотник за головами Ксамд,