Jak zainstalować lxml na Ubuntu

442

Mam problem z instalacją lxml z easy_install na Ubuntu 11.

Kiedy piszę $ easy_install lxml, otrzymuję:

Searching for lxml
Reading http://pypi.python.org/simple/lxml/
Reading http://codespeak.net/lxml
Best match: lxml 2.3
Downloading http://lxml.de/files/lxml-2.3.tgz
Processing lxml-2.3.tgz
Running lxml-2.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-7UdQOZ/lxml-2.3/egg-dist-tmp-GacQGy
Building lxml version 2.3.
Building without Cython.
ERROR: /bin/sh: xslt-config: not found

** make sure the development packages of libxml2 and libxslt are installed **

Using build configuration of libxslt 
In file included from src/lxml/lxml.etree.c:227:0:
src/lxml/etree_defs.h:9:31: fatal error: libxml/xmlversion.h: No such file or directory
compilation terminated.

Wydaje się, że libxsltalbo libxml2nie jest zainstalowany. Próbowałem postępować zgodnie z instrukcjami na http://www.techsww.com/tutorials/libraries/libxslt/installation/installing_libxslt_on_ubuntu_linux.php i http://www.techsww.com/tutorials/libraries/libxml/installation/installing_libxml_on_ubuntu_linux. php bez powodzenia.

Jeśli spróbuję wget ftp://xmlsoft.org/libxml2/libxml2-sources-2.6.27.tar.gz, dostanę

