Удалите все пакеты, установленные с помощью pip пользователем в macOS High Sierra - PullRequest
0 голосов
/ 19 сентября 2018

По ошибке я установил пакеты в глобальной среде, используя pip.Мне было интересно, если это хорошая идея, чтобы удалить уже существующий Python в ОС, используя инструкции здесь , и переустановить его с помощью homebrew, используя инструкции здесь ?Или есть ли способ избавиться от всех пакетов и их зависимостей, которые я установил с помощью pip.

Я использую Python 2.7.10 на MacOS High Sierra.РЕДАКТИРОВАТЬ: Проблема с предлагаемым подходом:

Как предложено CloC в разделе комментариев, я попытался удалить все пакеты из глобальной среды, набрав

pip freeze > to_delete.txt

, а затем

sudo -H pip uninstall -y -r to_delete.txt

Однако в терминале я получил следующую ошибку:

Exception: Traceback (most recent call last): File "/Library/Python/2.7/site-packages/pip-18.0-py2.7.egg/pip/_internal/basecommand.py", line 141, in main status = self.run(options, args) File "/Library/Python/2.7/site-packages/pip-18.0-py2.7.egg/pip/_internal/commands/uninstall.py", line 74, in run auto_confirm=options.yes, verbose=self.verbosity > 0, File "/Library/Python/2.7/site-packages/pip-18.0-py2.7.egg/pip/_internal/req/req_install.py", line 864, in uninstall uninstalled_pathset.remove(auto_confirm, verbose) File "/Library/Python/2.7/site-packages/pip-18.0-py2.7.egg/pip/_internal/req/req_uninstall.py", line 221, in remove renames(path, new_path) File "/Library/Python/2.7/site-packages/pip-18.0-py2.7.egg/pip/_internal/utils/misc.py", line 276, in renames shutil.move(old, new) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move copytree(src, real_dst, symlinks=True) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree raise Error, errors Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/macholib/dyld.py', '/private/tmp/pip-uninstall-3QWFII/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/macholib/dyld.py', "[Errno 1] Operation not permitted: '/private/tmp/pip-uninstall-3QWFII/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/macholib/dyld.py'"), [...], "[Errno 1] Operation not permitted: '/private/tmp/pip-uninstall-3QWFII/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/macholib'")]

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

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

Если вы установите пакеты с опцией --user, решение будет простым: вывести список всех установленных пользователем пакетов и удалить их в пакетном режиме:

$ pip list --format=freeze | xargs pip uninstall -y

Однако, поскольку вы установили пакеты в масштабе всей системы (используя sudo), команда получит некоторую ошибку.MacOS поставляет некоторые пакеты как часть системы;они расположены под /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python.Вы не можете ни удалить эти, ни установить дополнительные пакеты в системном каталоге.Каждый пакет, который вы устанавливаете через sudo pip install, попадает в /Library/Python/2.7/site-packages, чтобы гарантировать, что файлы ОС не будут изменены или удалены.Таким образом, решение будет таким:

  1. Список всех пакетов, доступных для pip
  2. Отфильтровать те, которые установлены в /Library/Python/2.7/site-packages
  3. Удалить их по имени

Пример в bash:

$ pip list --format=freeze | cut -d= -f1 | \
  xargs -I {} bash -c 'pip show {} | ( grep -q "Location: /Library/Python/2.7/site-packages" && echo {} )' | \
  xargs pip uninstall -y

Внимание

Это приведет к удалению ВСЕХ системных пакетов, которые не были предустановлены в MacOS!Это включает сам pip, если вы установили его в масштабе всей системы, например, через sudo easy_install pip.Также могут существовать пакеты, которые были установлены другими инструментами, например Virtualbox устанавливает привязки python в пакет с именем vboxapi - он также будет удален.Может быть, лучше просто перечислить имена пакетов:

$ pip list --format=freeze | cut -d= -f1 | \
  xargs -I {} bash -c 'pip show {} | ( grep -q "Location: /Library/Python/2.7/site-packages" && echo {} )'

проанализировать результаты и удалить выбранные пакеты в отдельной команде.

0 голосов
/ 19 сентября 2018

Вы, конечно, не должны смонтировать python для установки нового пакета.

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

pip freeze > to_delete.txt

Изатем:

pip uninstall -y -r to_delete.txt

Если вы не хотите удалять все из них, вы можете удалить строки, которые хотите сохранить, в файле to_delete.txt, созданном на первом шаге.

...