it-swarm.com.ru

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

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

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

412
blueberryfields

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

pip freeze | xargs pip uninstall -y

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

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

Это будет работать для всех Mac, Windows и Linux System . Чтобы получить список всех пакетов 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)
177
Harshad Kavathiya

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

virtualenv --clear MYENV
89
Robert Moskal

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

pip uninstall -y -r <(pip freeze)

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

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

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

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

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

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

pipuninstallall

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

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

pipenv uninstall --all
55
Taylor Edmiston

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

Другие ответы, которые используют 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

26
nehemiah

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

# On production:
pip freeze > reqs.txt

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

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

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

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

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

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

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

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

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

15
Richard Kenneth Niescior

Используя virtualenvwrapper function:

wipeenv

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

12
zesk

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

 pip uninstall -y (pip freeze)
6
benwrk

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

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

-r, --requirement файл 

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

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

4
Craicerjack

Для меня это был самый простой способ удалить все пакеты 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
Anonymous 138

Кроссплатформенная поддержка с использованием только 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.
2
Samuel Marks

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

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

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

pew wipeenv [env]

1
Mohammad Banisaeid

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

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

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

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

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

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

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

1
punkrockpolly

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

$ brew reinstall python

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

$ brew reinstall python3
1
Radon Rosborough

Сначала добавьте весь пакет в requirements.txt

pip freeze > requirements.txt

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

pip uninstall -y -r requirements.txt 
0
Shafikur Rahman