Как использовать pip после обновления OS X El Capitan?


116

После обновления El Capitan я не могу запустить установку pip. Ошибка, которую я получаю, заключается в том, что «операция не разрешена», когда pip пытается создать новые папки во время установки.

creating /System/Library/Frameworks/Python.framework/Versions/2.7/share
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted

На самом деле, я не могу создавать папки и т.д. в этих папках. Попробовал использовать sudo, который не помогает. Также я сделал

sudo chflags nouchg /System/Library/Frameworks/Python.framework/Versions/2.7/

Вышесказанное тоже не помогло. Что я могу сделать, чтобы снова установить библиотеки Python?


1
Где в вашей системе pip?
user151019

$ where pip / usr / local / bin / pip
web_ninja


Как вы установили pip - он должен писать в /Library/Python/2.7/site-packages not / System
user151019

Я не помню сейчас. После публикации комментария я решил, что это проблема, и использовал brew для установки python, который исправил расположение pip.
web_ninja

Ответы:


84

Быстрое решение - использовать homebrew для установки pythonв систему, /usr/local/binчтобы вы pipмогли работать с изменяемой пользователем структурой python.

brew install python
pip --version

Отключение защиты целостности системы также является вариантом, но я не рекомендую использовать его для каких-либо целей, кроме серверов с профессиональным управлением и защищенными стенами, где у вас есть рабочая сила для управления обнаружением вторжений, или если вы являетесь разработчиком / системным администратором и вам нужно что-то тестировать с и без ГЛОТОК.

ls -lO /System/Library/Frameworks/Python.framework/Versions/2.7/
csrutil status

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

Использование homebrew позволяет управлять pip и python отдельно от версии, предоставленной системой. В качестве бонуса, доморощенный фреймворк предназначен для упрощения обслуживания и исправления / рутинных операций посредством автоматизации.


1
Заваренный питон не стабилен и он зависает случайно
jayatubi

@jayatubi Какой пакет или скрипт нестабилен для вас? Вы устанавливаете python 2.7.10 от brew или python3, который только что получил серьезный удар и, как известно, не имеет такой обратной совместимости. Вы можете выбрать одну из десятков версий, если вы предпочитаете ту, которая более или менее стабильна для ваших нужд.
Bmike

1
Согласитесь, brew install pythonэто самый простой вариант, хотя очистка некоторых других настроек может потребоваться, если вы уже некоторое время используете системный Python (например, файлы Python, принадлежащие пользователю root /usr/local/binи ниже ~/Library/Caches/pip)
RichVel

Загрузка скомпилированного Python .pkg, например, из python.org/downloads/release/python-2712, отлично работает для меня, 10.8. Есть какие-нибудь комментарии по сравнению с домашним пивом? Спасибо
Денис

@denis мне нравится, brewтак как легко прикрепить понравившуюся версию - управлять несколькими различными версиями или регулярно обновлять информацию. Но если у вас есть что-то, что работает для вас - трудно утверждать, что вы должны что-то изменить.
Bmike

77

Другой жизнеспособный вариант без необходимости отключать SIP или устанавливать другие версии Python - это устанавливать модули только для текущего пользователя, используя

pip install --user <modulename>

Если это просто ваша личная машина, это будет самое простое и безопасное решение.


1
Может быть, El Capitan предоставил / usr / bin / pip, но macOS Sierra - нет.
sigjuice

1
Работает на sierra
harryparkdotio

57

Эта проблема часто возникает, когда pip пытается установить man-страницу для IPython на El Capitan. Быстрое решение состоит в том, чтобы использовать команду pip следующим образом:

sudo -H pip install --install-option '--install-data=/usr/local' <package>

Тем не менее, защита целостности системы (SIP) в El Capitan блокирует несколько недобросовестных действий с пипом, который использовался для перемещения, поэтому вам, вероятно, потребуется внести еще некоторые изменения, чтобы пип работал бесперебойно в El Capitan.

