Lxml kann nicht auf Mac OS X 10.9 installiert werden

234

Ich möchte Lxml installieren, damit ich dann Scrapy installieren kann.

Wenn ich heute meinen Mac aktualisierte, konnte ich lxml nicht neu installieren. Ich erhalte die folgende Fehlermeldung:

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

Ich habe versucht, mit lib libxml2 und libxslt zu installieren. Beide sind einwandfrei installiert, aber ich kann lxml immer noch nicht installieren.

Bei der letzten Installation musste ich die Entwicklertools auf Xcode aktivieren, aber da es auf Xcode 5 aktualisiert wurde, gibt es mir diese Option nicht mehr.

Weiß jemand, was ich tun muss?

David O'Regan
quelle
3
PS: Ich empfehle die Verwendung von: pip3.4 install lxmloder STATIC_DEPS=true pip3.4 install lxmlBefehlen, wenn Sie eine bestimmte Installation für Python3 anstreben (an Ihre Version anpassen, Bash-TAB-Vervollständigung ist Ihr Freund); Damit installieren Sie für die spezifische Version Ihres Zielprogramms, das diese / diese Bibliotheken verwendet. Ansonsten ist es einfach, 30 Minuten damit zu verbringen, die Bibliothek für den falschen Interpreter zu installieren ;-)
Phil L.
3
Stellen Sie sicher, dass Sie die richtige Antwort als Lösung markieren, damit andere Ihre Frage als Anleitung verwenden können, wenn sie das gleiche Problem haben :)
Parker

Antworten:

500

Sie sollten das Befehlszeilentool für xcode installieren oder aktualisieren. Versuchen Sie dies in einem Terminal:

xcode-select --install
Tinylee
quelle
24
Ich erhalte die Meldung "Die Software kann nicht installiert werden, da sie derzeit nicht auf dem Software Update-Server verfügbar ist."
Kelorek
7
Es ist erwähnenswert, dass Sie anscheinend "Die Software kann nicht installiert werden, da sie derzeit nicht auf dem Software Update-Server verfügbar ist" angezeigt werden. wenn die Tools bereits installiert sind.
Wombat
Ein paar Hinweise, wie man manuell überprüft, ob sie installiert sind - stackoverflow.com/a/20834890/255961
studgeek
1
Funktioniert gut am 10.10.3. Ich bin mir nicht sicher, warum andere cflags manipulieren müssen.
Eric Chen
1
Und arbeitete für mich nach dem Upgrade auf El Capitan (10.11).
Łukasz
193

Ich habe dieses Problem auf Yosemite durch Installieren und Verknüpfen libxml2sowie libxsltdurch Brauen gelöst :

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

Wenn Sie das Problem mit dieser Methode gelöst haben, sie aber zu einem späteren Zeitpunkt erneut angezeigt wird, müssen Sie dies möglicherweise vor den vier obigen Zeilen ausführen :

brew unlink libxml2
brew unlink libxslt

Wenn Sie mit Homebrew Berechtigungsfehler haben, insbesondere mit El Capitan, ist dies ein hilfreiches Dokument . Versuchen Sie im Wesentlichen, unabhängig von der OS X-Version Folgendes auszuführen:

