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

390

Я пытаюсь исправить один из моих виртуальных пользователей - я хотел бы, чтобы reset все установленные библиотеки возвращались к тем, которые соответствуют производству.

Есть ли быстрый и простой способ сделать это с помощью pip?

  • 2
    @patelshahrukh Удаление Python НЕ удаляет пакеты pip. ПОЖАЛУЙСТА, избегайте этого, так как это, скорее всего, НЕ БУДЕТ РАБОТАТЬ так, как вы думаете, и , в зависимости от того, как вы снова установите Python, может оставить вашу машину в нестабильном состоянии, которую нужно исправить .
Теги:
pip

20 ответов

591
Лучший ответ

Я нашел этот фрагмент в качестве альтернативного решения. Это более грациозное удаление библиотек, чем обновление виртуального файла:

pip freeze | xargs pip uninstall -y

Если у вас есть пакеты, установленные через VCS, вам нужно исключить эти строки и удалить пакеты вручную (повышенные из комментариев ниже):

pip freeze | grep -v "^-e" | xargs pip uninstall -y
  • 3
    Я считаю это хорошим решением, просто потому, что оно не удаляет виртуальную среду полностью - я мог внести изменения, например, в postactivate которая останется.
  • 4
    После запуска я понял, что он удалил пакет setuptools . Я решил проблему, следуя инструкциям здесь: stackoverflow.com/questions/7446187/…
Показать ещё 12 комментариев
157

Это будет работать для всех систем Mac, Windows и Linux. Чтобы получить список всех пакетов pip в файле needs.txt (Примечание. Это перезапишет файл require.txt, если он существует, иначе создаст новый).

pip freeze > requirements.txt

Теперь, чтобы удалить один за другим

pip uninstall -r requirements.txt

Если мы хотим удалить все сразу, то

pip uninstall -r requirements.txt -y

Если вы работаете на существующий проект, который имеет requirements.txt файл и ваша среда расходились, просто заменить requirements.txt из приведенных выше примеров с toberemoved.txt. Затем, выполнив описанные выше шаги, вы можете использовать файл requirements.txt для обновления вашей чистой среды.

И для одной команды без создания какого-либо файла (как предложил joeb).

pip uninstall -y -r <(pip freeze)
  • 8
    Вероятно, стоит упомянуть, что вы принудительно перезаписываете их файл require.txt, если они этого не знали. :)
  • 4
    Кроме того, если вы хотите удалить все пакеты, добавьте «-y». Пример: pip uninstall -r requirements.txt -y
Показать ещё 8 комментариев
88

Я думаю, что это работает с последними

virtualenv --clear MYENV
  • 0
    Это работает для меня на virtualenv 1.7.1.2.
  • 7
    Эффективно ли это так же, как запуск wipeenv ? virtualenvwrapper.readthedocs.org/en/latest/...
Показать ещё 3 комментария
52

Я хотел поднять этот ответ из секции комментариев, потому что это одно из самых элегантных решений в этой ветке. Полная оценка этого ответа идет на @joeb.

pip uninstall -y -r <(pip freeze)

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

Изменение: Кто-нибудь знает, как заставить эту команду работать в Makefile?

Бонус: псевдоним Bash

Я добавляю это в свой профиль bash для удобства:

alias pipuninstallall="pip uninstall -y -r <(pip freeze)"

Затем запустите:

pipuninstallall

Альтернатива для пипенв

Если вы используете pipenv, вы можете просто запустить:

pipenv uninstall --all
  • 8
    Должно быть легко № 1
  • 0
    Мне это нравится, но в нулевом случае это не работает ( pip freeze ничего не дает, если пакеты не установлены, а затем, к сожалению, pip uninstall жалуется).
Показать ещё 2 комментария
37

Способ 1 (с pip freeze)

pip freeze | xargs pip uninstall -y

Способ 2 (с pip list)

pip list | awk '{print $1}' | xargs pip uninstall -y

Способ 3 (с virtualenv)

virtualenv --clear MYENV
  • 2
    Использование sudo не обязательно и, вероятно, опасно для использования без тщательного рассмотрения, поскольку оно влияет на глобальную настройку машины. см. этот ответ, например: stackoverflow.com/questions/15028648/…
  • 5
    Метод 2 ( pip list ) прекрасно работает, пока у вас нет случайного удаления пипа -_-
23

Другие ответы, которые используют pip list или pip freeze должны включать --local иначе он также удалит пакеты, найденные в общих пространствах имен.

Так вот фрагменты, которые я регулярно использую

 pip freeze --local | xargs pip uninstall -y

или же

 pip list --local | py -x "print(x.split()[0])" | xargs pip uninstall -y

Узнайте больше об этом поведении, pip freeze --help

16

Самый быстрый способ - полностью переделать virtualenv. Я предполагаю, что у вас есть файл требований .txt, который соответствует производству, если нет:

# On production:
pip freeze > reqs.txt