SIP на El Capitan раскрывает три проблемы с использованием pip с поставляемой Apple версией Python для OS X:

  1. distutils неправильно устанавливает две важные переменные на Mac, поэтому pip пытается записать заголовки и другие общие файлы (например, manpages) в /System/Library/Frameworks/Python.framework/Versions/2.7/. Это плохая идея, но в более ранних версиях OS X она была успешной, если pip запускался с помощью sudo. Однако это не удается на El Capitan из-за SIP. Это ошибка, с которой вы столкнулись. Это дает сообщения какOSError: [Errno: 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

  2. Apple устанавливает устаревшие версии некоторых пакетов /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/(например, шесть). В предыдущих версиях OS X, когда вы устанавливали пакет, которому требовалась более новая версия одного из них, sudo pipон автоматически удалял старую версию из /System/папки и устанавливал более новую версию в /Library/Python/2.7/site-packages. Это тоже была плохая идея, и с SIP это уже невозможно. Но теперь pip вылетит с сообщением об ошибке при попытке удалить старый пакет. Это сообщение также OSError: [Errno: 1], но оно приходит после сообщения, как Uninstalling six-1.4.1:. См., Например, https://github.com/pypa/pip/issues/3165 .

  3. Версия Python для Apple добавляет несколько каталогов /System/Library/Frameworks/Python.framework/Versions/2.7/в путь поиска python над стандартными доступными для пользователя местами установки пакетов. Поэтому, если вы устанавливаете более новую версию пакета в другом месте (например, sudo -H pip install --ignore-installed six), вы получите сообщение о том, что установка прошла успешно, но затем, когда вы запустите Python, вы получите более старую версию /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/. Это также делает невозможным использование новых пакетов с тем же именем, что и у модулей из стандартной библиотеки.

Вы можете обойти эти проблемы, но метод зависит от ваших ответов на три вопроса.

  1. Вы хотите продолжить использовать версию Python для Mac OS X или установить свою собственную? Самостоятельная установка - это самый безопасный вариант, который можно выполнить через официальный установщик Python, Homebrew или Anaconda. Это также то, что Apple рекомендует , как отмечает @Sacrilicious . Если вы устанавливаете свою собственную версию Python, вам, вероятно, следует удалить все, что в настоящее время установлено, /Library/Python/2.7/site-packagesи все сценарии, которые были установлены /usr/local/binдля этих пакетов (включая pip). В противном случае вы получите досадный опыт, когда некоторые скрипты обращаются к установленной системой версии Python, а некоторые - к вашей собственной установке.

Если вы хотите придерживаться установленного на Python, вам нужно принять еще два решения:

  1. Хотите установить пакеты для всех пользователей или только для себя? Установка для всех пользователей гарантирует, что каждая программа, которая использует Python (включая, возможно, административные сценарии), будет иметь доступ ко всем пакетам, которые вы устанавливаете. Тем не менее, существует небольшая вероятность того, что это повлияет на использование Python в El Capitan. (Я надеюсь, что Apple использует python -Sих, чтобы всегда получать ожидаемые пакеты, но у меня нет возможности проверить это.) Установка только для вашей собственной учетной записи пользователя исключает возможность вмешательства в установку Python системы. Примечание: если вы собираетесь перейти от общесистемной установки к только пользовательской, вам, вероятно, следует воспользоваться этой возможностью, чтобы удалить все, что в настоящее время установлено в /Library/Python/2.7/site-packagesи связанные сценарии в /usr/local/bin.

  2. Вы хотите скрыть дополнительные пакеты, которые установлены с версией Python для OS X (ниже /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/), или оставить их в пути поиска? Я рекомендую скрыть их, чтобы при необходимости новые версии этих пакетов автоматически устанавливались в доступных для пользователя местах. Если вы не скрываете этот каталог, вы иногда будете получать сообщения о том, что pip не смог удалить существующий пакет, чтобы обновить его до более поздней версии (необходимой для другого устанавливаемого вами пакета). В этом случае вам нужно будет запустить программу pip install --ignore-installed <package>, которая установит более новую версию и скроет версию, установленную системой. Однако, если вы прячете весь/System/.../Extras/...каталог, вы потеряете доступ к некоторым пакетам Apple, которые не доступны через pip, например CoreGraphics и Bonjour. (Если вам это нужно, вы можете получить доступ, вставив ссылки в каталог site-packages.)

Теперь вот обходные пути. Это было бы хорошей практикой во всех версиях OS X, чтобы избежать случайной замены или удаления пакетов Python, используемых операционной системой; однако они необходимы, если вы хотите использовать установленные пользователем пакеты с поставляемой Apple версией Python для OS X El Capitan (10.11).

Установить пункт

Возможно, вы уже сделали это, но если нет, вы можете использовать следующую команду для установки pip для всех пользователей :

sudo -H easy_install pip
# pip script will be installed in /usr/local/bin

Или используйте эту команду, чтобы установить pip только для своей учетной записи :

easy_install --user pip
# pip script will be installed in ~/Library/Python/2.7/bin

Управление расположениями общих файлов

Если вы устанавливаете пакеты для всех пользователей, создайте файл с именем .pydistutils.cfg с этими строками (из https://github.com/pypa/pip/issues/426 ):

[install]
install-data=/usr/local
install-headers=/usr/local

Если вы обычно используете sudo -H pip ..., то вы должны поместить этот файл в /var/root(домашний каталог для пользователя root). Если вы обычно используете sudo pip ..., то вы должны поместить этот файл в свой домашний каталог (~).

Эти настройки не позволят pip писать общие элементы, такие как заголовки и страницы руководства /Library/System. (Команда в верхней части этого ответа - более быстрая версия того же самого.) Эти настройки необходимы, потому что специфический для Дарвина код /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install.pyне может установить эти переменные в корневые записи (хотя он устанавливает другие переменные правильно). Более подробную информацию об этом можно найти по адресу https://github.com/pypa/pip/issues/3177 .

Если вы устанавливаете пакеты только для своей учетной записи, общие элементы будут автоматически установлены в ~/Library/Python/2.7/. Но вы должны добавить следующие строки в ваш ~ / .profile, чтобы общие элементы находились тогда, когда они вам нужны:

export PATH=~/Library/Python/2.7/bin:$PATH
export MANPATH=~/Library/Python/2.7/share/man:$MANPATH

Примечание: вам нужно будет запустить новую оболочку или запустить ее в командной строке, чтобы изменения вступили в силу. Вы также можете запустить, hash -rесли вы недавно удалили старые сценарии из пути.

Управление Python Path

Вам нужно будет убедиться, что устанавливаемые вами пакеты выше в порядке поиска Python, чем установленные системой пакеты. Самый простой способ сделать это с помощью .pthфайлов. Это следует предложению @ Sacrilicious в другом месте на этой странице , но гарантирует, что ваш каталог пользовательских пакетов сайта ищется перед вашим общесистемным каталогом пакетов сайта, и оба они ищутся перед стандартной библиотекой и каталогом Extras Apple (оба находятся в / System /. ..). При /System/.../Extrasжелании он также исключается из пути поиска.

Создайте файл с именем fix_mac_path.pth, с текстом ниже. Если вы устанавливаете пакеты для всех пользователей, fix_mac_path.pth их следует разместить в /Library/Python/2.7/site-packages. Если вы устанавливаете только для своего пользователя, это fix_mac_path.pth должно быть в ~ / Library / Python / 2.7 / lib / python / site-packages. (Этот файл может иметь любое имя, которое вы хотите, но он должен быть помещен в одно или оба из этих мест, и он должен заканчиваться .pth; также весь текст в этом файле должен быть в одной строке.)

Если вы хотите скрыть установленные Apple пакеты в /System/.../Extras:

Сначала выполните одну из следующих команд, чтобы получить рабочую копию pip / setuptools независимо от версии, поставляемой Apple:

pip install --ignore-installed --user setuptools   # your account only
# or
sudo -H pip install --ignore-installed setuptools  # all users

Затем поместите следующий код в fix_mac_path.pthуказанное выше место:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/') and not '/Extras/' in p]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

Если вы хотите продолжать использовать установленные Apple пакеты, вам не нужно устанавливать еще одну копию setuptools. Просто вставьте следующий код в fix_mac_path.pthуказанное выше место:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/')]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

После этого вы можете python -m siteубедиться, что порядок поиска путей имеет смысл.

Установить пакеты

После этого вы сможете установить новые пакеты с помощью одной из следующих команд.

Для всех пользователей:

sudo -H pip install <package>

Для вашего собственного пользователя:

pip install --user <package>

Очень четкие указания с изложенными альтернативами. Я следовал этому руководству и успешно смог решить проблему с «шестеркой» библиотеки, что позволило мне установить mitmproxy.
Павел Чернох

1
Это действительно один из самых информативных, полных и полезных ответов, которые я когда-либо встречал в stackoverflow. Молодцы, и спасибо.
cmsjr

@cmsjr, спасибо! Мне потребовалось некоторое время, чтобы понять, что происходит, и это дает мне хорошее место, чтобы вернуться к нему!
Матиас Фрипп

4
Безусловно самое ясное и полное объяснение, которое я видел в этой области, в частности, очистка существующего системного беспорядка Python - спасибо! Моим главным улучшением было бы более настойчиво рекомендовать использовать Python, установленный на brew, поскольку это очень просто и обеспечивает чистую настройку, не требующую sudo. Это в дополнение к virtualenvs для проектов развития.
RichVel

Какая катастрофа. Будьте здоровы.
Мэтт М.

31

Во-первых, вы не отключаете SIP как способ решения проблемы. Извините, что причина этого создания папки не удалась, но мы должны обойти это. Во-вторых, вы теряете все тонкости, которые, как думала Apple, они вам давали, как мост через pyObjC, когда вы устанавливаете свой собственный Python.
(Я признаю, они говорят, что /usr/localесли вы разработчик, вам нужно установить свой собственный , я просто возражаю против того, чтобы сделать это простым способом с brew.)

По логике вещей, вы могли бы подумать о том, чтобы установить его где-то, где SIP не блокирует вас, и это почти наверняка решает какой-то пип зависимостей. Указание pip, где вы хотите, чтобы он выполнял установку, - это не столько средство защиты, сколько игнорирование ранее существовавшего содержимого в / System, где он будет проверять зависимости для многих распространенных установок, которые необходимы, например six, и SIP вызывает pip сломаться, когда он попытается обновить его. Это фактически поведение pip по умолчанию для установки в /Library/Python/2.7/site-packages, вам просто нужно сказать, --ignore-installedчтобы заставить его устанавливать там любые обновленные версии зависимостей.
... К сожалению, вы можете перейти к импорту этого модуля в интерактивном сеансе или скрипте и получить хорошие жирные ошибки - он все еще смотрит на необновленный пакет / System!

С ранних дней setuptools у Python есть способ сделать этот поиск явным. Это немного странно выглядит (и должно вызывать паузу у тех из нас, кто заботится о безопасности и не в восторге от резкого переноса его в верхнюю часть списка без проверки, но) вы можете поместить файл, который заканчивается на .pth( например, 'elcap.pth'), /Library/Python/2.7/site-packagesчтобы переместить этот каталог в начало порядка поиска со следующим содержимым:
import sys; sys.path = ['/Library/Python/2.7/site-packages'] + sys.path

Начните новый сеанс, и быстрый переход к python -m siteподтверждению того, что вы вставили этот путь в первый слот, и импорт модулей должен работать.

Да, и после всего этого, попробуйте просто установить с --userопцией pip или использовать virtualenv - в любом случае, это лучший метод для большинства людей.


1
Теперь это элегантно и является хорошим контрапунктом для моего упрощенного решения «отказаться от системы Python и создать его». Если вам нужно быстро и грязно, это может не стоить затраченных усилий, но наличие pyObjC и одного питона имеет большие достоинства.
Bmike

2
Более разумным и разумным было бы установить --userили использовать virtualenv. Как системный администратор, я просто считаю, что вы устанавливаете один раз для системы и что пользователь должен иметь возможность переопределить систему. Возражения против этого решения могут заключаться в том, что система будет искать измененный путь, но есть прецедент, когда easy_install может также записать файл .pth.
Жертвоприношение

2
Я не знаю, является ли способ варки легким / неправильным - это вопрос решения проблем, а варка решает мои проблемы просто эффектно - думая в одиночку о том, сколько усилий потребуется, чтобы поиграть с новыми игрушками (ruby 2.2 .3, python3.5, MongoDB, Node4.2.1) удобным способом, например, вводом команды, и она перекомпилируется, обновляется и удаляет трэш - ну, тогда я выберу легкий путь :) Я не знаю, что поставляемая версия Python для OS X настолько отличается от поддержки Cocoa и Threads и большого количества пакетов, которые я никогда не использовал прежде, и я действительно скомпилировал свою кучу Xcode / Kernel
PJJ

Я добавил elcap.pth в /Library/Python/2.7/site-packages, теперь я вижу, что путь указан в индексах 0 и 2 sys.path. Затем я попытался, sudo pip install --ignore-installed ipythonи он работает до тех пор, пока не будет запущен файл «setup.py install for pexpect», после чего pip все еще пытается что-то обновить в /System/Library/Frameworks/Python.framework/Versions/2.7/share и не выдаст ошибки.
Кодзиро

Установка virtualenv требует использования pip, так что это не решает никаких проблем, связанных с использованием pip. Я установил его, pip --userи virtualenv все еще не работает.
user5359531

4

Я думаю, что это из-за SIP или System Integrity Protection , своего рода защиты файлов в режиме реального времени, которая ощущается как антивирус Windows :) и останавливает любые изменения, которые вы хотите внести в системные папки OS X. Apple просто решила отключить модификации системы - чтобы быть уверенным, что вы полностью защищены от зла ​​Интернета и других злых сил, связанных с компьютером, от которых нас защищает SIP .