sudo chown -R $(whoami):admin /usr/local
Markus Amalthea Magnuson
quelle
24
Die nützlichste Antwort. Es ist unglaublich, wie die xcode-select so viele Stimmen bekommt. Wenn Sie Brew verwenden, haben Sie xcode bereits vor langer Zeit ausgewählt oder installiert.
Marcos Eliziário Santos
5
@ MarcosEliziárioSantos Das Wort "installieren" in xcode-select --installist etwas irreführend. Ich stellte fest, dass ich nach dem Upgrade von Mavericks auf Yosemite xcode-select --installerneut ausgeführt werden musste, um ein Upgrade auf die Befehlszeilentools von Yosemite durchzuführen. Es löste (teilweise) Probleme, auf die ich stieß, und es wäre auf jeden Fall harmlos, redundant zu laufen.
Noach Magedman
2
@ MarcosEliziárioSantos wahrscheinlich, weil die Top-Antwort das Problem für die meisten Menschen behoben hat. Diese Lösung hat als Problemumgehung funktioniert, aber einige Sekunden später stieß ich auf ähnliche Probleme mit libmemcache. Die beste Antwort hat das Problem behoben. Jeder sollte diese Methode erst in Betracht ziehen, nachdem er zuerst die beste Antwort versucht hat.
Rafal Es
@ MarcosEliziárioSantos noch eine Sache - ich verwende Brew, aber es war eine Neuinstallation (ich hatte nur XCode über AppStore installiert, was ausreicht, um Homebrew zu installieren).
Rafal Es
Außerdem ruiniert Homebrew immer meine Berechtigungen. Ich habe die Xcode-Lösung verwendet.
Sudo
102

Sie können Ihr Problem lösen, indem Sie dies in der Befehlszeile ausführen:

 STATIC_DEPS=true pip install lxml

Es hat mir sicher geholfen. Erläuterungen zu Dokumenten

André Augusto
quelle
Ich danke dir sehr. Das hat mir unglaublich viel Zeit gespart.
Lukecampbell
Funktioniert gut unter OSX 10.9.5
user9869932
Vielen Dank! Funktioniert gut unter MacOS
10.14
48

Ich habe die meisten der oben genannten Lösungen ausprobiert, aber keine davon hat für mich funktioniert. Ich verwende Yosemite 10.10. Die einzige Lösung, die für mich funktioniert hat, war die Eingabe in das Terminal:

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

BEARBEITEN: Wenn Sie virtualenv verwenden, wird das sudo am Anfang nicht benötigt.

robinsj
quelle
1
Diese Lösung funktioniert auch bei Mavericks! Wenn Sie virtualenvkein Sudo verwenden, wird es benötigt.
Mauro Baraldi
Meins wird immer noch ausgegeben, OSError: [Errno 1] Operation not permitted: '/usr/bin/build'obwohl der Befehl als sudo ausgeführt wird. Irgendwelche Ideen?
PLPeeters
@PLPeeters Welche Python-Version verwenden Sie und welche Betriebssystemversion?
Robinsj
Ich bin in der Beta von El Capitan (das ist also 10.11) und verwende dafür Python 2.7. Ich vermute, es könnte etwas mit El Capitan zu tun haben ...
PLPeeters
Du bist ein Lebensretter. El Capitan funktioniert, in Virtualenv wird kein Sudo benötigt. Vielen Dank!
Jacoor
24

Das hat mich auch schon eine Weile gestört. Ich kenne die Interna nicht genug über Python Distutils usw., aber der Include-Pfad hier ist falsch. Ich habe den folgenden hässlichen Hack gemacht, um mich festzuhalten, bis die Python-Lxml-Leute die richtige Lösung finden können.

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
jdkoftinoff
quelle
19

Globale Installation ... 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
Samy Vilar
quelle
1
Dies funktionierte für mich, musste zuerst die xcode dev tools aktualisieren mit: xcode-select --install
erickthered
Das hat den Trick gemacht. Ich hatte bereits xcode-Befehlszeilentools installiert, aber es sieht so aus, als müsste es aktualisiert werden.
Steven Mercatante
12

Installationsanweisungen auf http://lxml.de/installation.html erklären:

Deaktivieren Sie die C-Compiler-Optimierungen, indem Sie die Umgebungsvariable CFLAGS festlegen, um die Erstellung in Testumgebungen zu beschleunigen, z. B. auf einem Server mit kontinuierlicher Integration.

CFLAGS="-O0" pip install lxml
Panchicore
quelle
Hat für mich einwandfrei funktioniert. +1
João Pereira
11

Keines der oben genannten Verfahren hat in 10.9.2 für mich funktioniert, da die Kompilierung mit folgendem Fehler beendet wird:

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

Was tatsächlich zu einer saubersten Lösung führt (siehe weitere Details in [1]):

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

pip install lxml

