Nie można zainstalować Lxml na Mac OS X 10.9


234

Chcę zainstalować Lxml, aby móc zainstalować Scrapy.

Kiedy zaktualizowałem dzisiaj komputer Mac, nie pozwoliło mi to ponownie zainstalować pliku LXML, pojawia się następujący błąd:

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

Próbowałem użyć brew do zainstalowania libxml2 i libxslt, oba były w porządku, ale nadal nie mogę zainstalować lxml.

Podczas ostatniej instalacji musiałem włączyć narzędzia programistyczne na Xcode, ale ponieważ został zaktualizowany do Xcode 5, nie daje mi już takiej opcji.

Czy ktoś wie, co muszę zrobić?


3
PS: Polecam użycie: pip3.4 install lxmllub STATIC_DEPS=true pip3.4 install lxmlpoleceń, jeśli celujesz w konkretną instalację dla Python3 (dostosuj się do twojej wersji, ukończenie bash TAB jest twoim przyjacielem); tak, aby zainstalować dla określonej wersji programu docelowego, który korzysta z tej / tych bibliotek. W przeciwnym razie łatwo wydać 30 mln na instalację biblioteki lib dla niewłaściwego tłumacza ;-)
Phil L.,

3
Pamiętaj, aby zaznaczyć prawidłową odpowiedź jako rozwiązanie, aby inni mogli wykorzystać twoje pytanie jako wskazówkę, gdy mają ten sam problem :)
Parker,

Odpowiedzi:


500

Powinieneś zainstalować lub zaktualizować narzędzie wiersza poleceń dla xcode. Wypróbuj to w terminalu:

xcode-select --install

24
Pojawia się komunikat „Nie można zainstalować oprogramowania, ponieważ nie jest ono obecnie dostępne z serwera aktualizacji oprogramowania”.
kelorek,

7
Warto zauważyć, że pojawia się komunikat „Nie można zainstalować oprogramowania, ponieważ nie jest ono obecnie dostępne z serwera aktualizacji oprogramowania”. gdy narzędzia są już zainstalowane.
wombat

Kilka uwag na temat ręcznego sprawdzania, czy są zainstalowane - stackoverflow.com/a/20834890/255961
studgeek

1
Działa dobrze w 10.10.3. Nie jestem pewien, dlaczego inni muszą manipulować flagami.
Eric Chen,

1
I pracował dla mnie po aktualizacji do El Capitan (10.11).
Łukasz

193

Rozwiązałem ten problem na Yosemite, instalując i łącząc libxml2oraz libxsltpoprzez brew:

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

Jeśli problem został rozwiązany za pomocą tej metody, ale pojawia się ponownie później, może być konieczne uruchomienie go przed czterema powyższymi wierszami:

brew unlink libxml2
brew unlink libxslt

Jeśli masz błędy uprawnień w Homebrew, zwłaszcza na El Capitan, jest to pomocny dokument . Zasadniczo, niezależnie od wersji OS X, spróbuj uruchomić:

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

24
Najbardziej przydatna odpowiedź. To niesamowite, jak xcode-select zdobywa tyle głosów. Jeśli używasz naparu, już dawno wybrałeś kod lub zainstalowałeś xcode.
Marcos Eliziário Santos

5
@ MarcosEliziárioSantos Słowo „zainstaluj” xcode-select --installjest nieco mylące. Odkryłem, że po aktualizacji z Mavericks do Yosemite musiałem xcode-select --installponownie uruchomić, aby zaktualizować do narzędzi wiersza poleceń Yosemite. To (częściowo) rozwiązało problemy, na które się natknąłem, a w każdym razie zbędne byłoby bieganie nadmiarowe.
Noach Magedman,

2
@ MarcosEliziárioSantos prawdopodobnie dlatego, że najlepsza odpowiedź rozwiązała problem dla większości ludzi. To rozwiązanie działało jako obejście, ale kilka sekund później napotkałem podobne problemy z libmemcache. Najlepsza odpowiedź rozwiązała problem. Każdy powinien rozważyć tę metodę dopiero po wypróbowaniu pierwszej odpowiedzi.
Rafal Es

@ MarcosEliziárioSantos jeszcze jedno - używam naparu, ale była to nowa instalacja (miałem tylko XCode zainstalowany przez AppStore, co wystarczy, aby zainstalować homebrew).
Rafal Es

Ponadto Homebrew zawsze rujnuje moje uprawnienia. Użyłem rozwiązania Xcode.
sudo

102

Możesz rozwiązać problem, uruchamiając to w wierszu poleceń:

 STATIC_DEPS=true pip install lxml

To na pewno mi pomogło. Objaśnienia do dokumentów