Если вы хотите отключить SIP, вам нужно загрузиться в Recovery HD, одновременно удерживая клавиши Command + R при загрузке Mac.

Откройте терминал из меню «Утилиты» и введите csrutil disable, затем нажмите «Return». Зайдите в Apple Menu для перезагрузки.

SIP будет отключен с этого момента. Я отключил его давным-давно и не заметил ничего плохого, некоторые процессы, кажется, жалуются, но они всегда работают в OS X, поэтому я не уверен, вызвано ли это отсутствием «защиты» целостности системы

Мой совет - полностью избавиться от SIP и / или использовать homebrew для всего вашего программного обеспечения с открытым исходным кодом / разработки. Homebrew использует каталог / usr / local для своей установки и не сталкивается с другими компонентами системы, а сборки homebrew более современны, чем сборки os x apple.


1
Нет смысла голосовать против этого ответа. Но, может быть, кто-то просто капризный? +1 от меня ...
bmike

1
Спасибо друг! Пыталась поставить немного юмора, но не все должны быть выровнены с моим пониманием этого;)
PJJ

Хм - после прочтения жертвенного ответа я не уверен, что это SIP. Мысли?
Bmike

1
Это действительно SIP, предотвращающий создание папки (возможно, для чего-то вроде man-страницы) в качестве подкаталога /System; запрещено по состоянию на 10.11. Мы можем использовать csrutil, чтобы временно отключить его, если мы на пределе, хотя я знаю, что может показаться, что он может превратиться в махинацию, но это не является хорошей причиной для его использования. Оставить это - вот почему ... у нас не может быть хороших вещей.
Жертвоприношение

