Come usare pip dopo l'aggiornamento di OS X El Capitan?


116

Dopo l'aggiornamento di El Capitan, non riesco a eseguire l'installazione pip. L'errore che ottengo è che "l'operazione non è consentita" quando pip tenta di creare nuove cartelle durante l'installazione.

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

In effetti, in generale non riesco a creare cartelle ecc. In queste cartelle. Ho provato ad usare sudo che non aiuta. Anche io ho fatto

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

Quanto sopra non ha aiutato neanche. Cosa posso fare per poter installare nuovamente le librerie di Python senza problemi?


1
Dov'è pip sul tuo sistema?
user151019

$ dove pip / usr / local / bin / pip
web_ninja

$ pip --version pip 7.1.2 da /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)
web_ninja

Come hai installato pip - dovrebbe scrivere in /Library/Python/2.7/site-packages not / System
user151019

Non mi ricordo adesso. Ho pensato dopo aver pubblicato il commento che era il problema e ho usato brew per installare Python e che ha corretto la posizione di pip.
web_ninja,

Risposte:


84

Una soluzione rapida è utilizzare homebrew per l'installazione pythonin /usr/local/binmodo da pippoter eseguire un framework Python modificabile dall'utente.

brew install python
pip --version

Anche la disabilitazione della protezione dell'integrità del sistema è un'opzione, ma non lo consiglio a tutti tranne che a server gestiti professionalmente e dotati di firewall, dove hai la forza lavoro per gestire il rilevamento delle intrusioni o se sei uno sviluppatore / amministratore di sistema e devi testare le cose con e senza SORSO.

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

Vedrai che è impostato il flag limitato che non può essere rimosso anche come root mentre è attivo SIP.

L'uso di homebrew consente di gestire pip e python separatamente rispetto alla versione fornita dal sistema. Come bonus, il framework homebrew è progettato per facilitare la manutenzione e le patch / faccende tramite automazione.


1
Il brew installato python non è stabile e si blocca in modo casuale
jayatubi

@jayatubi Quale pacchetto o script è instabile per te? Stai installando python 2.7.10 da brew o python3 che ha appena avuto un grosso bump ed è noto per non essere così retrocompatibile. Puoi scegliere tra dozzine di versioni se preferisci una più o meno stabile per le tue esigenze.
bmike

1
Accetto che brew install pythonsia l'opzione più semplice, anche se potrebbe essere necessario ripulire qualche altra installazione se si utilizza il sistema Python per un po 'di tempo (ad esempio, file Python di proprietà root in /usr/local/bine ~/Library/Caches/pip)
RichVel

Scaricare un .pkg di python compilato da ad esempio python.org/downloads/release/python-2712 funziona bene per me, il 10.8. Qualche commento su questo vs. homebrew? Grazie
denis,

@denis Mi piace brewpoiché è facile aggiungere una versione che ti piace: gestire più versioni diverse o mantenere le cose aggiornate regolarmente. Se hai qualcosa che funziona per te, però - è difficile sostenere che dovresti cambiare qualcosa.
bmike

77

Un'altra opzione praticabile senza la necessità di disabilitare SIP o installare altre versioni di Python è installare i moduli solo per l'utente corrente utilizzando

pip install --user <modulename>

Se fosse solo la tua macchina personale, questa sarebbe la soluzione più semplice e sicura.


1
Forse El Capitan ha fornito / usr / bin / pip, ma macOS Sierra no.
sigjuice,

1
Funziona su sierra
harryparkdotio,

57

Questo problema si presenta spesso quando pip tenta di installare una manpage per IPython su El Capitan. La soluzione rapida è usare un comando pip come questo:

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

Tuttavia, System Integrity Protection (SIP) su El Capitan blocca diverse cattive pratiche con pip che era solito scorrere, quindi sarà probabilmente necessario apportare ulteriori modifiche per far funzionare senza problemi pip su El Capitan.

