Як користуватися 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 chflags nouchg /System/Library/Frameworks/Python.framework/Versions/2.7/

Зазначене також не допомогло. Що я можу зробити, щоб знову можна було плавно встановлювати бібліотеки python?


1
Де знаходиться піп у вашій системі?
користувач151019

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

$ pip
версія

Як ви встановили pip - він повинен писати на /Library/Python/2.7/site-packages not / System
user151019

Я зараз не пам'ятаю. Після публікації коментаря я зрозумів, що це проблема, і застосував brew для встановлення python, який виправив розташування піп.
web_ninja

Відповіді:


84

Швидке рішення полягає у використанні доморощеного встановити pythonв /usr/local/binтак , що ваші pipможуть набігати рамки пітона користувача змінюваного.

brew install python
pip --version

Вимкнення захисту цілісності системи також є варіантом, але я не рекомендую нічого, окрім професійно керованих та захищених стінами серверів, де у вас є робоча сила для управління виявленням вторгнень або якщо ви розробник / sysadmin і вам потрібно перевірити речі з і без SIP.

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

Ви побачите, що встановлений обмежений прапор, який неможливо видалити навіть як root під час роботи SIP.

Використання домашнього перекладу дозволяє керувати pip та python окремо, ніж версія, що надається системою. Як бонус, рамка домашнього бота створена для полегшення обслуговування та виправлення / виконання завдань за допомогою автоматизації.



@jayatubi Який пакет або сценарій для вас нестабільний? Ви встановлюєте python 2.7.10 від brew або python3, який щойно отримав головний удар, і, як відомо, він не є таким сумісним назад. Ви можете вибрати з десятків версій, якщо ви віддаєте перевагу той, який більш-менш стабільний для ваших потреб.
bmike

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

Завантаження компільованого python .pkg з напр. Python.org/downloads/release/python-2712 для мене працює добре, 10.8. Будь-які коментарі щодо цього проти домашнього пива? Спасибі
denis

@denis Мені подобається, brewоскільки легко зафіксувати вподобану версію - керувати кількома різними версіями або регулярно оновлювати речі. Якщо у вас є щось, що працює для вас, - важко стверджувати, що ви повинні щось змінити.
bmike

77

Інший життєздатний варіант без необхідності відключення SIP або встановлення інших версій Python - це встановлення модулів лише для поточного користувача, що використовує

pip install --user <modulename>

Якщо це лише ваша особиста машина, це було б найпростішим і безпечним рішенням.


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

1
Працює на Сьєрра
harryparkdotio

57

Ця проблема часто виникає, коли pip намагається встановити man-сторінку для IPython на El Capitan. Швидке виправлення полягає у використанні команди pip таким чином:

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

Однак Захист цілісності системи (SIP) на El Capitan блокує кілька поганих практик з pip, які раніше ковзали, тому вам, мабуть, доведеться внести ще кілька змін, щоб плавно працював піп на El Capitan.

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

  1. distutils не встановлює дві важливі змінні в Macs правильно, тому pip намагається записати заголовки та інші спільні файли (наприклад, manpages) під /System/Library/Frameworks/Python.framework/Versions/2.7/. Це погана ідея, але в попередніх версіях OS X це вдалося, якщо pip запускався з sudo. Однак він не вдається на Ель-Капітан через 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/isissue/3165 .

  3. Версія Apple Python додає декілька каталогів під /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. (Я би сподівався, що Apple використовує python -Sдля того, щоб вони завжди отримували очікувані ними пакунки, але я не маю можливості перевірити це.) Встановлення лише для власного облікового запису користувача виключає можливість втручання в установку системи Python. Примітка: якщо ви збираєтеся перейти з інсталяції на загальну систему до лише користувачеві, ви, ймовірно, повинні скористатися цим шансом, щоб видалити що-небудь, встановлене в даний час, /Library/Python/2.7/site-packagesі пов'язані з ним сценарії в /usr/local/bin.

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

Тепер ось вирішення. Це було б хорошою практикою у всіх версіях 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/isissue/426 ):

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

Якщо ви зазвичай використовуєте sudo -H pip ..., тоді вам слід помістити цей файл у /var/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/isissue/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