Я все время снимал его: statusSystem Integrity Protection status: enabled (Custom Configuration). Configuration: Apple Internal: disabled Kext Signing: disabled Filesystem Protections: disabled Debugging Restrictions: disabled DTrace Restrictions: disabled NVRAM Protections: disabled и у меня нет причины его включать, поскольку я довольно плотно закрыл и настроил свою систему
PJJ

4

Использовал pip3 install <package>вместо этого и решил проблему с разрешением в pip.


4

Поверьте, вы не хотите, чтобы библиотека писала что-то по этому пути.

Раньше это не рекомендовалось, но в него можно было писать /System/Library/Frameworks/Python.framework/Versions/2.7/, но теперь оно не поддерживается из-за Apple SIP, поэтому это проблема владельца библиотеки. Дистрибутив пакета должен быть обновлен для корректной работы с этим обновлением. Большинство пакетов были обновлены и их содержимое установлено /Library/Python/2.7/site-packages, но некоторые пакеты не были обновлены.

В моем случае это была библиотека greenlet, пытающаяся записать свой .hфайл в папку System Frameworks:

Как это исправить: sudo -H pip install greenlet --install-option "--install-headers=/Library/Python/2.7/lib/python/includes/" тогдаsudo -H pip install gevent

Для NumPy это исправление sudo -H pip install --ignore-installed -U numpy.

