Impossibile installare Lxml su Mac os x 10.9


234

Voglio installare Lxml in modo da poter installare Scrapy.

Quando ho aggiornato il mio Mac oggi non mi permetteva di reinstallare lxml, ricevo il seguente errore:

In file included from src/lxml/lxml.etree.c:314:
/private/tmp/pip_build_root/lxml/src/lxml/includes/etree_defs.h:9:10: fatal error: 'libxml/xmlversion.h' file not found
#include "libxml/xmlversion.h"
         ^
1 error generated.
error: command 'cc' failed with exit status 1

Ho provato a utilizzare brew per installare libxml2 e libxslt, entrambi installati correttamente ma non riesco ancora a installare lxml.

L'ultima volta che stavo installando avevo bisogno di abilitare gli strumenti per sviluppatori su Xcode ma dal suo aggiornamento a Xcode 5 non mi dà più quell'opzione.

Qualcuno sa cosa devo fare?


3
PS: ti consiglio di usare: pip3.4 install lxmlo i STATIC_DEPS=true pip3.4 install lxmlcomandi se hai come target un'installazione specifica per Python3 (adattati alla tua versione, bash il completamento della TAB è tuo amico); in modo da installare per la versione specifica del programma di destinazione che utilizza questo / questi libs. Altrimenti è facile spendere 30 minuti per installare la lib per l'interprete sbagliato ;-)
Phil L.

3
Assicurati di contrassegnare la risposta corretta come soluzione in modo che gli altri possano usare la tua domanda come guida quando hanno lo stesso problema :)
Parker

Risposte:


500

È necessario installare o aggiornare lo strumento da riga di comando per xcode. Prova questo in un terminale:

xcode-select --install

24
Viene visualizzato il messaggio "Impossibile installare il software perché non è attualmente disponibile dal server di aggiornamento software."
Kelorek,

7
Vale la pena notare che sembra che si ottenga "Impossibile installare il software perché non è attualmente disponibile dal server di aggiornamento software." quando gli strumenti sono già installati.
Wombat,

Alcune note su come controllare manualmente se sono installati - stackoverflow.com/a/20834890/255961
studgeek

1
Funziona bene il 10.10.3. Non sono sicuro del perché gli altri debbano manipolare le bandiere.
Eric Chen,

1
E ha funzionato per me dopo l'aggiornamento a El Capitan (10.11).
Łukasz,

193

Ho risolto questo problema su Yosemite installando e collegando libxml2e libxslttramite brew:

brew install libxml2
brew install libxslt
brew link libxml2 --force
brew link libxslt --force

Se hai risolto il problema utilizzando questo metodo ma viene nuovamente visualizzato in un secondo momento, potrebbe essere necessario eseguirlo prima delle quattro righe precedenti:

brew unlink libxml2
brew unlink libxslt

Se si verificano errori di autorizzazione con Homebrew, in particolare su El Capitan, questo è un documento utile . In sostanza, indipendentemente dalla versione di OS X, prova a eseguire:

sudo chown -R $(whoami):admin /usr/local

24
La risposta più utile È incredibile come xcode-select ottenga così tanti voti. Se stai usando brew, hai già selezionato codice o installato xcode molto tempo fa.
Marcos Eliziário Santos

5
@ MarcosEliziárioSantos La parola "installa" in xcode-select --installè un po 'fuorviante. Ho scoperto che dopo l'aggiornamento da Mavericks a Yosemite, dovevo eseguire di xcode-select --installnuovo l' esecuzione per passare agli strumenti da riga di comando di Yosemite. Risolveva (parzialmente) i problemi che stavo incontrando, e in ogni caso sarebbe stato innocuo correre in modo ridondante.
Noach Magedman,

2
@ MarcosEliziárioSantos probabilmente perché la risposta migliore ha risolto il problema per la maggior parte delle persone. Questa soluzione ha funzionato come soluzione alternativa, ma ho riscontrato problemi simili con libmemcache pochi secondi dopo. La risposta migliore ha risolto il problema. Tutti dovrebbero considerare questo metodo solo dopo aver provato prima la risposta principale.
Rafal Es

@ MarcosEliziárioSantos un'altra cosa: sto usando brew ma era una nuova installazione (avevo installato solo XCode tramite AppStore, che è sufficiente per installare homebrew).
Rafal Es

Inoltre, Homebrew rovina sempre le mie autorizzazioni. Ho usato la soluzione Xcode.
sudo,

102

È possibile risolvere il problema eseguendolo sulla riga di comando:

 STATIC_DEPS=true pip install lxml

Mi ha sicuramente aiutato. Spiegazioni sui documenti


Grazie mille. Questo mi ha fatto risparmiare un'incredibile quantità di tempo.
lukecampbell,

Funziona bene su OSX
10.9.5

Grazie! Funziona bene su macOS 10.14
jolvera

48