SIP su El Capitan espone tre problemi con l'utilizzo di pip con la versione di Python fornita da Apple su OS X:

  1. distutils non imposta correttamente due variabili importanti su Mac, quindi pip prova a scrivere intestazioni e altri file condivisi (ad esempio manpage) in /System/Library/Frameworks/Python.framework/Versions/2.7/. Questa è una cattiva idea, ma nelle versioni precedenti di OS X, ha avuto successo se pip è stato eseguito con sudo. Tuttavia fallisce su El Capitan a causa di SIP. Questo è l'errore che hai riscontrato. Dà messaggi comeOSError: [Errno: 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

  2. Apple installa versioni obsolete di alcuni pacchetti in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/(ad esempio, sei). Nelle versioni precedenti di OS X, quando si installava un pacchetto che richiedeva una versione più recente di uno di questi, sudo pipsi rimuoveva automaticamente la versione precedente dalla /System/cartella e si installava una versione più recente /Library/Python/2.7/site-packages. Anche questa è stata una cattiva idea e non è più possibile con SIP. Ma ora pip si arresterà in modo anomalo con un messaggio di errore durante il tentativo di rimuovere il vecchio pacchetto. Anche quel messaggio lo è OSError: [Errno: 1], ma viene dopo un messaggio simile Uninstalling six-1.4.1:. Vedi, ad esempio, https://github.com/pypa/pip/issues/3165 .

  3. La versione Apple di Python aggiunge diverse directory nel /System/Library/Frameworks/Python.framework/Versions/2.7/percorso di ricerca di Python sopra i percorsi di installazione del pacchetto standard accessibili all'utente. Quindi, se installi una versione più recente di un pacchetto altrove (ad es., sudo -H pip install --ignore-installed six), Riceverai un messaggio che indica che l'installazione è riuscita, ma quando avvii Python otterrai la versione precedente /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/. Ciò rende anche impossibile utilizzare nuovi pacchetti con lo stesso nome dei moduli della libreria standard.

Puoi aggirare questi problemi, ma il metodo dipende dalle tue risposte a tre domande.

  1. Vuoi continuare a utilizzare la versione di Python per Mac OS X o installarne una tua? L'installazione della tua è l'opzione più sicura e può essere eseguita tramite il programma di installazione ufficiale di Python, Homebrew o Anaconda. Questo è anche ciò che Apple consiglia , come sottolineato da @Sacrilicious . Se installi la tua versione di Python, probabilmente dovresti disinstallare tutto ciò che è attualmente installato /Library/Python/2.7/site-packagese tutti gli script installati /usr/local/binper quei pacchetti (incluso pip). Altrimenti avrai la fastidiosa esperienza di alcuni script che accedono alla versione di Python installata dal sistema e alcuni che accedono alla tua installazione.

