Як видалити пакет python, який було встановлено за допомогою distutils?


92

Чи можете ви просто видалити каталог з вашої інсталяції python, або є якісь затяжні файли, які ви повинні видалити?

Відповіді:


45

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

Примітно, що в даний час distutils не має команди видалення .

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


4
Чи можете ви оновити це для прямого вирішення затяжних файлів у частині питання?
S.Lott

Я думав, що зробив - файли не створюються за межами каталогів, визначених конфігурацією distutils та встановленням прапорів, тому будь-які "затяжні" файли будуть існувати в цих каталогах. Це залежить від упаковки.
cdleary

2
@cdleary: спасибі, але я сподівався, що ти просто поясниш та зміцниш свою відповідь, а не додаєш довгу нитку коментарів.
S.Lott

2
@ S.Lott: Вибачте, але я не знаю, в якій частині відповіді ви хочете отримати роз’яснення - чи можете ви бути більш конкретними?
cdleary

1
msg139773 Дата: 04.07.2011 14:35 distutils2 / упаковка тепер надає функцію видалення та команду pysetup remove.
Едвард

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

Так, можна безпечно просто видалити все, що встановлено. Це стосується встановлених папок або файлів .egg. Звичайно, все, що залежить від цього коду, більше не працюватиме.

Якщо ви хочете змусити його працювати знову, просто переінсталюйте.

До речі, якщо ви використовуєте distutils, також розгляньте можливість використання багатоверсійної функції. Це дозволяє встановити кілька версій будь-якого окремого пакета. Це означає, що вам не потрібно видаляти стару версію пакета, якщо ви просто хочете встановити новішу версію.


5

В ubuntu 12.04 я виявив, що єдиним місцем, яке потрібно шукати за замовчуванням, є

/usr/local/lib/python2.7/

І просто видаліть відповідну папку та файл, якщо вони є!


Іноді в / 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.



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 "знайти", до речі; смак, який ви отримуєте на OS X, не знає про "-printf '% T @'")

Я використовую це все час.


2

Для Windows 7,

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

, тоді

виберіть пакет python для видалення.


@Mauricio Я не бачу старих версій у списку, але я бачу файли яєць у пакунках сайту. Це проблема?

1

На Mac OSX вручну видаліть ці 2 каталоги під вашим pathToPython / site-пакети / буде працювати:

  • {packageName}
  • {packageName} - {version} -info

наприклад, для видалення pyasn1 , який є встановленим проектом:

  • rm -rf lib / python2.7 / site-пакети / pyasn1
  • rm -rf lib / python2.7 / site-Packages / pyasn1-0.1.9-py2.7.egg-info

Щоб дізнатись, де знаходиться ваш сайт-пакет:

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

Готово!


1
Спробуйте пояснити, що ви робите і чому, замість того, щоб просто показувати вихідні дані консолі.
Headhunter Xamd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.