oder folgend bei globaler Installation

sudo pip install lxml

[1] Clang-Fehler: Unbekanntes Argument: '-mno-fused-madd' (Fehler bei der Installation des Python-Pakets)

Okigan
quelle
Vielen Dank. das hat mir geholfen. Wunschantworten können manchmal Meta über die Betriebssystemversionen enthalten.
FrankV
Bei der Installation global müssen Sie möglicherweise /etc/sudoersmit sudo visudoden Umgebungsvariablen zu erhalten.
Swandog
10
xcode-select --install
sudo easy_install pip
sudo pip install lxml
RemembranceNN
quelle
Es ist interessant, dass einige Leute sudodie Pip installieren mussten, andere nicht. (Ich hatte Berechtigungsprobleme beim direkten Ausführen von pip install und musste sudo.) Ich kann nur davon ausgehen, dass ich in der fernen Vergangenheit etwas Python-bezogenes als root installiert habe, das bestimmte (System-) Ordner als root anstatt als ich selbst erstellt hat.
Noach Magedman
Das hat bei mir funktioniert, ich hatte gerade einen neuen Mac für die Arbeit eingerichtet und obwohl ich XCode installiert habe, habe ich die Befehlszeilentools wohl nicht installiert? Wie auch immer, es laufen zu lassen, die Tools installieren zu lassen und dann einfach 'pip3.4 install lxml --user' erneut auszuführen, kein sudo oder EXPORTIEREN von Shell-Variablen.
Mgandi
Dies funktionierte perfekt auf Yosemite in einer virtuellen Umgebung. Ich brauchte es aber nicht sudo.
Null
@NoachMagedman Ich installiere in einer virtuellen Umgebung, daher kann ich sudo nicht verwenden. Wenn ich sudo verwenden würde, würde es es in meine globalen Python-Pakete installieren, was ich zu vermeiden versuche.
Esteban
6

Ich habe dieses Problem behoben, Yosemiteindem ich die folgenden Befehle ausgeführt habe:

xcode-select install #this may take several minutes.
pip install lxml
Heilige
quelle
Ich hatte genug von Homebrew, das auf meinem alten System ein Wirrwarr von Dingen verursachte, und schwor mir, es nicht mit meinem neuen Yosemite 10.10.2-Setup zu verwenden. Ich habe bereits das gesamte Xcode-Paket installiert, sodass xcode-select installich es nicht benötige . Ich habe die neuesten libxml2- und libxlst-Pakete heruntergeladen (für lxml erforderlich), aber vor der Installation dachte ich, ich würde prüfen, ob Yosemite diese Dateien bereits irgendwo hat. Ich habe eine virtuelle Umgebung erstellt (mit virtualenvwrapper) und dann habe ich pip install lxmllxml fehlerfrei installiert. Ich habe lxml getestet, indem ich die Homepage von Google abgekratzt habe, und das hat gut funktioniert.
7stud
4

Bei Homebrew ist libxml2 ausgeblendet, um das System libxml2 nicht zu beeinträchtigen. Daher muss pip ein wenig geholfen werden, um es zu finden.

Mit Bash:

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

Mit Fisch:

env LDFLAGS=-L(brew --prefix libxml2)/lib CPPFLAGS=-I(brew --prefix libxml2)/include/libxml2 pip install --user lxml
Gaëtan Lehmann
quelle
2

OSX 10.9.2

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

Ich habe alle Antworten auf dieser Seite ausprobiert, keine davon hat für mich funktioniert. Ich verwende OS X Version 10.9.2

Aber das funktioniert definitiv ... wie ein Zauber:

ARCHFLAGS = -Wno-error = nicht verwendetes Befehlszeilenargument-Hard-Error-in-Future pip install lxml