Вам потрібно буде переконатися, що встановлені пакети вище в порядку пошуку Python, ніж пакети, встановлені системою. Найпростіший спосіб зробити це з .pthфайлами. Це випливає з пропозиції @ Sacrilicious в іншому місці на цій сторінці , але забезпечує пошук вашого каталогу веб-сайтів користувачів перед вашим загальносистемним каталогом пакунків сайтів, і обидва шукаються перед стандартною бібліотекою та каталогом додатків 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-пакетах. (Цей файл може мати будь-яке ім’я, яке вам потрібно, але він повинен бути розміщений в одному або обох цих місцях, і він повинен закінчуватися .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, оскільки це дуже просто і забезпечує чітку настройку, яка не потребує sudo. Це додатково до віртуальних проектів розвитку.
RichVel

Яке лихо. Бог вас благословить.
Метт М.

31

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

За логікою, ви б подумали, що встановити його десь SIP не блокує вас, і це майже напевно, що певна кількість залежностей вирішує для вас. Повідомлення Pip там, де ви хочете, щоб він встановив, не є таким засобом, як його ігнорування раніше існуючих матеріалів у / System, саме там він би перевіряв залежності для багатьох поширених установок, які потребують, наприклад six, і SIP викликає pip зламати себе, коли йде спробувати і оновити його. Це фактично поведінка за замовчуванням для встановлення файлу /Library/Python/2.7/site-packages, потрібно просто сказати, --ignore-installedщоб змусити його встановлювати там будь-які оновлені версії залежностей.
... На жаль, ви можете потім імпортувати цей модуль під час інтерактивної сесії або сценарію та отримати непогані жирові збої - він все ще дивиться на не оновлений пакет / System!

З ранніх днів установки, у 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
Я не знаю, чи спосіб заварювання - це легкий / неправильний шлях - справа в вирішенні проблем, а пивоварі вирішує мої проблеми просто ефектно - поодинці думаючи про те, скільки зусиль знадобиться, щоб грати з новими іграшками (рубін 2.2 .3, python3.5, MongoDB, Node4.2.1) зручним способом, як-от введення команди, і вона перекомпілює, оновлює і виводить треш - ну, тому я проходжу легкий шлях тоді :) Я не знаю, що Поставлена ​​версія OS X Python настільки відрізняється, окрім підтримки какао та ниток і безлічі пакетів, яких я ніколи не використовував, і я дійсно склав свою
групу

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

Встановлення virtualenv вимагає використання pip, щоб насправді не вирішити жодних проблем, пов’язаних із використанням pip. Як це є, я встановлюю його pip --userі virtualenv все ще не працює.
користувач5359531

4

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

Якщо ви хочете відключити SIP, вам потрібно завантажитися у Recovery HD, утримуючи одночасно клавіші Command + R під час завантаження Mac.

Відкрийте термінал у меню Утиліти та введіть csrutil disable, а потім натисніть return. Перейдіть у меню Apple, щоб перезавантажити.

SIP буде відключено відтепер. Я давно відключив його і не помітив нічого поганого, здається, деякі процеси скаржаться, але вони завжди роблять на OS X, тому я не впевнений, що це викликано відсутністю "захисту цілісності системи"

Моя порада - повністю позбутися SIP та / або використовувати домашню мову для всього вашого програмного забезпечення для відкритих джерел / розробок. Homebrew використовує / usr / local каталог для його розстрочки і не стикається з іншими компонентами системи, а збірки домівки є більш сучасними, ніж ОС x x будується.


1
Немає сенсу голосувати за цю відповідь. Але, може, хтось просто хитрий? +1 від мене ...
bmike

1
Дякую, друже! Намагався викласти трохи гумору, але не кожен повинен бути узгоджений з моїм розумінням цього;)
PJJ

Хм - прочитавши священну відповідь, я не дуже впевнений, що це SIP. Думки?
bmike

1
Це дійсно SIP, що перешкоджає створенню папки (можливо, для чогось на зразок чоловічої сторінки) як підкаталогу /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/isissue/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 для того, що вже є. Ура
бміке

1
pip не працює через видачу дозволів, тому sudo easy_installпрацює
neosergio

2

У мене на моєму комп'ютері встановлений python3, тоді як оригінал 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 fix у відповіді від @mfripp, однак я виявив видалення та перевстановлення очищувача.

Причина

(Не виконайте цих кроків)

Я потрапив у цю проблему, намагаючись встановити Ansible. Я слідував за документами Ansible для встановлення на OS X через pip.
Спочатку я встановив pip за допомогою sudo easy_install pip
цього. Використовував систему easy_install у /usr/bin/easy_installта встановив pip, /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)

Тоді при запуску ансібла у мене виникла ця проблема

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

і піп-перевірка виявила, що параміко вимагає нових налаштувань

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 повідомляв про залежність, яку задовольняють налаштування системи.

Рішення

Я вирішив це шляхом видалення будь-яких локальних бібліотек python, використовуючи процес, натяканий на 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 у /Library/Frameworks/Python.framework/Versions/2.7та символьні посилання, у /usr/local/binяких воно є окремим від системних бібліотек у, /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.