Я пытаюсь исправить один из моих виртуальных пользователей - я хотел бы, чтобы reset все установленные библиотеки возвращались к тем, которые соответствуют производству.
Есть ли быстрый и простой способ сделать это с помощью pip?
Я нашел этот фрагмент в качестве альтернативного решения. Это более грациозное удаление библиотек, чем обновление виртуального файла:
pip freeze | xargs pip uninstall -y
Если у вас есть пакеты, установленные через VCS, вам нужно исключить эти строки и удалить пакеты вручную (повышенные из комментариев ниже):
pip freeze | grep -v "^-e" | xargs pip uninstall -y
postactivate
которая останется.
setuptools
. Я решил проблему, следуя инструкциям здесь: stackoverflow.com/questions/7446187/…
Это будет работать для всех систем 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)
pip uninstall -r requirements.txt -y
Я думаю, что это работает с последними
virtualenv --clear MYENV
wipeenv
? virtualenvwrapper.readthedocs.org/en/latest/...
Я хотел поднять этот ответ из секции комментариев, потому что это одно из самых элегантных решений в этой ветке. Полная оценка этого ответа идет на @joeb.
pip uninstall -y -r <(pip freeze)
Это прекрасно сработало для случая использования очистки папки пользовательских пакетов вне контекста virtualenv, который многие из приведенных выше ответов не обрабатывают.
Изменение: Кто-нибудь знает, как заставить эту команду работать в Makefile?
Я добавляю это в свой профиль bash для удобства:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
Затем запустите:
pipuninstallall
Если вы используете pipenv, вы можете просто запустить:
pipenv uninstall --all
pip freeze
ничего не дает, если пакеты не установлены, а затем, к сожалению, pip uninstall
жалуется).
pip freeze
)pip freeze | xargs pip uninstall -y
pip list
)pip list | awk '{print $1}' | xargs pip uninstall -y
virtualenv
)virtualenv --clear MYENV
pip list
) прекрасно работает, пока у вас нет случайного удаления пипа -_-
Другие ответы, которые используют 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
Самый быстрый способ - полностью переделать virtualenv. Я предполагаю, что у вас есть файл требований .txt, который соответствует производству, если нет:
# On production:
pip freeze > reqs.txt
# On your machine:
rmvirtualenv MYENV
mkvirtualenv MYENV
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
Файл окончательно удаляется после завершения.
wipeenv
Для пользователей Windows это то, что я использую в Windows PowerShell
pip uninstall -y (pip freeze)
Его старый вопрос, который я знаю, но я наткнулся на него, поэтому для дальнейшего использования теперь вы можете сделать это:
pip uninstall [options] <package> ...
pip uninstall [options] -r <requirements file> ...
-r, --requirement file
Удалите все пакеты, перечисленные в данном файле требований. Эта опция может использоваться несколько раз.
из документации по протоколу версии 8.1
Это был самый простой способ удалить все пакеты 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 list | awk '{print $1}' | xargs pip uninstall -y
Поддержка кросс-платформы с помощью только 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.
В командной оболочке Windows команда
pip freeze | xargs pip uninstall -y
pip freeze | xargs pip uninstall -y
не будет работать. Так что для тех из вас, кто использует Windows, я нашел альтернативный способ сделать это.
pip freeze
в файл .txt.pip uninstall -r *textfile.txt*
В моем случае я случайно установил несколько пакетов по всему миру с помощью установленного Homebrew pip
на macOS. Самый простой способ вернуться к пакетам по умолчанию был простым:
$ brew reinstall python
Или, если вы использовали pip3
:
$ brew reinstall python3
Если вы используете virtualenv
:
virtualenv --clear </path/to/your/virtualenv>
например, если ваш virtualenv равен /Users/you/.virtualenvs/projectx
, тогда вы запустите:
virtualenv --clear /Users/you/.virtualenvs/projectx
если вы не знаете, где находится ваше виртуальное env, вы можете запустить which python
из активированного виртуального env, чтобы получить путь
Если вы используете pew
, вы можете использовать команду wipeenv:
pew wipeenv [env]
Во-первых, добавьте весь пакет в requirements.txt
pip freeze > requirements.txt
Затем удалите все
pip uninstall -y -r requirements.txt
Пип не знает, какие пакеты были установлены им и какие пакеты были установлены вашим диспетчером системных пакетов. Для этого вам нужно будет сделать что-то вроде этого
для 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 из вашего дистрибутива и, вероятно, оставит вас с разбитой системой.
dpkg-query -S '/usr/lib/python2.7/*'
, извлечь имена и dpkg-query -L
каждое имя, чтобы выгрузить связанные файлы? Уже подготовлены манифесты. Мое основное возражение заключается в том, что вместо того, чтобы ориентироваться на пакеты, установленные где-либо, кроме pip, вы нацеливаетесь на пакеты, установленные любым, кроме ожидаемого вами менеджера, и в месте, которое обычно не должно касаться pip. pip list -l
перечисляет пакеты, которые он установил локально, а некоторые даже pip install --target=...
Удаление всех в настоящее время пустых папок будет вас кусать!