Hexatonisch
quelle
1
Dies deaktiviert lediglich harte Fehler für nicht verwendete Argumente, die ich bei vielen anderen Bibliothekskompilierungen unter OS X Mavericks festgestellt habe. Ich fand es nützlich, die Zeile zu meinem Bash-Profil hinzuzufügen, damit ich sie nicht jedes Mal nachschlagen muss, wenn ich darauf stoße. export ARCHFLAGS="-Wno-error=unused-command-line-argument-hard-error-in-future"Oder Sie können Architekturtypen explizit wie export ARCHFLAGS="-arch x86_64 -arch i386 -Wno-error=unused-command-line-argument-hard-error-in-future"
folgt
2

Leider xcode-select --installhat es bei mir nicht funktioniert, da ich bereits die neueste Version hatte.

Es ist sehr seltsam, aber ich habe das Problem gelöst, indem ich XCode geöffnet und die Allgemeinen Geschäftsbedingungen akzeptiert habe. Beim erneuten Ausführen wurden danach pip install lxmlkeine Fehler zurückgegeben.

Adam Sheridan
quelle
1

Nach erfolgreicher Installation von pip (lxml 3.6.4) wurde beim Importieren des Moduls lxml.etree eine Fehlermeldung angezeigt.

Ich habe endlos gesucht, um dies als Voraussetzung für Scrapy zu installieren, und alle Optionen ausprobiert, aber schließlich hat dies für mich funktioniert (Mac OSX 10.11 Python 2.7):

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

Die ältere Version von lxml scheint mit dem etree-Modul zu funktionieren.

Pip kann die angegebene Version eines Pakets häufig ignorieren, beispielsweise wenn Sie die neuere Version im Pip-Cache haben, also die easy_install. Die '-2.7'Option ist für die Python-Version. Lassen Sie diese Option weg, wenn Sie für Python 3.x installieren.

Ryszard Cetnarski
quelle
1

In meinem Fall muss ich Kaspersky Antivirus vor der Installation von lxml herunterfahren, indem ich :

pip install lxml
Tho
quelle
0

Ich verwende OSX 10.9.2 und erhalte den gleichen Fehler.

Die Installation der XCode-Befehlszeilentools hilft für diese bestimmte Version von OSX nicht.

Ich denke, ein besserer Ansatz, um dies zu beheben, ist die Installation mit dem folgenden Befehl:

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

Dies ähnelt dem Fix von jdkoftinoff, verändert Ihr System jedoch nicht dauerhaft.

Valo
quelle
0

Ich habe die gleiche Frage beantwortet und nach Tagen der Arbeit dieses Problem auf meinem OS X 10.9.4 mit Python 3.4.1 gelöst.

Hier ist meine Lösung,

Laut der Installation von lxml von lxml.de

Ein Macport von lxml ist verfügbar. Versuchen Sie etwas wie Port installieren py25-lxml

Wenn Sie MacPort nicht haben, installieren Sie es von MacPort.org . Es ist sehr leicht. Möglicherweise benötigen Sie auch einen Compiler, um die XCode-Kompilierungswerkzeuge zu installierenxcode-select --install

Zuerst habe ich meinen Port auf die neueste Version aktualisiert über sudo port selfupdate,

Dann sudo port install libxml2tippe ich einfach und einige Minuten später sollte libxml2 erfolgreich installiert sein. Möglicherweise müssen Sie auch libxsltlxml installieren. Verwenden Sie zum Installieren von libxslt : sudo port install libxslt.

Jetzt einfach tippen pip install lxml, es sollte gut funktionieren.

Fische
quelle
0

Fügen Sie vor dem Kompilieren den Pfad zu xmlversion.h in Ihre Umgebung ein.

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

Stellen Sie jedoch sicher, dass sich in dem von mir angegebenen Pfad die Datei xmlversion.h befindet. Dann,

$ python setup.py install
knittledan
quelle
0

Nach langem Zerreißen der Haare und Zähneknirschen habe ich xcode mit pip deinstalliert und ausgeführt:

easy_install lxml

Und alles war gut.

duhaime
quelle
-1

Versuchen:

% STATIC_DEPS=true pip install lxml

Oder:

% STATIC_DEPS=true sudo pip install lxml

Es klappt!

Geek4IT
quelle
Duplikat von Andres Antwort.
Kar