Se vuoi restare con Python installato dal sistema, devi prendere altre due decisioni:

  1. Vuoi installare pacchetti per tutti gli utenti o solo per te stesso? L'installazione per tutti gli utenti garantisce che ogni programma che utilizza Python (inclusi eventualmente gli script amministrativi) avrà accesso a tutti i pacchetti installati. Tuttavia, c'è una remota possibilità che interferisca con l'uso da parte di El Capitan di Python. (Spero che Apple utilizzi python -Sper assicurarsi che ottengano sempre i pacchetti che si aspettano, ma non ho modo di testarlo.) L'installazione solo per il tuo account utente elimina la possibilità di interferire con l'installazione di Python del sistema. Nota: se si passa da un'installazione a livello di sistema a solo utente, è consigliabile sfruttare questa possibilità per disinstallare tutto ciò che è attualmente installato /Library/Python/2.7/site-packagese gli script correlati /usr/local/bin.

  2. Vuoi nascondere i pacchetti extra che sono installati con la versione OS X di Python (sotto /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/) o tenerli nel percorso di ricerca? Consiglio di nasconderli, in modo che le versioni più recenti di questi pacchetti vengano installate automaticamente in posizioni accessibili all'utente quando necessario. Se non nascondi questa directory, a volte riceverai messaggi che pip non è stato in grado di rimuovere un pacchetto esistente per aggiornarlo a una versione successiva (necessario per un pacchetto diverso che stai installando). In tal caso, sarà necessario eseguire pip install --ignore-installed <package>, che installerà la versione più recente e nasconderà la versione installata dal sistema. Tuttavia, se nascondi il tutto/System/.../Extras/...directory, perderai l'accesso ad alcuni pacchetti Apple che non sono disponibili tramite pip, ad esempio CoreGraphics e bonjour. (Se hai bisogno di questi, potresti essere in grado di ottenere l'accesso collegandoli alla directory dei pacchetti del sito).

Ora, ecco le soluzioni alternative. Queste sarebbero buone pratiche su tutte le versioni di OS X, per evitare la sostituzione o la rimozione accidentale di pacchetti Python utilizzati dal sistema operativo; tuttavia sono essenziali se si desidera utilizzare i pacchetti installati dall'utente con la versione di Python fornita da Apple su OS X El Capitan (10.11).

Installa pip

Probabilmente lo hai già fatto, ma in caso contrario, puoi utilizzare il seguente comando per installare pip per tutti gli utenti :

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

Oppure usa questo comando per installare pip solo per il tuo account utente :

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

Gestisci percorsi file condivisi

Se stai installando pacchetti per tutti gli utenti, crea un file chiamato .pydistutils.cfg con queste righe (da https://github.com/pypa/pip/issues/426 ):

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

Se si utilizza di solito sudo -H pip ..., è necessario inserire questo file /var/root(home directory per l'utente root). Se di solito lo usi sudo pip ..., allora dovresti mettere questo file nella tua home directory (~).

Queste impostazioni impediranno a pip di provare a scrivere elementi condivisi come intestazioni e pagine man in /Library/System. (Il comando nella parte superiore di questa risposta è una versione più veloce della stessa cosa.) Queste impostazioni sono necessarie perché il codice specifico di darwin /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install.pynon riesce a impostare queste variabili in posizioni scrivibili da root (sebbene imposta correttamente altre variabili). Ulteriori informazioni al riguardo sono disponibili su https://github.com/pypa/pip/issues/3177 .

Se installi pacchetti solo per il tuo account utente, gli elementi condivisi verranno automaticamente installati in ~/Library/Python/2.7/. Ma dovresti aggiungere le seguenti righe al tuo ~ / .profile in modo che gli elementi condivisi vengano trovati quando ne hai bisogno:

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

Nota: sarà necessario avviare una nuova shell o eseguirli sulla riga di comando affinché le modifiche abbiano effetto. Potresti anche voler eseguire hash -rse hai rimosso di recente vecchi script dal percorso.

Gestisci percorso Python

Dovrai assicurarti che i pacchetti installati siano più alti nell'ordine di ricerca di Python rispetto ai pacchetti installati dal sistema. Il modo più semplice per farlo è con i .pthfile. Questo segue il suggerimento di @ Sacrilicious altrove in questa pagina , ma assicura che la directory dei pacchetti del sito dell'utente venga cercata prima della directory dei pacchetti del sito a livello di sistema, ed entrambi vengano cercati prima della libreria standard e della directory Extras di Apple (entrambe in / Sistema /. ..). /System/.../ExtrasSe lo si desidera, si omette anche dal percorso di ricerca.

Crea un file chiamato fix_mac_path.pth, con il testo seguente. Se si installano pacchetti per tutti gli utenti, fix_mac_path.pth devono essere inseriti /Library/Python/2.7/site-packages. Se stai installando solo per il tuo utente, fix_mac_path.pth dovrebbe essere in ~ / Library / Python / 2.7 / lib / python / site-pacchetti. (Questo file può avere qualsiasi nome desiderato, ma deve essere posizionato in una o entrambe queste posizioni e deve terminare .pth; inoltre, tutto il testo in questo file deve essere su una riga.)

Se vuoi nascondere i pacchetti installati da Apple in /System/.../Extras:

Per prima cosa esegui uno dei seguenti comandi per ottenere una copia funzionante di pip / setuptools indipendente dalla versione fornita da Apple:

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

Quindi inserire il seguente codice nella fix_mac_path.pthposizione sopra specificata:

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

Se si desidera continuare a utilizzare i pacchetti installati da Apple, non è necessario installare un'altra copia di setuptools. Basta inserire il seguente codice nella fix_mac_path.pthposizione sopra specificata:

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

Successivamente, è possibile utilizzare python -m siteper assicurarsi che l'ordine di ricerca del percorso abbia senso.

Installa i pacchetti

Dopodiché, dovresti essere in grado di installare nuovi pacchetti usando uno dei seguenti comandi.

Per tutti gli utenti:

sudo -H pip install <package>

Per il tuo utente:

pip install --user <package>

Indicazioni molto chiare con alternative spiegate. Ho seguito questa guida e sono riuscito con successo a superare il "sei" problema della libreria, permettendomi di installare mitmproxy.
Paul Chernoch,

1
Questa è davvero una delle risposte più informative, complete e utili che abbia mai incontrato su StackOverflow. Ben fatto e grazie.
cmsjr,

@cmsjr, grazie! Mi ci è voluto un po 'di tempo per capire cosa stesse succedendo, e questo mi dà un buon posto per fare riferimento ad esso!
Matthias Fripp,

4
Di gran lunga la spiegazione più chiara e completa che ho visto su quest'area, in particolare la pulizia del sistema Python mess esistente - grazie! Il mio principale miglioramento sarebbe più fortemente quello di utilizzare un Python installato in fabbrica, poiché è molto semplice e offre una configurazione pulita che non richiede sudo. Questo è in aggiunta a virtualenvs per progetti di sviluppo.
RichVel,

Che disastro. Dio ti benedica.
Matt M.

31

Innanzitutto, non stai disabilitando SIP come modo per risolvere il problema. Siamo spiacenti, questo è il motivo per cui la creazione di questa cartella non riesce, ma dobbiamo aggirare il problema. In secondo luogo, perdi tutte le bellezze che Apple pensava ti stessero dando, come un bridge tramite pyObjC, quando installi il tuo Python.
(Lo ammetto, dicono che dovresti installare il tuo /usr/localse sei uno sviluppatore, mi oppongo solo a farlo nel modo più semplice con brew.)

Logicamente, penseresti di installarlo da qualche parte SIP non ti sta bloccando, e questo è quasi sicuramente un pip di dipendenza che si sta risolvendo per te. Dire a pip dove vuoi che esegua le installazioni non è il rimedio tanto quanto fargli ignorare le cose preesistenti in / System, che è dove verificherebbe le dipendenze per molte installazioni comuni che richiedono, ad esempio six, e SIP causa pip per rompersi quando si cerca di aggiornarlo. In realtà è il comportamento predefinito di pip da installare in /Library/Python/2.7/site-packages, devi solo dire --ignore-installedper forzarlo a installare eventuali versioni aggiornate delle dipendenze lì.
... Sfortunatamente, potresti quindi andare a importare questo modulo in una sessione interattiva o in uno script e ottenere buoni fallimenti - sta ancora guardando il pacchetto non aggiornato di / System!

Sin dai tempi dei primi setuptools, Python ha un modo per rendere esplicita quella ricerca. È un po 'strano, (e dovrebbe provocare una pausa per quelli di noi che sono attenti alla sicurezza e non entusiasti della schiettezza di spingerlo in cima all'elenco senza controllare, ma) puoi posizionare un file che termina con .pth( ad esempio 'elcap.pth') in /Library/Python/2.7/site-packagesper spingere quella directory in primo piano nell'ordine di ricerca con i seguenti contenuti:
import sys; sys.path = ['/Library/Python/2.7/site-packages'] + sys.path

Inizia una nuova sessione e un breve viaggio per python -m siteconfermare che hai inserito quel percorso nel primo slot e che i moduli di importazione dovrebbero funzionare.

Oh, e dopo tutto questo, prova a installare semplicemente con l' --useropzione pip , o usando un virtualenv - questa è la migliore pratica per la maggior parte delle persone.


1
Ora questo è elegante e un buon contrappunto alla mia semplicistica soluzione "abbandona il sistema Python e preparalo". Se hai bisogno di una soluzione rapida e sporca, questo potrebbe non valere la pena, ma mantenere pyObjC e un pitone ha un grande merito.
bmike

2
Più sensato e sensato sarebbe installare --usero utilizzare un virtualenv. Sono solo un sysadmin che installi una volta per un sistema e che l'utente dovrebbe essere in grado di sovrascrivere il sistema. Le obiezioni a questa soluzione potrebbero essere che il sistema guarderebbe un percorso alterato, ma c'è il precedente che easy_install può scrivere anche un file .pth.
Sacrilicious il

2
Non so se il modo in cui la birra è il modo facile / sbagliato - è la questione di risolvere i problemi, e la birra sta risolvendo i miei problemi in modo spettacolare - pensando da solo a quanto sforzo ci vorrebbe per giocare con i nuovi giocattoli (ruby 2.2 .3, python3.5, MongoDB, Node4.2.1) in un modo conveniente, come digitare un comando e ricompila, aggiorna e elimina il thrash - beh, quindi prendo la strada facile allora :) Non so cosa la versione OS X di Python fornita è così diversa a parte il supporto Cocoa and Threads e molti pacchetti che non ho mai usato prima e ho davvero compilato la mia pila di roba Xcode / Kernel
PJJ

Ho aggiunto elcap.pth a /Library/Python/2.7/site-packages, ora vedo quel percorso elencato negli indici 0 e 2 di sys.path. Poi ho provato sudo pip install --ignore-installed ipythone funziona fino a "Esecuzione di setup.py install for pexpect", a quel punto pip continua a provare ad aggiornare qualcosa in /System/Library/Frameworks/Python.framework/Versions/2.7/share ed errori.
Kojiro,

L'installazione di virtualenv richiede l'utilizzo di pip, in modo da non risolvere realmente i problemi legati all'utilizzo di pip. Così com'è, lo sto installando con pip --usere virtualenv non funziona ancora.
user5359531

4

Penso che sia a causa del SIP o System Integrity Protection , una sorta di protezione dei file in tempo reale che sembra un anti-virus di Windows :) e blocca qualsiasi modifica che desideri apportare nelle cartelle di sistema di OS X. Apple ha semplicemente deciso di disabilitare le modifiche al sistema - per essere sicuro di essere completamente protetto dal male di Internet e di altre forze del male legate al computer da cui SIP ci sta proteggendo.