<successful connection info>
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /libxml2 ... done.
==> SIZE libxml2-sources-2.6.27.tar.gz ... done.
==> PASV ... done.    ==> RETR libxml2-sources-2.6.27.tar.gz ... 
No such file `libxml2-sources-2.6.27.tar.gz'.

Jeśli spróbuję najpierw drugiego, dostanę się ./configure --prefix=/usr/local/libxslt --with-libxml-prefix=/usr/local/libxml2i ostatecznie to się nie powiedzie z:

checking for libxml libraries >= 2.6.27... configure: error: Could not find libxml2 anywhere, check ftp://xmlsoft.org/.

Próbowałem obie wersje 2.6.27i 2.6.29od libxml2bez różnicy.

Nie pozostawiając żadnego kamienia odwróconego, udało mi się sudo apt-get install libxml2-dev, ale to nic nie zmienia.

Eric Wilson
źródło

Odpowiedzi:

950

Ponieważ korzystasz z Ubuntu, nie przejmuj się tymi pakietami źródłowymi. Wystarczy zainstalować te pakiety programistyczne za pomocą apt-get.

apt-get install libxml2-dev libxslt1-dev python-dev

Jeśli jednak jesteś zadowolony z możliwie starszej wersji lxml, możesz spróbować

apt-get install python-lxml

i skończyć z tym. :)

AKX
źródło
51
tę odpowiedź należy dodać do instrukcji instalacji lxml :) dzięki +1
Boaz
43
Po uruchomieniu apt-get install libxml2-dev libxslt-devmożesz po prostueasy_install lxml
Bob Jansen
11
w najnowszych dystrybucjach podobnych do Ubuntu, musisz zainstalować libxslt1-dev zamiast libxslt-dev
Jose A. Martín
21
Przynajmniej na Ubuntu 14.04 musisz także zainstalować pakiet zlib1g-dev.
Christian Berendt,
3
Na Ubuntu 16.04 również zlib1g-devjest konieczne. Bez tego mam błąd /usr/bin/ld: cannot find -lz.
Jabba,
111

Musiałem także zainstalować lib32z1-dev, zanim skompiluje się lxml (Ubuntu 13.04 x64).

sudo apt-get install lib32z1-dev

Lub wszystkie wymagane pakiety razem:

sudo apt-get install libxml2-dev libxslt-dev python-dev lib32z1-dev
Druska
źródło
9
+1. Ten pakiet był wymagany nawet po zainstalowaniu wszystkich innych wymienionych pakietów.
Jayesh Bhoot
1
tak, też potrzebowałem tego w dniu 13.04
mwjackson
3
Dlaczego potrzebuje nagłówków pakietu lib32? Może zlib1g-dev też by działał?
Pepijn
1
zlib1g-dev był potrzebny na Ubuntu 13.04
Zelo
6
Potrzebny również w wersji 14.04 64-bitowej.
Kristinn Örn Sigurðsson
43

Jak @Pepijn skomentował odpowiedź @Druska, w Ubuntu 13.04 x64 nie ma potrzeby używania lib32z1-dev, wystarczy zlib1g-dev:

sudo apt-get install libxml2-dev libxslt-dev python-dev zlib1g-dev
JimmyYe
źródło
16

Zainstalowałem lxml z pipem w Vagrant, używając Ubuntu 14.04 i miałem ten sam problem. Mimo że wszystkie wymagania były zainstalowane, ciągle pojawiał się ten sam błąd. Okazało się, że moja maszyna wirtualna domyślnie miała mało pamięci. Przy 1024 MB wszystko działa dobrze.

Dodaj to do pliku VagrantFile, a lxml powinien poprawnie skompilować / zainstalować:

config.vm.provider "virtualbox" do |vb|
  vb.memory = 1024
end

Dzięki sixhobbit za podpowiedź (patrz: nie można zainstalować lxml na Ubuntu 12.04 ).

Chris
źródło
To zadziałało dla mnie. Dzięki. Powiedział, że kompilacja zakończyła się niepowodzeniem ze statusem 4, na wypadek, gdyby to pomogło każdemu innemu.
Kurtis,
ta odpowiedź nie ma nic wspólnego z pytaniem OP
Corey Goldberg
10

Dla Ubuntu 14.04

sudo apt-get install python-lxml

pracował dla mnie.

Przebrnąć
źródło
7
To złe wieści. Z tego pytania zyskałem ponad 1000 powtórzeń, jeśli naprawili, że przestanie się wyświetlać ... 😊
Eric Wilson
9

Krok 1

Zainstaluj najnowsze aktualizacje Pythona za pomocą tego polecenia.

sudo apt-get install python-dev

Krok 2

Dodaj pierwszą zależność libxml2 w wersji 2.7.0 lub nowszej

sudo apt-get install libxml2-dev

Krok 3

Dodaj drugą zależność libxslt w wersji 1.1.23 lub nowszej

sudo apt-get install libxslt1-dev

Krok 4

Najpierw zainstaluj narzędzie do zarządzania pakietami pip . i uruchom to polecenie.

pip install lxml

W razie wątpliwości kliknij tutaj

Simplans
źródło
8

Po zainstalowaniu pakietów wspomnianych przez AKX nadal miałem ten sam problem. Rozwiązałem to za pomocą

apt-get install python-dev
bcoughlan
źródło
6

W przypadku Ubuntu 12.04.3 LTS (Precise Pangolin) musiałem zrobić:

apt-get install libxml2-dev libxslt1-dev

(Uwaga „1” w libxslt1-dev)

Potem właśnie zainstalowałem lxml z pip / easy_install.

Gonz
źródło
2

Od Ubuntu 18.4 (Bionic Beaver) zaleca się stosowanie apt zamiast apt-get, ponieważ ma on znacznie lepszą formę strukturalną.

sudo apt install libxml2-dev libxslt1-dev python-dev

Jeśli jednak jesteś zadowolony z możliwie starszej wersji lxml, możesz spróbować

sudo apt install python-lxml
Rarblack
źródło
1

Wiele odpowiedzi tutaj jest raczej starych,
dzięki wskaźnikowi z @Simplans ( https://stackoverflow.com/a/37759871/417747 ) i głównej ...

Co dla mnie zadziałało (Ubuntu bionic):

sudo apt-get install python3-lxml  

(+ sudo apt-get install libxml2-dev libxslt1-devZainstalowałem wcześniej, ale nie jestem pewien, czy nadal jest to wymóg)

NSGaga-przeważnie nieaktywny
źródło
1
Tak, stare odpowiedzi na stare pytanie. To znaczy, byłem na Ubuntu 11, kiedy zapytałem!
Eric Wilson
tak, wątpię, czy byłbyś w stanie zapytać o to więcej tutaj (zostałby przeniesiony do Ubuntu itp.), ale wciąż wiele z nich szuka. I wątpię, czy ktoś nadal używa Ubuntu 11 :). A potem te stare wersje linuksowe i pakiety niezgodne, mam nadzieję, że któregoś dnia poprawi się.
NSGaga-głównie-nieaktywny
0

Najpierw zainstaluj python-lxmlpakiet Ubuntu i jego zależności:

sudo apt-get install python-lxml

Następnie użyj pipdo aktualizacji do najnowszej wersji lxml dla Python:

pip install lxml
Joseph
źródło
tylko odpowiedzi na kod są niezadowolone. Dodaj wyjaśnienie
Manos Nikolaidis
Chociaż ta odpowiedź może być poprawna, dodaj wyjaśnienie. Nadanie podstawowej logice jest ważniejsze niż podanie kodu, ponieważ pomaga OP i innym czytelnikom samodzielnie naprawić ten i podobne problemy.
CodeMouse92,
Oddawanie głosu, ponieważ nic nowego nie jest dodawane do pytania, które ma już kilka dobrych odpowiedzi.
Eric Wilson