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ć?

David O'Regan
źródło
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
tinylee
źródło
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
Markus Amalthea Magnuson
źródło
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

André Augusto
źródło
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.

robinsj
źródło
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
jdkoftinoff
źródło
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
Samy Vilar
źródło
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
panchicore
źródło
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)

okigan
źródło
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
PamięciNN
źródło
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
holys
źródło
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
Gaëtan Lehmann
źródło
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
źródło
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

Heksatoniczny
źródło
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.

Adam Sheridan
źródło
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

Ryszard Cetnarski
źródło
1

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

pip install lxml
Chociaż
źródło
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.

valo
źródło
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.

Ryby
źródło
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
knittledan
źródło
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.

duhaime
źródło
-1

Próbować:

% STATIC_DEPS=true pip install lxml

Lub:

% STATIC_DEPS=true sudo pip install lxml

To działa!

Geek4IT
źródło
Duplikat odpowiedzi Andre.
Kar