Вопрос или проблема
Я пытаюсь очистить различные установки Python на моем MacBook Pro (macOS 10.13.4), удалив все, кроме оригинального системного Python (2.7.2 для текущей версии macOS). У меня были установки из python.org, macports и homebrew в разное время, и, кажется, я смог удалить все, к чему эти установки прикасались, но мой системный Python все еще ругается, когда я пытаюсь установить модуль.
После удаления установок homebrew python и pip, а также удаления старых папок из установки macports, я обновил мой ~/.bash_profile, чтобы он содержал только мою конфигурацию .bashrc и утилиты iTerm2. Затем я установил PIP для системного Python, используя easy_install. Однако, когда я пытаюсь установить пакет, например voltron, я получаю следующие ошибки, и установка не завершается.
matplotlib 1.3.1 требует nose, который не установлен.
python-dateutil 2.6.1 имеет требование six>=1.5, но у вас установлен six 1.4.1, который несовместим.
prompt-toolkit 1.0.15 имеет требование six>=1.9.0, но у вас установлен six 1.4.1, который несовместим.
blessed 1.14.2 имеет требование six>=1.9.0, но у вас установлен six 1.4.1, который несовместим.
matplotlib 1.3.1 имеет требование numpy>=1.5, но у вас установлен numpy 1.8.0rc1, который несовместим.
which python
возвращает /usr/bin/python
и which pip
возвращает /usr/local/bin/pip
Я хотел бы вернуть мой компьютер в состояние, в котором он был, когда я его купил, но я не хочу делать полную перезагрузку и переустановку. Я пытался использовать режим восстановления macOS для переустановки macOS, но это не изменило ошибку, и кажется, что где-то есть некоторые оставшиеся упоминания об этих пакетах. Как я могу восстановить исходное состояние Python?
$> pip -V
pip 10.0.0b2 из /Library/Python/2.7/site-packages/pip-10.0.0b2-py2.7.egg/pip (python 2.7)
Похоже, что Voltron в итоге установился, но все еще показывает ошибку из-за отсутствия зависимостей. Вот что происходит, когда я пытаюсь установить одну из них (six, в данном случае)
$> pip install --user six
Requirement already satisfied: six in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (1.4.1)
python-dateutil 2.6.1 имеет требование six>=1.5, но у вас установлен six 1.4.1, который несовместим.
prompt-toolkit 1.0.15 имеет требование six>=1.9.0, но у вас установлен six 1.4.1, который несовместим.
blessed 1.14.2 имеет требование six>=1.9.0, но у вас установлен six 1.4.1, который несовместим.
matplotlib 1.3.1 имеет требование numpy>=1.5, но у вас установлен numpy 1.8.0rc1, который несовместим.
Обновление – значение sys.path
$> python -c "import os, sys; print(os.linesep.join(sys.path))"
/Library/Python/2.7/site-packages/pip-10.0.0b2-py2.7.egg
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
/Users/emroch/Library/Python/2.7/lib/python/site-packages
/Library/Python/2.7/site-packages
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC
У меня была похожая проблема при установке пакетов с помощью PIP, и кажется, что причиной проблемы является это
https://github.com/pypa/pip/issues/5196
Мне удалось решить эту проблему, следуя предложенному здесь
https://stackoverflow.com/questions/27630114/matplotlib-issue-on-os-x-importerror-cannot-import-name-thread
sudo pip uninstall python-dateutil
sudo pip install python-dateutil==2.2
из ответа @oriol-nieto
python использовал старую версию six, которую я удалил, набрав:
rm -rf /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six.*
Ответ или решение
Удаление всех версий Python, кроме системной, на macOS может быть не таким простым, как кажется на первый взгляд. macOS по умолчанию поставляется с предустановленной версией Python 2.7, и вмешательство в неё может привести к проблемам с операционной системой. Однако, если вы стремитесь отчистить систему от других установок Python, ваша цель может быть достигнута, следуя советам и методам оптимизации.
Теория
macOS исторически поставляется с предустановленным Python 2.x для поддержки различных утилит и системных скриптов. Выполняя работу по очистке системы, важно учитывать, что вмешательство в файловую структуру, на которой базируется системный Python, может оказать некорректное влияние на работоспособность системы в целом. Следовательно, основной задачей является обеспечение совместимости и функционирования зависимости, работая с системой невероятно осторожно.
Пример
Вы упомянули несколько других версий Python, которые были установлены в системе при помощи различных средство, таких как macports и homebrew. Эти приложения могут вмешаться в системные переменные окружения, добавив другие версии Python на ваш компьютер. Именно они могут стоять за конфликтами и несовпадениями, которые вы наблюдаете при установке пакетов.
Также проблема может заключаться в версии pip, которая конфликтует с системным Python. Как показала проверка (команда which pip
показывает /usr/local/bin/pip
), текущая версия pip не принадлежит системному Python, который находится в /usr/bin/python
.
Применение
-
Очистка старых путей и ссылок:
Начните с аудита вашего.bash_profile
или.zshrc
(в зависимости от используемой оболочки), чтобы убедиться, что системные версии Python и pip установлены и правильно отображены. Удалите из этих файлов ссылки на другие версии Python, такие как те, которые могут быть добавлены homebrew или macports. -
Проверка и удаление конфликтующих версий:
Чтобы выявить и удалить установки Python, прежде всего удостоверьтесь в наличии инструментов, связанных с macports или homebrew и удалите через их спецификационные команды. Для homebrew, например, вы можете использоватьbrew list
иbrew uninstall
. Также проверьте ваше системное дерево/usr/local/
на наличие других инсталляций Python и pip и удалите их при необходимости. -
Очистка зависимостей:
Учитывая вашу проблему, стоит также внимательно пройтись по каталогам, связанным с зависимости. Убедитесь, что пути такие как/Library/Python/2.7/site-packages
не содержат конфликтующих версий пакетов или устаревших зависимостей, таких как "six".Пример кода для удаления устаревших версий:
sudo rm -rf /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six.*
Эта команда удалит устаревшую версию "six", которая может быть причиной конфликта.
-
Переустановка зависимостей:
Рассмотрите возможность установки базовых версий некоторых пакетов вручную, чтобы согласовать их версии. Например, если "python-dateutil" вызывает проблемы, как упоминалось, можно сначала полностью удалить его, а затем эффективно установить нужную версию:sudo pip uninstall python-dateutil sudo pip install python-dateutil==2.2
-
Проверьте путь в системных переменных:
Командаsys.path
из вашего вывода дает информацию о том, какие каталоги используются системой для поиска модулей Python. Убедитесь, что данные пути актуальны и нужны вашему системному Python. Устранение ненужной информации из этих путей может также помочь в очистке системы. -
Системное восстановление:
Если после всех этих действий ваша проблема не решается, один из возможных выходов — это использование инструментов восстановления системы, как macOS Recovery, хотя это может быть и не всегда успешным решением в плане удаления только Python.
Соблюдение вышеперечисленных шагов удостоверьт вашу систему в порядке и позволит исправить конфликтующие версии и зависимости. Всегда помните, что работа с системными элементами требует осторожности, и делайте резервные копии во избежание потенциального ущерба для рабочей системы.