Ho provato la maggior parte delle soluzioni sopra, ma nessuna ha funzionato per me. Sto eseguendo Yosemite 10.10, l'unica soluzione che ha funzionato per me era digitare questo nel terminale:

sudo CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install lxml

EDIT: Se stai usando virtualenv, il sudo all'inizio non è necessario.


1
Questa soluzione funziona anche su Mavericks! Se non si utilizza virtualenvsudo, non è necessario.
Mauro Baraldi,

Il mio è ancora in uscita OSError: [Errno 1] Operation not permitted: '/usr/bin/build'nonostante l'esecuzione del comando come sudo. Qualche idea?
PLPeeters,

@PLPeeters Quale versione di Python stai utilizzando e quale versione del sistema operativo?
Robinsj,

Sono su El Capitan beta (quindi è il 10.11) e per questo utilizzo Python 2.7. Immagino che potrebbe avere qualcosa a che fare con El Capitan ...
PLPeeters

Sei un salvavita. El capitan funziona, in virtualenv non serve nessun sudo. Grazie!
Jacoor,

24

Questo mi ha infastidito anche per un po '. Non conosco abbastanza gli interni riguardo a python distutils ecc., Ma il percorso di inclusione qui è sbagliato. Ho fatto il seguente brutto hack per trattenermi fino a quando le persone Python LXML non possono fare la correzione corretta.

sudo ln -s  /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2/libxml/ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml

19

Installazione a livello globale ... OS X 10.9.2

xcode-select --install
sudo easy_install pip
sudo CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install lxml

1
Questo ha funzionato per me, prima ho dovuto aggiornare gli strumenti di sviluppo di xcode usando: xcode-select --install
erickthered

Questo ha funzionato. Avevo già installato gli strumenti da riga di comando xcode, ma sembra che debba essere aggiornato.
Steven Mercatante,

12

le istruzioni di installazione su http://lxml.de/installation.html spiegano:

Per accelerare la compilazione in ambienti di test, ad esempio su un server di integrazione continua, disabilitare le ottimizzazioni del compilatore C impostando la variabile di ambiente CFLAGS:

CFLAGS="-O0" pip install lxml

Ha funzionato perfettamente per me. +1
João Pereira,

11

Nessuna delle precedenti ha funzionato per me il 10.9.2, poiché la compilazione viene salvata con il seguente errore:

clang: error: unknown argument: '-mno-fused-madd' 

Che in realtà porta alla soluzione più pulita (vedi maggiori dettagli in [1]):

export CFLAGS=-Qunused-arguments
export CPPFLAGS=-Qunused-arguments

pip install lxml

o seguenti se si installa a livello globale

sudo pip install lxml

[1] errore clang: argomento sconosciuto: '-mno-fused-madd' (errore di installazione del pacchetto python)


Grazie. questo mi ha aiutato. desideri che le risposte possano talvolta contenere meta sulle versioni del sistema operativo.
francamente,

Se l'installazione a livello globale potrebbe essere necessario /etc/sudoerscon sudo visudoper preservare le variabili di ambiente.
Swandog,

10
xcode-select --install
sudo easy_install pip
sudo pip install lxml

È interessante notare che alcune persone avevano bisogno sudodell'installazione pip mentre altre no. (Ho avuto problemi di autorizzazione durante l'esecuzione di pip install direttamente, e ho dovuto fare sudo.) Posso solo supporre che avevo installato qualcosa di python come root in un lontano passato, che ha creato alcune cartelle (di sistema) come root anziché come me.
Noach Magedman,

Questo ha funzionato per me, avevo appena impostato un nuovo mac per il lavoro e anche se ho installato XCode, immagino che non abbia installato gli strumenti da riga di comando? Ad ogni modo, eseguendo questo, facendolo installare gli strumenti e poi semplicemente rieseguendo 'pip3.4 install lxml --user' ha funzionato, senza sudo o ESPORTANDO eventuali variabili della shell.
mgrandi,

Questo ha funzionato perfettamente su Yosemite in virtualenv. Non ne avevo bisogno sudo.
nils

@NoachMagedman Sto installando in un ambiente virtuale, quindi non posso usare sudo. Se usassi sudo, lo installerei nei miei pacchetti python globali, che è quello che sto cercando di evitare.
Esteban,

6

Ho risolto questo problema Yosemiteeseguendo i seguenti comandi:

xcode-select install #this may take several minutes.
pip install lxml

Ne avevo abbastanza di homebrew che creava un groviglio di cose sul mio vecchio sistema, quindi ho promesso di non usarlo con la mia nuova configurazione di Yosemite 10.10.2. Ho già installato l'intero pacchetto Xcode, quindi non è necessario xcode-select installper me. Ho scaricato gli ultimi pacchetti libxml2 e libxlst (richiesti per lxml), ma prima di installarli ho pensato di verificare se Yosemite avesse già quei file da qualche parte. Ho creato un env virtuale (usando virtualenvwrapper), e poi l'ho fatto pip install lxml, e lxml è stato installato senza errori. Ho testato lxml raschiando la home page di google e ha funzionato bene.
7stud

