Як виявити та видалити пакети Python, встановлені через pip?


73

Я випадково встановив пакети Python в мою систему, використовуючи pipзамість apt-get. Я робив це двома способами:

  • використовуючи старішу версію virtualenv, я забув додати --no-site-packagesпри створенні virtualenv - після цього, коли я зателефонував pip install, пакети Python, де встановлено в систему, а не virtualenv
  • у вірно налаштованому virtualenv я набрав sudo pip install somepackage- sudo, встановлене в системі, а не virtualenv

Я випадково помітив це, тому що я набрав pip freezeпоза virtualenv і помітив декілька перелічених Python пакетів, яких там не повинно бути. Тож тепер моє запитання:

  • як я ідентифікую всі пакети Python, які були помилково встановлені в системі (тобто пакети Python, які відображаються у pip freezeсписку, але не були встановлені разом apt-get)?
  • як їх видалити?

Відповіді:


56

Ubuntu Oneiric (і я також очікую, що новіші версії) встановлюють пакети pip /usr/local/lib/python2.7/dist-packagesта aptпакети для /usr/lib/python2.7/dist-packages. Тому просто перевірте колишній каталог та sudo pip uninstallкожен пакет, який ви знайдете там.


12
Я пішов жорстоко і видали sudo rm -r /usr/local/lib/python2.7. Все йде нормально.
Аптерикс

@Apteryx, я зробив те ж саме /usr/local/lib/python3.5, і через деякий час оновлення update-notifier-commonпакету не вдалося через відсутність sixпакета Python 3 . Я в кінцевому підсумку установка sixз sudo -H pip3 install six.
Олексій

2
@Apteryx чорт ти, людина! Я робив те саме, і тепер у мене вся система трахкалася! адже майже все в ubuntu покладається на python!
юкасіма хуксай

Я помітив, що зараз у мене є купа зламаних виконуваних файлів /usr/local/bin/(деякий час тому я просто видалив /usr/local/lib/python3.5і перейшов на conda ).
Олексій

22

Pip в даний час ігнорує команди для видалення, які намагаються видалити щось, що належить ОС. Він не помиляється, як це робиться з відсутнім пакетом. Отже, тепер ви можете видалити наступний процес:

pip freeze > dump.txt

Відредагуйте викинутий файл, щоб видалити будь-які -eрядки "редагована установка", все після ==знака ( %s;==.*;;gin vim), поміняйте нові рядки на пробіли ( %s;\n; ;gin vim). Тоді можна видалити всі пакети, що не належать до власності

cat dump.txt | xargs sudo pip uninstall -y

Мені довелося робити цю процедуру двічі, тому що кілька пакетів також було встановлено ~/.local/lib.


1
Це має бути прийнята відповідь для мене
Nam G VU

3
Якщо хтось хоче невпевнений одноколісний лайнер:sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
Бенуа Даффез

4
Обережно! Це залежить від того, чи постачається ваша ОС спеціальною версією pip. На Archlinux pipрадісно видаляє системні пакети. З іншого боку, pipна debian Джессі скаржиться на помилки та помилки:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
Thomas G.

1
вам потрібно судо? - це безумовно повинна бути прийнята відповідь
Джонатан

6

AFAIK sudo pip installвстановиться на /usr/local/lib/pythonVERSION/dist-packages. Потрібно запустити sudo pip uninstallдля видалення системи пакетів у всій країні. Здається, що pip freezeшукає метадані пакета і перелічить все, що встановлено, як від pip, так і apt-get поза virtualenvs. У -lвіртуальному середовищі є можливість перелічити пакети, застосовні лише до цього віртуального середовища, але це, мабуть, є випадком за замовчуванням, а також у віртуальному середовищі. Я думаю, ви можете просто видалити пов'язані пакети /usr/local/lib/pythonVERSION/dist-packages, а також, але не дуже зручний метод, я думаю.


5

Щоб видалити пакет, встановлений через pip, просто натисніть Ctrl+ Alt+ Tна клавіатурі, щоб відкрити Terminal. Коли він відкриється, запустіть команду нижче.

pip uninstall < package-name >

Для пошуку пакетів

pip search <package you want to search for>

Щоб визначити, які пакети Python були встановлені за допомогою pip, freezeкомандою, яка надасть вам список встановлених пакетів та їх версії. Я б запропонував видалити всі екземпляри та повторно встановити за допомогою sudo apt-getкоманди

sudo apt-get install python3

як я можу визначити, які пакети Python були встановлені через pip, а які - apt-get? чи можу я все-таки, pip uninstallякщо sudo pip installв першу чергу використовував?
david.libremone

@ d3vid pip freezeпоказує лише встановлені пакети (AFAICS).
Олі

1
@oli pip freeze, принаймні точно, також перераховує пакунки, встановлені apt, як описані тут інші відповіді.
nealmcb

0

Мені потрібно було безпечно очистити дисковий простір від пакетів Python. Хоча це повністю очищення від пакетів, мені також потрібно було перемістити версії Python, тому мені не потрібні старі пакети. Я використовував наступне, щоб отримати всі назви своїх пакетів, пропустити перші 2 рядки та захопити перший стовпець та видалити без взаємодії з користувачем:

pip list | awk 'NR>2 {print $1}' | xargs -I {} pip uninstall -y {}

-2

Це має щось спільне з Homebrew. У мене не було проблем з pyodbc на моєму Mac Air, поки я не встановив Homebrew і не використав його для кількох речей. Я знайшов цю нитку на github, яка закінчується в розчині, який працював на мене.

"Якщо у вас є Homebrew, просто встановіть заголовки ODBC:

$ brew install unixodbc

і знову запустіть "pip install pyodbc". "

Це на 100% вирішило проблему для мене і зайняло лише хвилинку. Дай постріл.


можливо, вам потрібно опублікувати це у Ask Different? apple.stackexchange.com
david.libremone
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.