Dziękuję bardzo. Zaoszczędziło mi to niesamowicie dużo czasu.
lukecampbell

Działa dobrze w systemie OSX
10.9.5

Dzięki! Działa dobrze w systemie macOS 10.14
Jolvera

48

Wypróbowałem większość powyższych rozwiązań, ale żadne z nich nie działało dla mnie. Używam Yosemite 10.10, jedynym rozwiązaniem, które mi pomogło, było wpisanie tego w terminalu:

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

EDYCJA: Jeśli używasz virtualenv, sudo na początku nie jest potrzebne.


1
To rozwiązanie działa również na Mavericks! Jeśli używasz virtualenvsudo nie jest potrzebne.
Mauro Baraldi,

Mój nadal wyświetla dane wyjściowe OSError: [Errno 1] Operation not permitted: '/usr/bin/build'pomimo uruchomienia polecenia sudo. Jakieś pomysły?
PLPeeters

@PLPeeters Którą wersję Pythona używasz i którą wersję systemu operacyjnego?
robinsj

Korzystam z wersji beta El Capitan (czyli 10.11) i używam do tego Pythona 2.7. Domyślam się, że to może mieć coś wspólnego z El
Capitanem

Jesteś ratownikiem życia. El Capitan działa, w virtualenv nie jest potrzebne sudo. Dzięki!
jacoor

24

Od dłuższego czasu mnie to niepokoi. Nie znam wystarczająco elementów wewnętrznych na temat distutils w Pythonie itp., Ale ścieżka dołączania tutaj jest nieprawidłowa. Zrobiłem następujący brzydki hack, aby mnie zatrzymać, dopóki ludzie lxml w Pythonie nie będą w stanie naprawić.

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

Instalowanie globalnie ... 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
To działało dla mnie, musiałem najpierw zaktualizować narzędzia programistyczne xcode za pomocą: xcode-select --install
erickthered

To załatwiło sprawę. Miałem już zainstalowane narzędzia wiersza polecenia xcode, ale wygląda na to, że trzeba je było zaktualizować.
Steven Mercatante

12

instrukcje instalacji na http://lxml.de/installation.html wyjaśniają:

Aby przyspieszyć kompilację w środowiskach testowych, np. Na serwerze ciągłej integracji, wyłącz optymalizacje kompilatora C, ustawiając zmienną środowiskową CFLAGS:

CFLAGS="-O0" pip install lxml

Działa dla mnie bezbłędnie. +1
João Pereira

11

Żadne z powyższych nie działało dla mnie w wersji 10.9.2, ponieważ kompilacja nie działa z następującym błędem:

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

Co faktycznie prowadzi do najczystszego rozwiązania (zobacz więcej szczegółów w [1]):

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

pip install lxml

lub następujące, jeśli instalujesz globalnie

sudo pip install lxml

[1] błąd clang: nieznany argument: „-mno-fused-madd” (błąd instalacji pakietu python)


dzięki. to mi pomogło. życzenia odpowiedzi mogą czasami zawierać meta o wersjach systemu operacyjnego.
frankV

W przypadku instalacji globalnej może być konieczne użycie opcji /etc/sudoersw sudo visudocelu zachowania zmiennych środowiskowych.
swandog

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

To interesujące, że niektórzy ludzie potrzebowali sudoinstalacji pip, a inni nie. (Miałem problemy z uprawnieniami podczas bezpośredniego instalowania pip i musiałem sudo.) Mogę tylko założyć, że w odległej przeszłości zainstalowałem coś związanego z pythonem jako root, co spowodowało, że niektóre (systemowe) foldery były jako root, a nie jak ja.
Noach Magedman,

To działało dla mnie, właśnie skonfigurowałem nowego Maca do pracy i chociaż zainstalowałem XCode, to chyba nie zainstalowałem narzędzi wiersza poleceń? W każdym razie uruchomienie tego, zainstalowanie narzędzi, a następnie ponowne uruchomienie „pip3.4 install lxml --user” działało, bez sudo lub EKSPORTU jakichkolwiek zmiennych powłoki.
mgrandi,

Działa to doskonale na Yosemite w virtualenv. Nie potrzebowałem sudojednak.
zero

@NoachMagedman Instaluję się w środowisku wirtualnym, więc nie mogę używać sudo. Gdybym użył sudo, zainstalowałbym go w moich globalnych pakietach Pythona, czego staram się unikać.
Esteban

6

Rozwiązałem ten problem Yosemite, uruchamiając następujące polecenia:

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