Для других библиотек исправления варьируются от https://github.com/pypa/pip/issues/3177 до pip install --ignore-installed sixи pip install --user(последняя устанавливает все в /User//Library/Python/2.7/ путь). Смотрите также текущий топ ответ на этот пост: https://apple.stackexchange.com/a/210021/169157

Если вы печатаете, python -m siteон должен включать sys.path = [ ... '/Library/Python/2.7/site-packages', ... ] системные пути - вот почему (и как) это работает.


3

Я сделал это следующим образом:

brew install python

затем после установки Python:

sudo easy_install pip

3
brew install pythonуже устанавливает pip вместе с ним. Если вы затем установите pip с помощью easy_install, вы, вероятно, получите две установки pip, которые могут привести к путанице.
NSSynapse

3

Очень классное решение этой проблемы - использование virtualenv (virtualenvwrapper), после создания новой среды для вашего проекта вы можете без проблем использовать pip, поэтому я использовал virtualenvwrapper, и эти две строки решили проблему:

mkproject <project_name>
pip install <package_name>

Как вы рекомендуете установить virtualenv? pip install virtualenvили пункт не работает, и вам нужно прибегнуть к sudo easy_install+1 для того, что уже здесь. Приветствия
bmike

1
Пип не работает из-за проблемы с разрешениями, поэтому sudo easy_installработает
neosergio

