Я пытаюсь исправить один из моих виртуальных пользователей - я хотел бы, чтобы reset все установленные библиотеки возвращались к тем, которые соответствуют производству.
Есть ли быстрый и простой способ сделать это с помощью pip?
Я пытаюсь исправить один из моих виртуальных пользователей - я хотел бы, чтобы reset все установленные библиотеки возвращались к тем, которые соответствуют производству.
Есть ли быстрый и простой способ сделать это с помощью pip?
Я нашел этот фрагмент в качестве альтернативного решения. Это более грациозное удаление библиотек, чем обновление виртуального файла:
pip freeze | xargs pip uninstall -y
Если у вас есть пакеты, установленные через VCS, вам нужно исключить эти строки и удалить пакеты вручную (повышенные из комментариев ниже):
pip freeze | grep -v "^-e" | xargs pip uninstall -y
Это будет работать для всех систем 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)
Я думаю, что это работает с последними
virtualenv --clear MYENV
Но обычно я просто удаляю и воссоздаю virtualenv.
Я хотел поднять этот ответ из секции комментариев, потому что это одно из самых элегантных решений в этой ветке. Полная оценка этого ответа идет на @joeb.
pip uninstall -y -r <(pip freeze)
Это прекрасно сработало для случая использования очистки папки пользовательских пакетов вне контекста virtualenv, который многие из приведенных выше ответов не обрабатывают.
Изменение: Кто-нибудь знает, как заставить эту команду работать в Makefile?
Я добавляю это в свой профиль bash для удобства:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
Затем запустите:
pipuninstallall
Если вы используете pipenv, вы можете просто запустить:
pipenv uninstall --all
Другие ответы, которые используют pip list
или pip freeze
должны включать --local
иначе он также удалит пакеты, найденные в общих пространствах имен.
Так вот фрагмент, который я регулярно использую
pip freeze --local | xargs pip uninstall -y
Ссылка: pip freeze --help
pip freeze
)pip freeze | xargs pip uninstall -y
pip list
)pip list | awk '{print $1}' | xargs pip uninstall -y
virtualenv
)virtualenv --clear MYENV
Самый быстрый способ - полностью переделать virtualenv. Я предполагаю, что у вас есть файл require.txt, который соответствует производству, если нет:
# On production:
pip freeze > reqs.txt
# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt
В 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
Файл окончательно удаляется после завершения.
Использование virtualenvwrapper:
wipeenv
Во-первых, добавьте весь пакет в requirements.txt
pip freeze > requirements.txt
Затем удалите все
pip uninstall -y -r requirements.txt
Это старый вопрос, который я знаю, но я наткнулся на него, поэтому для дальнейшего использования вы можете сделать это:
pip uninstall [options] <package> ...
pip uninstall [options] -r <requirements file> ...
-r, - -r файл эквайринга
Удалите все пакеты, указанные в данном файле требований. Эта опция может быть использована несколько раз.
из документации пипа версия 8.1
Для пользователей Windows это то, что я использую в Windows PowerShell
pip uninstall -y (pip freeze)
(добавив это как ответ, потому что у меня недостаточно репутации, чтобы комментировать ответ @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.
Это был самый простой способ удалить все пакеты 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 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.
Это команда, которая работает для меня:
pip list | awk '{print $1}' | xargs pip uninstall -y
Если вы используете virtualenv
:
virtualenv --clear </path/to/your/virtualenv>
например, если ваш virtualenv равен /Users/you/.virtualenvs/projectx
, тогда вы запустите:
virtualenv --clear /Users/you/.virtualenvs/projectx
если вы не знаете, где находится ваше виртуальное env, вы можете запустить which python
из активированного виртуального env, чтобы получить путь
В моем случае я случайно установил несколько пакетов по всему миру с помощью установленного Homebrew pip
на macOS. Самый простой способ вернуться к пакетам по умолчанию был простым:
$ brew reinstall python
Или, если вы использовали pip3
:
$ brew reinstall python3
В командной оболочке Windows команда
pip freeze | xargs pip uninstall -y
pip freeze | xargs pip uninstall -y
не будет работать. Так что для тех из вас, кто использует Windows, я нашел альтернативный способ сделать это.
pip freeze
в файл .txt.pip uninstall -r *textfile.txt*
Если вы используете pew
, вы можете использовать команду wipeenv:
pew wipeenv [env]
легкий надежный способ кросс-платформенный и работа в pipenv, а также:
pip freeze
pip uninstall -r requirement
от pipenv:
pipenv run pip freeze
pipenv run pip uninstall -r requirement
но не будет обновлять piplock или pipfile, так что имейте в виду
pip3 freeze --local | xargs pip3 uninstall -y
Возможно, вам придется несколько раз запустить эту команду, чтобы получить пустое значение pip3 freeze --local
.
Пип не знает, какие пакеты были установлены им и какие пакеты были установлены вашим диспетчером системных пакетов. Для этого вам нужно будет сделать что-то вроде этого
для 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 из вашего дистрибутива и, вероятно, оставит вас с разбитой системой.