Se si desidera disabilitare SIP, è necessario eseguire l'avvio in Recovery HD tenendo premuti contemporaneamente i tasti Comando + R all'avvio del Mac.

Apri il terminale dal menu Utilità e digita csrutil disable, quindi premi Invio. Vai al menu Apple per riavviare.

SIP sarebbe disabilitato da ora in poi. L'ho disabilitato molto tempo fa e non ho notato nulla di sbagliato, alcuni processi sembrano lamentarsi ma lo fanno sempre su OS X, quindi non sono sicuro che sia causato dalla mancanza di "protezione" di System Integrity

Il mio consiglio è di eliminare completamente SIP e / o usare l'homebrew per tutto il tuo software opensource / sviluppo. Homebrew usa la directory / usr / local per la sua installazione e non si scontra con altri componenti di sistema, e le build homebrew sono più aggiornate delle build di os x apple.


1
Non ha senso votare in basso questa risposta. Ma forse qualcuno è solo irritabile? +1 da parte mia ...
bmike

1
Grazie compagno! Ho cercato di mettere un po 'di umorismo, ma non tutti devono essere in linea con la mia comprensione;)
PJJ

Hmm - dopo aver letto la risposta "sacrilici" , non sono così sicuro che si tratti di SIP. Pensieri?
bmike