# On your machine:
rmvirtualenv MYENV
mkvirtualenv MYENV
pip install -r reqs.txt
  • 1
    Обращается ли это даже к случаю, когда была редактируемая установка (в основном установка в режиме разработки setuptools), которая создавала локальный файл .egg-info, который затем мешал остальной части процесса установки / удаления? Поскольку это набор файлов, он, похоже, не знает, как обрабатывать их присутствие, и вместо того, чтобы что-либо удалять, он делает структуру локальной директории под MYENV дополненной: `> Новые исполняемые файлы python в MYENV / bin / python3.4> Также создание исполняемого файла в MYENV / bin / python> Установка setuptools, pip, wheel ... выполнено. Но MYENV не сбросил среду!
13

В Windows, если ваш path настроен правильно, вы можете использовать:

pip freeze > unins && pip uninstall -y -r unins && del unins

Он должен быть похож на Unix-подобные системы:

pip freeze > unins && pip uninstall -y -r unins && rm unins

Просто предупреждение о том, что это не совсем твердо, поскольку вы можете столкнуться с такими проблемами, как "Файл не найден", но он может работать в некоторых случаях, тем не менее

EDIT: Для ясности: unins - это произвольный файл, который имеет данные, записанные ему при выполнении этой команды: pip freeze > unins

Затем файл, который он написал, затем используется для удаления вышеупомянутых пакетов с подразумеваемым соглашением/предварительным одобрением через pip uninstall -y -r unins

Файл окончательно удаляется после завершения.

11

Использование virtualenvwrapper:

wipeenv

См. документация wipeenv

  • 1
    Объясните четко шаг за шагом для легкого понимания
  • 4
    Если вы используете virtualenvwrapper, наберите wipeenv
Показать ещё 2 комментария
6

Для пользователей Windows это то, что я использую в Windows PowerShell

 pip uninstall -y (pip freeze)
4

Его старый вопрос, который я знаю, но я наткнулся на него, поэтому для дальнейшего использования теперь вы можете сделать это:

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

-r, --requirement file

Удалите все пакеты, перечисленные в данном файле требований. Эта опция может использоваться несколько раз.

из документации по протоколу версии 8.1

2

Это был самый простой способ удалить все пакеты python.

from pip import get_installed_distributions
from os import system
for i in get_installed_distributions():
    system("pip3 uninstall {} -y -q".format(i.key))
2

Это команда, которая работает для меня:

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

Поддержка кросс-платформы с помощью только pip:

#!/usr/bin/env python

from sys import stderr
from pip.commands.uninstall import UninstallCommand
from pip import get_installed_distributions

pip_uninstall = UninstallCommand()
options, args = pip_uninstall.parse_args([
    package.project_name
    for package in
    get_installed_distributions()
    if not package.location.endswith('dist-packages')
])

options.yes = True  # Don't confirm before uninstall
# set `options.require_venv` to True for virtualenv restriction

try:
    print pip_uninstall.run(options, args)
except OSError as e:
    if e.errno != 13:
        raise e
    print >> stderr, "You lack permissions to uninstall this package.
                      Perhaps run with sudo? Exiting."
    exit(13)
# Plenty of other exceptions can be thrown, e.g.: `InstallationError`
# handle them if you want to.
1

В командной оболочке Windows команда pip freeze | xargs pip uninstall -y pip freeze | xargs pip uninstall -y не будет работать. Так что для тех из вас, кто использует Windows, я нашел альтернативный способ сделать это.

  1. Скопируйте все имена установленных пакетов pip из команды pip freeze в файл .txt.
  2. Затем перейдите в местоположение вашего файла .txt и выполните команду pip uninstall -r *textfile.txt*
1

В моем случае я случайно установил несколько пакетов по всему миру с помощью установленного Homebrew pip на macOS. Самый простой способ вернуться к пакетам по умолчанию был простым:

$ brew reinstall python

Или, если вы использовали pip3:

$ brew reinstall python3
  • 0
    Этот ответ предполагает слишком много об окружающей среде и не решает проблему напрямую, например, если вы используете pyenv.
  • 0
    @ Марк Хорошо, если вы используете pyenv, то вам нужно сделать что-то другое. В общем случае, если это не так, я считаю, что это самое простое и наименее хакерское решение. Обратите внимание, что это условие явно указано в начале ответа.
Показать ещё 3 комментария
1

Если вы используете virtualenv:

virtualenv --clear </path/to/your/virtualenv>

например, если ваш virtualenv равен /Users/you/.virtualenvs/projectx, тогда вы запустите:

virtualenv --clear /Users/you/.virtualenvs/projectx

если вы не знаете, где находится ваше виртуальное env, вы можете запустить which python из активированного виртуального env, чтобы получить путь

0

Если вы используете pew, вы можете использовать команду wipeenv:

pew wipeenv [env]

0

Во-первых, добавьте весь пакет в requirements.txt

pip freeze > requirements.txt

Затем удалите все

pip uninstall -y -r requirements.txt 
-3

Пип не знает, какие пакеты были установлены им и какие пакеты были установлены вашим диспетчером системных пакетов. Для этого вам нужно будет сделать что-то вроде этого

для rpm-based distros (замените python2.7 на вашу версию python, на которой вы установили pip):

find /usr/lib/python2.7/ |while read f; do
  if ! rpm -qf "$f" &> /dev/null; then
    echo "$f"
  fi
done |xargs rm -fr

для распределения на основе deb:

find /usr/lib/python2.7/ |while read f; do
  if ! dpkg-query -S "$f" &> /dev/null; then
    echo "$f"
  fi
done |xargs rm -fr

затем очистить оставшиеся пустые каталоги:

find /usr/lib/python2.7 -type d -empty |xargs rm -fr

Я нашел верхний ответ очень вводящим в заблуждение, так как он удалит все (большинство?) пакетов python из вашего дистрибутива и, вероятно, оставит вас с разбитой системой.

  • 0
    При всем уважении это кажется сопоставимым. Почему бы не dpkg-query -S '/usr/lib/python2.7/*' , извлечь имена и dpkg-query -L каждое имя, чтобы выгрузить связанные файлы? Уже подготовлены манифесты. Мое основное возражение заключается в том, что вместо того, чтобы ориентироваться на пакеты, установленные где-либо, кроме pip, вы нацеливаетесь на пакеты, установленные любым, кроме ожидаемого вами менеджера, и в месте, которое обычно не должно касаться pip. pip list -l перечисляет пакеты, которые он установил локально, а некоторые даже pip install --target=... Удаление всех в настоящее время пустых папок будет вас кусать!
Сообщество Overcoder
Наверх
Меню