@patelshahrukh Удаление Python НЕ удаляет пакеты pip. пожалуйста ИЗБЕЖАТЬ делать это, так как оно , как , скорее всего , не будет работать так , как вы думаете , это будет, и , в зависимости от того, как вы установите питон снова, может оставить свою машину в неустойчивом состоянии , что это больше работы , чтобы исправить .
Я считаю это хорошим решением, просто потому, что оно не удаляет виртуальную среду полностью - возможно, я внес изменения, например, postactivateкоторые останутся.
niceguydave
5
После запуска этого я понял, что это удалило setuptoolsпакет. Я решил эту проблему, выполнив следующие инструкции: stackoverflow.com/questions/7446187/…
Дан
1
@ gerty3000 да, это (как задает вопрос) удалит все пакеты, установленные в виртуальной среде. в вашей среде может быть лучше установить setuptools в глобальном местоположении?
черничные
7
Вы также можете использовать, pip freeze --exclude-editable | xargs pip uninstall -yчтобы игнорировать пакеты VCS без использования шаблона grep
Это будет работать для всех систем Mac, Windows и Linux. Чтобы получить список всех пакетов pip в файле needs.txt (Примечание: это перезапишет файл require.txt, если существует, иначе создаст новый, также, если вы не хотите заменять старый файл require.txt, укажите другое имя файла). во всех следующих командах вместо place.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).
На самом деле - кажется (из того, с чем я только что столкнулся), тогда wipeenvкак в то время как внутри среды выдает ошибку и ничего не удаляет, если она используется в контексте pip install -eсборки разработки, попытка использования virtualenv --clear MYENVне выдает ошибку и не удаляет ничего из пакеты, которые вы, возможно, установили ранее в среде. По крайней мере, это относится к OSX. См. Bitbucket.org/dhellmann/virtualenvwrapper/issues/211/… для получения дополнительной информации.
mpacer
2
wipeenvэто псевдоним, предоставляемый virtualenvwrapper, так что не у всех есть.
Джонатан Хартли
2
ну, это своего рода подвох, но работает как магия. Я бы предпочел, чтобы все использовали pip uninstall -r needs.txt -y. Это делает большую уборку.
Muema
84
Я хотел поднять этот ответ в разделе комментариев, потому что это одно из самых элегантных решений в этой ветке. Полная оценка этого ответа идет на @joeb .
pip uninstall -y -r <(pip freeze)
Это прекрасно сработало для случая использования очистки папки пользовательских пакетов вне контекста virtualenv, который не обрабатываются многими из приведенных выше ответов.
Редактировать: Кто-нибудь знает, как заставить эту команду работать в Makefile?
Бонус: псевдоним Bash
Я добавляю это в свой профиль bash для удобства:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
Затем запустите:
pipuninstallall
Альтернатива для пипенв
Если вы используете pipenv, вы можете просто запустить:
Мне это нравится, но в нулевом случае это не работает ( pip freezeничего не выводится, если не установлено ни одного пакета, а затем pip uninstall, к сожалению, выдает жалобы).
Эрик Г
Хм хороший улов. Возможно, его можно включить в функцию bash, которая проверяет, является ли вывод замораживания пипса не пустым. Я не вижу отличного способа добиться этого, сохраняя при этом команду хорошей короткой строчкой.
Тейлор Эдмистон
1
make использует sh по умолчанию, но синтаксис подстановки <(...)- это bashism. Таким образом, вы можете либо использовать bash -c "...", либо обойти, выполнивpip freeze | pip uninstall -r /dev/stdin
Цезарь
Не работает с ноутбуками Azure:ERROR: Cannot uninstall 'bitarray'. 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.
SeaDude
54
Другие ответы, которые используют pip listили pip freezeдолжны включать,--local иначе будут также удалять пакеты, которые находятся в общих пространствах имен.
Это работало до тех пор, пока не попал в пакет , который произвел эту ошибку: ERROR: Cannot uninstall 'bitarray'. 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.. Тогда я не мог удалить больше модулей.
SeaDude
39
Способ 1 (с pip freeze)
pip freeze | xargs pip uninstall -y
Способ 2 (с pip list)
pip list | awk '{print $1}'| xargs pip uninstall -y
Использование sudo не является необходимым и, вероятно, опасно для использования без тщательного рассмотрения, поскольку оно влияет на глобальную настройку машины. см. этот ответ, например: stackoverflow.com/questions/15028648/…
blueberryfields
6
Метод 2 ( pip list) прекрасно работает, пока вы случайно не удалите pip -_-
Джастин
20
Мне удалось это сделать следующим образом:
Создайте файл требований с именем reqs.txt со списком установленных пакетов
pip freeze > reqs.txt
затем удалите все пакеты из reqs.txt
pip uninstall \
-y # remove the package with prompting for confirmation-r reqs.txt
Мне нравится этот метод, так как у вас всегда есть файл требований к пунктам, к которому можно обратиться в случае ошибки. Это также повторяется.
Обращается ли это даже к случаю, когда произошла редактируемая установка (в основном установка в режиме разработки setuptools), которая создала локальный файл .egg-info, который затем помешал остальной части процесса установки / удаления? Поскольку это набор файлов, он, похоже, не знает, как обрабатывать их присутствие, и вместо того, чтобы что-либо удалять, он делает структуру локальной директории под MYENV дополненной: `> Новые исполняемые файлы python в MYENV / bin / python3.4> Также создание исполняемого файла в MYENV / bin / python> Установка setuptools, pip, wheel ... сделано. Но MYENV не сбросил среду!
mpacer
16
В Windows, если ваш pathнастроен правильно, вы можете использовать:
Просто предупреждение, что это не совсем верно, так как вы можете столкнуться с такими проблемами, как «Файл не найден», но, тем не менее, это может сработать в некоторых случаях.
РЕДАКТИРОВАТЬ: Для ясности: uninsэто произвольный файл, в который записаны данные при выполнении этой команды:pip freeze > unins
Этот файл, который он написал поочередно, затем используется для удаления вышеупомянутых пакетов с подразумеваемым согласием / предварительным одобрением посредством pip uninstall -y -r unins
(добавив это как ответ, потому что у меня недостаточно репутации, чтобы комментировать ответ @blueberryfields)
Ответ @blueberryfields работает хорошо, но терпит неудачу, если нет пакета для удаления (что может быть проблемой, если это «удалить все» является частью сценария или make-файла). Это может быть решено xargs -rпри использовании версии GNU xargs:
Если стандартный ввод не содержит небланков, не запускайте команду. Обычно команда запускается один раз, даже если нет ввода. Эта опция является расширением GNU.
Для меня это был самый простой способ удалить все пакеты 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))
Кроссплатформенная поддержка с использованием только pip:
#!/usr/bin/env pythonfrom sys import stderr
from pip.commands.uninstall importUninstallCommandfrom pip import get_installed_distributions
pip_uninstall =UninstallCommand()
options, args = pip_uninstall.parse_args([
package.project_name
for package in
get_installed_distributions()ifnot package.location.endswith('dist-packages')])
options.yes =True# Don't confirm before uninstall# set `options.require_venv` to True for virtualenv restrictiontry:print pip_uninstall.run(options, args)exceptOSErroras 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.
В моем случае я случайно установил несколько пакетов по всему миру, используя Homebrew-установленный pipна macOS. Самый простой способ вернуться к пакетам по умолчанию был простой:
Этот ответ предполагает слишком много об окружающей среде и не решает проблему напрямую, например, если вы используете pyenv.
Марк
@ Марк Хорошо, если вы используете pyenv, то вам нужно сделать что-то другое. В общем случае, если это не так, я считаю, что это самое простое и наименее хакерское решение. Обратите внимание, что это условие явно указано в начале ответа.
Радон Росборо
ОП спросил о virtualenvs. Он не упомянул об использовании Mac или brew для установки Python. Поэтому вы не можете предполагать, что использовалась ОС или brew - и этот ответ не решит ВСЕ условия. Если вы сосредоточены на решении для окружающей среды с помощью такого инструмента, как pip - вы будете обращаться к контексту среды, в которой находитесь. Надеюсь, что это имеет смысл.
Марк
1
@ Марк, я понимаю твою позицию. Мы можем не соглашаться. Я просто хочу помочь людям из Google, которые нажимают на ссылку с надписью «Какой самый простой способ удалить все пакеты, установленные с помощью pip?» когда они действительно хотят удалить все пакеты, установленные глобально, с помощью pip.
Радон Росборо
Согласившись с @RadonRosborough, заголовок ссылки показывает, почему я попал сюда, даже если ОП на самом деле не задает тот же вопрос.
Кенн Себеста
1
В командной оболочке Windows команда pip freeze | xargs pip uninstall -yне будет работать. Поэтому для тех, кто использует Windows, я нашел альтернативный способ сделать это.
Скопируйте все имена установленных пакетов pip из pip freezeкоманды в текстовый файл.
Затем перейдите в местоположение вашего файла .txt и выполните командуpip uninstall -r *textfile.txt*
Я полагаю, что этот ответ не добавляет много новой информации, я бы предпочел усовершенствование другого уже существующего аналогичного ответа, такого как этот: stackoverflow.com/a/45475070/11138259
sinoroc
-1
Pip не может узнать, какие пакеты были установлены им и какие пакеты были установлены менеджером пакетов вашей системы. Для этого вам нужно сделать что-то вроде этого
для дистрибутивов на основе rpm (замените python2.7 на версию Python, с которой вы установили pip):
find /usr/lib/python2.7/|while read f;doif! rpm -qf "$f"&>/dev/null; then
echo "$f"
fi
done |xargs rm -fr
для основанного на deb распространения:
find /usr/lib/python2.7/|while read f;doif! 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 из вашего дистрибутива и, вероятно, оставит вас с испорченной системой.
При всем уважении это кажется сопоставимым. Почему бы не dpkg-query -S '/usr/lib/python2.7/*'извлечь имена и dpkg-query -Lкаждое имя для сброса связанных файлов? Уже подготовлены манифесты. Мое основное возражение заключается в том, что вместо того, чтобы ориентироваться на пакеты, установленные где-либо, кроме pip, вы нацеливаетесь на пакеты, установленные любым, кроме ожидаемого вами менеджера, и в месте, которое обычно не должно касаться pip. pip list -lперечисляет пакеты, которые он установил локально, а некоторые даже pip install --target=.... Удаление всех в настоящее время пустых папок тоже укусит вас!
Ответы:
Я нашел этот фрагмент в качестве альтернативного решения. Это более изящное удаление библиотек, чем переделка virtualenv:
Если у вас есть пакеты, установленные через VCS, вам нужно исключить эти строки и удалить пакеты вручную (повышено из комментариев ниже):
источник
postactivate
которые останутся.setuptools
пакет. Я решил эту проблему, выполнив следующие инструкции: stackoverflow.com/questions/7446187/…pip freeze --exclude-editable | xargs pip uninstall -y
чтобы игнорировать пакеты VCS без использования шаблона grepЭто будет работать для всех систем Mac, Windows и Linux. Чтобы получить список всех пакетов pip в файле needs.txt (Примечание: это перезапишет файл require.txt, если существует, иначе создаст новый, также, если вы не хотите заменять старый файл require.txt, укажите другое имя файла). во всех следующих командах вместо place.txt).
Теперь, чтобы удалить один за другим
Если мы хотим удалить все сразу, то
Если вы работаете над существующим проектом, в котором есть
requirements.txt
файл, а ваша среда отличается, просто заменитеrequirements.txt
приведенные выше примеры наtoberemoved.txt
. Затем, выполнив описанные выше шаги, вы можете использоватьrequirements.txt
для обновления вашей теперь чистой среды.И для одной команды без создания какого-либо файла (как предложено @joeb).
источник
pip uninstall -r requirements.txt -y
pip uninstall -y -r <(pip freeze)
чтобы сделать все за один раз.Это работает с последними. Я думаю, что это самый короткий и самый декларативный способ сделать это.
Но обычно я просто удаляю и воссоздаю virtualenv, поскольку правила неизменяемости!
источник
wipeenv
? virtualenvwrapper.readthedocs.org/en/latest/…wipeenv
как в то время как внутри среды выдает ошибку и ничего не удаляет, если она используется в контекстеpip install -e
сборки разработки, попытка использованияvirtualenv --clear MYENV
не выдает ошибку и не удаляет ничего из пакеты, которые вы, возможно, установили ранее в среде. По крайней мере, это относится к OSX. См. Bitbucket.org/dhellmann/virtualenvwrapper/issues/211/… для получения дополнительной информации.wipeenv
это псевдоним, предоставляемый virtualenvwrapper, так что не у всех есть.Я хотел поднять этот ответ в разделе комментариев, потому что это одно из самых элегантных решений в этой ветке. Полная оценка этого ответа идет на @joeb .
Это прекрасно сработало для случая использования очистки папки пользовательских пакетов вне контекста virtualenv, который не обрабатываются многими из приведенных выше ответов.
Редактировать: Кто-нибудь знает, как заставить эту команду работать в Makefile?
Бонус: псевдоним Bash
Я добавляю это в свой профиль bash для удобства:
Затем запустите:
Альтернатива для пипенв
Если вы используете pipenv, вы можете просто запустить:
источник
pip freeze
ничего не выводится, если не установлено ни одного пакета, а затемpip uninstall
, к сожалению, выдает жалобы).<(...)
- это bashism. Таким образом, вы можете либо использовать bash -c "...", либо обойти, выполнивpip freeze | pip uninstall -r /dev/stdin
ERROR: Cannot uninstall 'bitarray'. 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.
Другие ответы, которые используют
pip list
илиpip freeze
должны включать,--local
иначе будут также удалять пакеты, которые находятся в общих пространствах имен.Так вот фрагмент, который я регулярно использую
Ref:
pip freeze --help
источник
ERROR: Cannot uninstall 'bitarray'. 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.
. Тогда я не мог удалить больше модулей.Способ 1 (с
pip freeze
)Способ 2 (с
pip list
)Способ 3 (с
virtualenv
)источник
pip list
) прекрасно работает, пока вы случайно не удалите pip -_-Мне удалось это сделать следующим образом:
Создайте файл требований с именем reqs.txt со списком установленных пакетов
затем удалите все пакеты из reqs.txt
Мне нравится этот метод, так как у вас всегда есть файл требований к пунктам, к которому можно обратиться в случае ошибки. Это также повторяется.
источник
Самый быстрый способ - полностью переделать virtualenv. Я предполагаю, что у вас есть файл require.txt, который соответствует производству, если нет:
источник
В Windows, если ваш
path
настроен правильно, вы можете использовать:Это должно быть похоже на Unix-подобные системы:
Просто предупреждение, что это не совсем верно, так как вы можете столкнуться с такими проблемами, как «Файл не найден», но, тем не менее, это может сработать в некоторых случаях.
РЕДАКТИРОВАТЬ: Для ясности:
unins
это произвольный файл, в который записаны данные при выполнении этой команды:pip freeze > unins
Этот файл, который он написал поочередно, затем используется для удаления вышеупомянутых пакетов с подразумеваемым согласием / предварительным одобрением посредством
pip uninstall -y -r unins
Файл окончательно удаляется после завершения.
источник
Использование функции virtualenvwrapper :
Смотрите документацию wipeenv
источник
wipeenv
Сначала добавьте весь пакет в
requirements.txt
Затем удалите все
источник
Это старый вопрос, который я знаю, но я наткнулся на него, поэтому для дальнейшего использования вы можете сделать это:
из документации пипа версия 8.1
источник
Для пользователей Windows это то, что я использую в Windows PowerShell
источник
(добавив это как ответ, потому что у меня недостаточно репутации, чтобы комментировать ответ @blueberryfields)
Ответ @blueberryfields работает хорошо, но терпит неудачу, если нет пакета для удаления (что может быть проблемой, если это «удалить все» является частью сценария или make-файла). Это может быть решено
xargs -r
при использовании версии GNUxargs
:от
man xargs
:источник
Возможно, вам придется несколько раз запустить эту команду, чтобы получить пустое значение
pip3 freeze --local
.источник
Для меня это был самый простой способ удалить все пакеты Python.
источник
Кроссплатформенная поддержка с использованием только
pip
:источник
Это команда, которая работает для меня:
источник
простой и надежный кроссплатформенный способ работы в pipenv:
по pipenv:
но не будет обновлять piplock или pipfile, так что имейте в виду
источник
Если вы работаете
virtualenv
:например, если ваш virtualenv
/Users/you/.virtualenvs/projectx
, то вы запустите:если вы не знаете, где находится ваш виртуальный env, вы можете запустить его
which python
из активированного виртуального env, чтобы получить путьисточник
В моем случае я случайно установил несколько пакетов по всему миру, используя Homebrew-установленный
pip
на macOS. Самый простой способ вернуться к пакетам по умолчанию был простой:Или, если вы использовали
pip3
:источник
pip freeze
команды в текстовый файл.pip uninstall -r *textfile.txt*
источник
Если вы используете
pew
, вы можете использовать команду wipeenv :pew wipeenv [env]
источник
Я использую опцию --user для удаления всех пакетов, установленных на сайте пользователя.
источник
Pip не может узнать, какие пакеты были установлены им и какие пакеты были установлены менеджером пакетов вашей системы. Для этого вам нужно сделать что-то вроде этого
для дистрибутивов на основе rpm (замените python2.7 на версию Python, с которой вы установили pip):
для основанного на deb распространения:
затем очистить оставшиеся пустые каталоги:
Я нашел верный ответ очень вводящим в заблуждение, поскольку он удалит все (большинство?) Пакеты Python из вашего дистрибутива и, вероятно, оставит вас с испорченной системой.
источник
dpkg-query -S '/usr/lib/python2.7/*'
извлечь имена иdpkg-query -L
каждое имя для сброса связанных файлов? Уже подготовлены манифесты. Мое основное возражение заключается в том, что вместо того, чтобы ориентироваться на пакеты, установленные где-либо, кроме pip, вы нацеливаетесь на пакеты, установленные любым, кроме ожидаемого вами менеджера, и в месте, которое обычно не должно касаться pip.pip list -l
перечисляет пакеты, которые он установил локально, а некоторые дажеpip install --target=...
. Удаление всех в настоящее время пустых папок тоже укусит вас!