Miałem dość homebrew, tworząc splątany bałagan rzeczy na starym systemie, więc ślubowałem, że nie będę go używać z moją nową konfiguracją Yosemite 10.10.2. Zainstalowałem już cały pakiet Xcode, więc nie ma takiej potrzeby xcode-select install. Pobrałem najnowsze pakiety libxml2 i libxlst (wymagane dla lxml), ale przed ich zainstalowaniem pomyślałem, że sprawdzę, czy Yosemite już gdzieś ma te pliki. Utworzyłem wirtualną env (używając virtualenvwrapper), a potem zrobiłem to pip install lxmli bez problemu zainstalowałem lxml. Przetestowałem lxml poprzez zeskrobanie strony głównej Google, i to działało dobrze.
7stud

4

W przypadku homebrew libxml2 jest ukryty, aby nie zakłócał działania systemu libxml2, więc pip musi być trochę pomógł, aby go znaleźć.

Z uderzeniem:

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

Z rybami:

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

Próbowałem wszystkich odpowiedzi na tej stronie, żadna z nich nie działała dla mnie. Korzystam z systemu OS X w wersji 10.9.2

Ale to zdecydowanie działa .... jak urok:

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


1
Wyłącza to tylko trudne błędy nieużywanych argumentów, które napotkałem podczas wielu innych kompilacji bibliotek w systemie OS X Mavericks. Przydało mi się dodanie linii do mojego profilu bash, więc nie muszę jej sprawdzać za każdym razem, gdy ją napotykam: export ARCHFLAGS="-Wno-error=unused-command-line-argument-hard-error-in-future"lub możesz dodać typy architektury wyraźnie takie:export ARCHFLAGS="-arch x86_64 -arch i386 -Wno-error=unused-command-line-argument-hard-error-in-future"
Michiel Kauw-A-Tjoe

2

Niestety xcode-select --installnie zadziałało, ponieważ miałem już najnowszą wersję.

To bardzo dziwne, ale rozwiązałem problem, otwierając XCode i akceptując Warunki. Ponowne uruchomienie pip install lxmlnie zwróciło żadnych błędów po.


1

Po pomyślnej instalacji z pip (lxml 3.6.4) otrzymałem błąd podczas importowania modułu lxml.etree.

Nieustannie szukałem tego, aby zainstalować to jako narzędzie do złomowania i wypróbowałem wszystkie opcje, ale w końcu to zadziałało dla mnie (Mac OSX 10.11 Python 2.7):

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

Starsza wersja lxml wydaje się działać z modułem etree.

Pip często może zignorować określoną wersję pakietu, na przykład gdy masz nową wersję w pamięci podręcznej pip, a więc easy_install. '-2.7'Opcja dla wersji Pythona, pominąć tego, jeśli są instalowane dla Pythona 3.x


1

W moim przypadku muszę zamknąć Kaspersky Antivirus przed zainstalowaniem lxml przez:

pip install lxml

0

Używam OSX 10.9.2 i pojawia się ten sam błąd.

Instalacja narzędzi wiersza polecenia XCode nie pomaga w tej konkretnej wersji OSX.

Myślę, że lepszym rozwiązaniem tego problemu jest instalacja za pomocą następującego polecenia:

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

Jest to podobne do poprawki jdkoftinoff, ale nie zmienia systemu na stałe.


0

Znalazłem to samo pytanie i po wielu dniach pracy rozwiązałem ten problem na moim systemie OS X 10.9.4 z Pythonem 3.4.1.

Oto moje rozwiązanie

Zgodnie z instalacją lxml z lxml.de,

Dostępny jest makport lxml. Spróbuj czegoś takiego jak port install py25-lxml

Jeśli nie masz MacPort, zainstaluj go z MacPort.org . To całkiem proste. Możesz także potrzebować kompilatora, aby zainstalować narzędzia kompilujące XCode, użyjxcode-select --install

Najpierw zaktualizowałem mój port do najnowszej wersji przez sudo port selfupdate,

Następnie piszę sudo port install libxml2i kilka minut później powinieneś zobaczyć instalację libxml2 zakończoną powodzeniem. Prawdopodobnie konieczne może być także libxsltzainstalowanie lxml. Aby zainstalować libxslt, przeznaczenie: sudo port install libxslt.

Teraz po prostu wpisz pip install lxml, powinno działać dobrze.


0

przed kompilacją dodaj ścieżkę do pliku xmlversion.h w swoim środowisku.

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

Ale upewnij się, że podana przeze mnie ścieżka zawiera plik xmlversion.h. Następnie,

$ python setup.py install



0

Po wielu łzach włosów i zgrzytaniu zębami odinstalowałem xcode za pomocą pip i uruchomiłem:

easy_install lxml

I wszystko było dobrze.


-1

Próbować:

% STATIC_DEPS=true pip install lxml

Lub:

% STATIC_DEPS=true sudo pip install lxml

To działa!


Duplikat odpowiedzi Andre.
Kar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.