1
Questo è davvero SIP che impedisce la creazione di una cartella (possibilmente per qualcosa come una pagina man) come sottodirectory di /System; off-limits dal 10.11. Possiamo usare csrutil per disabilitarlo temporaneamente se siamo in difficoltà, anche se so che potrebbe sembrare che potrebbe trasformarsi in una talpa, ma questo non sembra un buon motivo per impiegarlo. Lasciarlo è ... perché non possiamo avere cose carine.
Sacrilicious il

L'ho tolto tutto il tempo: 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 e non ho motivo di abilitarlo da quando ho chiuso il mio sistema piuttosto stretto e personalizzato
PJJ

4

Utilizzato pip3 install <package>invece e risolto il problema di autorizzazione in pip.


4

Credimi, non vuoi davvero che la biblioteca scriva qualcosa in quel percorso.

In precedenza non era raccomandato, ma era possibile scriverlo /System/Library/Frameworks/Python.framework/Versions/2.7/, ma ora non è supportato a causa di Apple SIP e quindi è il problema del proprietario della libreria. La distribuzione del pacchetto deve essere aggiornata per funzionare correttamente con questo aggiornamento. La maggior parte dei pacchetti è stata aggiornata e ne installa il contenuto /Library/Python/2.7/site-packages, ma alcuni pacchetti non sono stati aggiornati.

Nel mio caso, era una libreria greenlet che cercava di scrivere il suo .hfile nella cartella System Frameworks:

Come risolverlo: sudo -H pip install greenlet --install-option "--install-headers=/Library/Python/2.7/lib/python/includes/" allorasudo -H pip install gevent

Per numpy, la correzione è sudo -H pip install --ignore-installed -U numpy.

Per altre librerie, le correzioni variano da https://github.com/pypa/pip/issues/3177 a pip install --ignore-installed sixe pip install --user(l'ultimo installa tutto in /User//Library/Python/2.7/ path). Vedi anche l'attuale risposta principale a questo post: https://apple.stackexchange.com/a/210021/169157

