2014-10-14 27 views
5

Im próbuje zainstalować lxml w virtualenv z sudo pip install lxml a także sudo pip install --upgrade lxml ale otrzymuję następujący w obu przypadkach:Nie można zainstalować lxml w python2.7

x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z, 
relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes  
-D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat 
-Werror=format-security build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -lxslt 
-lexslt -lxml2 -lz -lm -o build/lib.linux-x86_64-2.7/lxml/etree.so 

/usr/bin/ld: cannot find -lz 

collect2: error: ld returned 1 exit status 
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 

---------------------------------------- 
Cleaning up... 
Command /usr/bin/python -c "import setuptools, 
tokenize;__file__='/tmp/pip_build_root/lxml/setup.py'; 
exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), 
__file__, 'exec'))" install --record /tmp/pip-nmFOYf-record/install-record.txt 
--single-version-externally-managed --compile failed with error code 1 in 
/tmp/pip_build_root/lxml 
Storing debug log for failure in /root/.pip/pip.log 

Próbowałem wszystkie zamieszczone rozwiązania, które here oznacza to, że mam libxml2-dev, libxslt-dev i python-dev zainstalowane i ja również zainstalowany build-essential
jestem obecnie systemem Linux Mint 17 Debiana w których używa apt-get jako menedżera pakietów.
python-lxml został już zainstalowany.

+1

Dlaczego używasz 'sudo' w virtualenv? Czy utworzyłeś virtualenv jako root? Jeśli tak, dlaczego? Czy próbujesz zainstalować go do pakietów systemowych, nawet jeśli znajdujesz się w virtualenv? Jeśli tak, dlaczego nie zrobić tego spoza virtualenv? – abarnert

+0

@abarnert Cóż, po raz pierwszy zrobiłem to bez sudo, wtedy próbowałem zainstalować LXML na całym świecie, ale nie działał. – helado

+0

Po prostu losowe miksowanie virtualenv i globalnych instalacji z i bez sudo doprowadzi do złamanego virtualenv z przykręconymi uprawnieniami. Nie rób tego. – abarnert

Odpowiedz

7

lxml zależy od różnych bibliotek C i trzeba mieć zainstalowane te biblioteki C-tym ich plików rozwojowych (nagłówki, .so lub .a bibliotek, itp.) - do budowy lxml. Dokumenty installation wyjaśniają, jakie wymagania wstępne musisz zbudować na konkretnej platformie.


Ten błąd:

/usr/bin/ld: cannot find -lz 

... Oznacza to, że warunkiem tracisz jest libz, aka zlib.

Ponieważ nie jesteś na Windows, to bardzo prawdopodobne, że rzeczywiście nie mają zlib w ogóle ... ale całkiem prawdopodobne, że nie masz pliki rozwoju dla zlib. Na niektórych platformach, w szczególności wielu dystrybucjach linuksowych, pakiety są zwykle dzielone na osobne części. Na przykład części wymagane w czasie wykonywania zlib mogą znajdować się w pakiecie o nazwie zlib, natomiast części potrzebne do zbudowania innych programów, które wymagają zlib w pakiecie o nazwie zlib-dev lub zlib-devel. Dokładne szczegóły zależą od Twojej dokładnej platformy.

W takiej sytuacji, jeśli nie masz pliki rozwoju zlib, to prawdopodobnie nie masz pliki rozwoju libxml2 lub libxslt albo, bo nie wiem o dowolnej platformie których instalacja tych nie byłby ciągnięty w plikach zlib.

W każdym razie, ponieważ nie powiedziałeś nam, na jakiej platformie jesteś (i dystrybucji, czy linuksa), nie wiem, jakiego menedżera pakietów użyć, jakie są nazwy pakietów itp., Ale rób wszystko, co jest odpowiednie dla twojej platformy.


również:

I already have python-lxml installed

Naprawdę nie powinien zainstalować ten sam pakiet zarówno z menedżera pakietów swojej dystrybucji oraz z pip; to świetny sposób na zmylenie siebie.

Ale w każdym razie najprawdopodobniej zainstalowałeś python-lxml z pakietu binarnego, a nie ze źródła, co oznacza, że ​​nie potrzebujesz wymagań kompilacji. Teraz próbujesz zbudować go ze źródła, co oznacza, że ​​tak.

+0

Dziękuję za wczesną odpowiedź, powodem, dla którego próbowałem zainstalować zarówno z pip i menedżerem pakietów (który jest "apt-get") jest, ponieważ pierwszy (pip) nie działa dla mnie, więc próbowałem zainstalować 'python-lxml', ale został __preinstalled__. Zainstalowałem także 'libxml2' i' libxslt' zanim spróbowałem zainstalować 'lxml'. – helado

+0

@helado: Ale czy zainstalowałeś 'libxml2-dev' i' libxslt-dev', ponieważ zarówno dokumentacja instalacyjna, jak i ta odpowiedź wyjaśniają? – abarnert

+0

Jeśli masz na myśli "sudo apt-get install libxml2-dev libxslt-dev python-dev", jak mówią docs, to tak, zrobiłem to w ten sposób. – helado

3

Na ubuntu linux distro oparte można użyć:

sudo apt-get install zlib1g-dev

+1

Zmierzyłem się z tym samym problemem. To polecenie rozwiązało problem. Dzięki @helado i kguest. – Mohammed