4

Con homebrew, libxml2 è nascosto per non interferire con il sistema libxml2, quindi pip deve essere aiutato un po 'per trovarlo.

Con bash:

LDFLAGS=-L`brew --prefix libxml2`/lib CPPFLAGS=-I`brew --prefix libxml2`/include/libxml2 pip install --user lxml

Con pesce:

env LDFLAGS=-L(brew --prefix libxml2)/lib CPPFLAGS=-I(brew --prefix libxml2)/include/libxml2 pip install --user lxml

2

OSX 10.9.2

sudo env ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future STATIC_DEPS=true pip install lxml

2

Ho provato tutte le risposte su questa pagina, nessuna di queste ha funzionato per me. Sto eseguendo OS X versione 10.9.2

Ma questo sicuramente funziona .... come un fascino:

ARCHFLAGS = -Wno-error = unused-command-line-topic-hard-error-in-future pip install lxml


1
Questo disabilita semplicemente errori concreti per argomenti inutilizzati, che ho riscontrato durante molte altre raccolte di librerie su OS X Mavericks. Ho trovato utile aggiungere la linea al mio profilo bash, quindi non devo cercarla ogni volta che la incontro: export ARCHFLAGS="-Wno-error=unused-command-line-argument-hard-error-in-future"o puoi aggiungere tipi di architettura esplicitamente come questo:export ARCHFLAGS="-arch x86_64 -arch i386 -Wno-error=unused-command-line-argument-hard-error-in-future"
Michiel Kauw-A-Tjoe

2

Sfortunatamente xcode-select --installnon ha funzionato per me poiché avevo già l'ultima versione.

È molto strano ma ho risolto il problema aprendo XCode e accettando i Termini e condizioni. La riesecuzione pip install lxmlnon ha restituito errori dopo.


1

Dopo aver eseguito con successo l'installazione da pip (lxml 3.6.4) ho riscontrato un errore durante l'importazione del modulo lxml.etree.

Stavo cercando all'infinito di installarlo come requisito per scrapy e ho provato tutte le opzioni, ma alla fine ha funzionato per me (mac osx 10.11 python 2.7):

$ STATIC_DEPS=true sudo easy_install-2.7 "lxml==2.3.5"

La versione precedente di lxml sembra funzionare con il modulo etree.

Pip può spesso ignorare la versione specificata di un pacchetto, ad esempio quando si ha la versione più recente nella cache pip, quindi il easy_install. L' '-2.7'opzione è per la versione di Python, omettila se stai installando per Python 3.x.


1

Nel mio caso, devo chiudere Kaspersky Antivirus prima di installare lxml:

pip install lxml

0

Sto usando OSX 10.9.2 e ottengo lo stesso errore.

L'installazione degli strumenti della riga di comando XCode non aiuta per questa particolare versione di OSX.

Penso che un approccio migliore per risolvere questo problema sia quello di installare con il seguente comando:

$ CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2 pip install lxml

Questo è simile alla correzione di jdkoftinoff, ma non altera il sistema in modo permanente.


0

Ho incontrato la stessa domanda e dopo giorni di lavoro ho risolto questo problema sul mio OS X 10.9.4, con Python 3.4.1.

Ecco la mia soluzione,

Secondo l' installazione di lxml da lxml.de,

È disponibile un macport di lxml. Prova qualcosa come port install py25-lxml

Se non hai MacPort, installalo da MacPort.org . È abbastanza facile Potrebbe anche essere necessario un compilatore, per installare gli strumenti di compilazione XCode, utilizzarexcode-select --install

Innanzitutto ho aggiornato la mia porta all'ultima versione tramite sudo port selfupdate,

Quindi scrivo sudo port install libxml2e dopo alcuni minuti dovresti vedere libxml2 installato correttamente. Probabilmente potresti anche aver bisogno libxsltdi installare lxml. Per installare libxslt, uso: sudo port install libxslt.

Ora, basta digitare pip install lxml, dovrebbe funzionare bene.


0

prima di compilare aggiungere il percorso che a xmlversion.h nel proprio ambiente.

$ set INCLUDE=$INCLUDE:/private/tmp/pip_build_root/lxml/src/lxml/

Ma assicurati che il percorso che ho fornito abbia il file xmlversion.h all'interno. Poi,

$ python setup.py install



0

Dopo aver strappato molto i capelli e digrignato i denti, ho disinstallato xcode con pip e ho eseguito:

easy_install lxml

E tutto andava bene.


-1

Provare:

% STATIC_DEPS=true pip install lxml

O:

% STATIC_DEPS=true sudo pip install lxml

Funziona!


Duplica della risposta di Andre.
Kar
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.