Se digiti python -m site, dovrebbe includere sys.path = [ ... '/Library/Python/2.7/site-packages', ... ] prima dei percorsi di sistema: ecco perché (e come) funziona.


3

L'ho fatto come segue:

brew install python

quindi dopo l'installazione di Python:

sudo easy_install pip

3
brew install pythoninstalla già pip con esso. Se quindi installi pip tramite easy_install, probabilmente finisci con due installazioni di pip che possono causare problemi di confusione.
NSSynapse,

3

Una soluzione molto interessante per questo problema sta usando virtualenv (virtualenvwrapper), dopo aver creato un nuovo ambiente per il tuo progetto, puoi usare pip senza problemi, quindi ho usato virtualenvwrapper e queste due righe risolvono il problema:

mkproject <project_name>
pip install <package_name>

Come consigli di installare virtualenv? pip install virtualenvo pip non funziona e devi ricorrere a sudo easy_install+1 per quello che è già qui. Saluti
bmike

1
pip non funziona a causa di problemi con le autorizzazioni, quindi sudo easy_installfunziona
neosergio

2

Ho installato python3 sul mio mac mentre l'originale python2.7 viene fornito con OSX. Quindi ogni volta che voglio invocare python3, devo solo digitare $ python3 .... Forse dovresti provare $ python3 get-pip.py, questo funziona per me quando ho quasi lo stesso problema con te.


2

Sommario

Ho riscontrato questo problema su Mac OS X 10.11.6 (che ha SIP) perché ho installato pip usando System easy_install e il file easy-install.pth locale si riferiva alle librerie di sistema.
Durante l'installazione di pacchetti successivi con pip, alcune delle dipendenze sono state risolte nelle librerie di System Python precedenti.
La soluzione era quella di rimuovere le mie librerie installate localmente e reinstallare una versione python locale (che include pip) da https://www.python.org/downloads/ in modo che il sistema e le istanze python installate localmente fossero mantenute separate.
Avevo provato a utilizzare la correzione fix_mac_path.pth nella risposta di @mfripp, tuttavia ho trovato la rimozione e la reinstallazione di Cleaner.

Causa

(Non seguire questi passaggi)

Ho riscontrato questo problema durante il tentativo di installare Ansible. Ho seguito i documenti Ansible per l'installazione su OS X tramite pip In
primo luogo ho installato pip con sudo easy_install pip
Questo ha usato System easy_install at /usr/bin/easy_installe installato pip a /Library/Python/2.7/site-packages/pip
Ho ricevuto avvisi come segue durante l'installazione di pip, ma li ho ignorati e ho arato alla cieca.

/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

Più tardi guardando /Library/Python/2.7/site-packages/easy-install.pth, sembrava così

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)

Quindi ho installato ansible tramite pip

sudo pip install ansible

Ho ricevuto messaggi per dire che i requisiti erano già soddisfatti dalle librerie di sistema

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)

Quindi quando sono in esecuzione ansible ho avuto questo problema

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

e un controllo pip ha rivelato che paramiko ha richiesto un nuovo 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.

Si noti che ansible ha richiesto solo i setuptools (nessuna versione) e quindi pip ha segnalato la dipendenza soddisfatta dai setuptools del sistema.

Soluzione

L'ho risolto disinstallando tutte le librerie python locali usando il processo accennato a https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython
Per me questo è stato coinvolto

sudo rm -rf /Library/Python

Quindi ho rimosso i symlink e gli eseguibili in / usr / local / bin come

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*

e così via. Ho anche rimosso tutte le applicazioni

sudo rm -rf /Applications/Python\ 2.7/

Ho quindi scaricato il pacchetto di installazione 2.7.13 per Mac OS X da https://www.python.org/downloads/ e l'ho installato.

Questo ha installato un Python locale e pip at /Library/Frameworks/Python.framework/Versions/2.7e collegamenti simbolici in /usr/local/bincui è separato dalle librerie di sistema in /System/Library/Frameworks/Python.frameworke /usr/bin così che ottengo

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

e dentro pip list

setuptools (28.8.0)
six (1.10.0)

Ansible ora funziona per me


1

Per me, PATHera scomparso pip, questo è stato confermato correndopython -m pip

Due potenziali soluzioni qui, aggiungere di pipnuovo a PATH. Nel mio caso pipera comunque obsoleto, quindi l'aggiornamento ha risolto:

python -m pip install --upgrade pip

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.