2014-10-14 20 views
5

Im cercando di installare lxml all'interno di un virtualenv con sudo pip install lxml e anche sudo pip install --upgrade lxml ma ottenendo il seguente in entrambi i casi:Non è possibile installare lxml in 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 

Ho provato tutte le soluzioni postate here, che implica che ho libxml2-dev, libxslt-dev e python-dev installato e ho anche installato build-essential
sono attualmente in esecuzione di Linux Mint 17 Debian based che utilizza apt-get come gestore dei pacchetti.
python-lxml era già preinstallato.

+1

Perché stai usando 'sudo' all'interno di un virtualenv? Hai creato il virtualenv come root? Se è così, perché? O stai provando ad installarlo sui pacchetti del sito di sistema anche se sei all'interno di una virtualenv? Se è così, perché non farlo fuori dal virtualenv? – abarnert

+0

@abarnert Beh, la prima volta che l'ho fatto senza sudo, ho provato a installare lxml a livello globale, ma non ha funzionato. – helado

+0

Basta mescolare in modo casuale virtualenv e installazioni globali con e senza sudo sta per portare a una virtualenv rotta con permessi rovinati. Non farlo. – abarnert

risposta

7

lxml dipende da vari librerie C, e si deve avere quelle librerie C installate, tra cui i file di sviluppo (header, .so o .a biblioteche, ecc.) - per costruire lxml. I documenti installation spiegano quali prerequisiti è necessario creare su una particolare piattaforma.


Questo errore:

/usr/bin/ld: cannot find -lz 

... significa che il presupposto che ti manca è libz, aka zlib.

Dato che non si utilizza Windows, è incredibilmente improbabile che in realtà non si disponga di zlib ... ma è piuttosto plausibile che non si disponga dei file di sviluppo per zlib. Su alcune piattaforme, in particolare su molte distribuzioni di Linux, i pacchetti vengono generalmente suddivisi in parti separate. Ad esempio, le parti di zlib necessarie in fase di runtime possono trovarsi in un pacchetto denominato zlib, mentre le parti necessarie per la creazione di altri programmi che richiedono zlib in un pacchetto denominato zlib-dev o zlib-devel. I dettagli esatti dipendono dalla tua esatta piattaforma.

Detto questo, se non si hanno i file di sviluppo zlib, probabilmente non hanno i file di sviluppo libxml2 o libxslt sia, perché non so di qualsiasi piattaforma in cui l'installazione di quelli che non avrebbero tirato nei file zlib.

In ogni caso, dal momento che non ci hai detto che piattaforma sei (e distro, se linux), non so quale gestore di pacchetti usare, quali sono i nomi dei pacchetti, ecc., Ma fai tutto ciò che è appropriato per la tua piattaforma.


anche:

I already have python-lxml installed

Davvero non installare lo stesso pacchetto sia con il gestore dei pacchetti della vostra distro e con pip; è un ottimo modo per confondersi.

In ogni caso, molto probabilmente è stato installato python-lxml da un pacchetto binario, non dall'origine, il che significa che non sono stati necessari i requisiti di compilazione. Ora stai provando a crearlo dal sorgente, il che significa che lo fai.

+0

Grazie per la tua risposta anticipata, il motivo per cui ho provato a installare sia con pip che con il gestore pacchetti (che è 'apt-get') è perché il primo (pip) non ha funzionato per me, quindi ho provato a installare 'python-lxml' ma era __preinstallato__. Inoltre ho installato 'libxml2' e' libxslt' prima di provare a installare 'lxml'. – helado

+0

@helado: Ma hai installato 'libxml2-dev' e' libxslt-dev', come spiegano sia i documenti di installazione che questa risposta? – abarnert

+0

Se intendi per 'sudo apt-get install libxml2-dev libxslt-dev python-dev' come dice il documento, allora sì, l'ho fatto in quel modo. – helado

3

Su una distro linux ubuntu base è possibile utilizzare:

sudo apt-get install zlib1g-dev

+1

Ho affrontato lo stesso problema. Questo comando ha risolto il problema. Grazie a @helado e kguest. – Mohammed

Problemi correlati