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

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

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

Ответ 1

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

pip freeze | xargs pip uninstall -y

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

pip freeze | grep -v "^-e" | xargs pip uninstall -y

Ответ 2

Это будет работать для всех систем 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)

Ответ 3

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

virtualenv --clear MYENV

Но обычно я просто удаляю и воссоздаю virtualenv.

Ответ 4

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

pip uninstall -y -r <(pip freeze)

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

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

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

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

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

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

pipuninstallall

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

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

pipenv uninstall --all

Ответ 5

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

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

 pip freeze --local | xargs pip uninstall -y

Ссылка: pip freeze --help

Ответ 6

Способ 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

Ответ 7

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

# On production:
pip freeze > reqs.txt

# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt

Ответ 8

В 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

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

Ответ 10

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

pip freeze > requirements.txt

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

pip uninstall -y -r requirements.txt 

Ответ 11

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

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

-r, - -r файл эквайринга

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

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

Ответ 12

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

 pip uninstall -y (pip freeze)

Ответ 13

(добавив это как ответ, потому что у меня недостаточно репутации, чтобы комментировать ответ @blueberryfields)

Ответ @blueberryfields работает хорошо, но терпит неудачу, если нет пакета для удаления (что может быть проблемой, если это "удалить все" является частью сценария или make файла). Это можно решить с помощью xargs -r при использовании GNU-версии xargs:

pip freeze --exclude-editable | xargs -r pip uninstall -y

от man xargs:

-r, --no -r un-if-empty

Если стандартный ввод не содержит небланков, не запускайте команду. Обычно команда запускается один раз, даже если нет ввода. Эта опция является расширением GNU.

Ответ 14

Это был самый простой способ удалить все пакеты 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))

Ответ 15

Поддержка кросс-платформы с помощью только 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.

Ответ 16

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

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

Ответ 17

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

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

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

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

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

Ответ 18

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

$ brew reinstall python

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

$ brew reinstall python3

Ответ 19

В командной оболочке 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*

Ответ 20

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

pew wipeenv [env]

Ответ 21

легкий надежный способ кросс-платформенный и работа в pipenv, а также:

pip freeze 
pip uninstall -r requirement

от pipenv:

pipenv run pip freeze 
pipenv run pip uninstall -r requirement

но не будет обновлять piplock или pipfile, так что имейте в виду

Ответ 22

pip3 freeze --local | xargs pip3 uninstall -y

Возможно, вам придется несколько раз запустить эту команду, чтобы получить пустое значение pip3 freeze --local.

Ответ 23

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

для 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 из вашего дистрибутива и, вероятно, оставит вас с разбитой системой.