2

У меня установлен python3 на моем Mac, в то время как оригинальный python2.7 поставляется с OSX. Поэтому, когда я хочу вызвать python3, я просто набираю $ python3 .... Может быть, вам стоит попробовать $ python3 get-pip.py, это работает для меня, когда у меня почти такая же проблема с вами.


2

Резюме

Я столкнулся с этой проблемой в Mac OS X 10.11.6 (которая имеет SIP), потому что я установил pip с помощью System easy_install, а локальный easy-install.pth ссылался на системные библиотеки.
При установке последующих пакетов с pip некоторые зависимости были разрешены в более старых библиотеках System Python.
Решение состояло в том, чтобы удалить мои локально установленные библиотеки и переустановить локальную версию Python (которая включает в себя pip) из https://www.python.org/downloads/, чтобы система и локально установленные экземпляры Python были разделены.
Я попытался использовать исправление fix_mac_path.pth в ответе @mfripp, однако обнаружил удаление и переустановку очистителя.

причина

(Не выполняйте эти шаги)

Я столкнулся с этой проблемой, пытаясь установить Ansible. Я следовал Ansible docs для установки на OS X через pip.
Сначала я установил pip с помощью. sudo easy_install pip
Это использовало System easy_install at /usr/bin/easy_installи установил pip at. /Library/Python/2.7/site-packages/pip
Я получил следующие предупреждения при установке pip, но я проигнорировал их и вслепую включил.

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
  warnings.warn(msg)
warning: no previously-included files found matching '.coveragerc'
...
Adding pip 9.0.1 to easy-install.pth file
Installing pip script to /usr/local/bin
...
Installed /Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg
...
Finished processing dependencies for pip

Позже посмотрев /Library/Python/2.7/site-packages/easy-install.pth, это выглядело так

import sys; sys.__plen = len(sys.path)
./pip-9.0.1-py2.7.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

Затем я установил ansible через pip

sudo pip install ansible

Я получил сообщения о том, что системные требования уже выполнены

Requirement already satisfied: setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from ansible)  
Requirement already satisfied: six>=1.4.1 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from cryptography>=1.1->paramiko->ansible)

Потом при запуске ansible у меня возникла эта проблема

VersionConflict: (setuptools 1.1.6 (/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python), Requirement.parse('setuptools>=11.3'))

и проверка пипа показала, что парамико требуется более новый setuptools

pip check paramiko
matplotlib 1.3.1 requires tornado, which is not installed.
matplotlib 1.3.1 requires nose, which is not installed.
cryptography 1.7.2 has requirement setuptools>=11.3, but you have setuptools 1.1.6.

Обратите внимание, что ansible требует только setuptools (без версии), и поэтому pip сообщил о зависимости, удовлетворяемой System setuptools.

Решение

Я решил путем удаления каких - либо локальные библиотек питона , используя процесс намекал https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython
Для меня это вовлеченного

sudo rm -rf /Library/Python

Затем я удалил символические ссылки и исполняемые файлы в / usr / local / bin, такие как

sudo rm /usr/local/bin/ansible  # executable
sudo rm /usr/local/bin/python*  # symlinks to /Library/Python/2.7
sudo rm /usr/local/bin/easy_install*

и так далее. Я также удалил все приложения

sudo rm -rf /Applications/Python\ 2.7/

Затем я скачал установочный пакет 2.7.13 для Mac OS X со страницы https://www.python.org/downloads/ и установил его.

Это установило локальный python и pip at /Library/Frameworks/Python.framework/Versions/2.7и символические ссылки, в /usr/local/binкоторых отдельно от системных библиотек at, /System/Library/Frameworks/Python.frameworkи /usr/bin поэтому я получаю

which pip
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip
which ansible
/Library/Frameworks/Python.framework/Versions/2.7/bin/ansible

И в pip list

setuptools (28.8.0)
six (1.10.0)

ANSIBLE теперь работает на меня


1

Для меня PATHпропал pip, это было подтверждено бегомpython -m pip

Два возможных решения здесь, добавьте pipобратно PATH. В моем случае pipвсе равно было устаревшим, поэтому обновление исправило это:

python -m pip install --upgrade pip

✗ pip --version pip 9.0.1 from /Library/Python/2.7/site-packages (python 2.7)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.