2013-01-09 4 views
7

Ho scritto una sceneggiatura qualche tempo fa che contengonoerrore di importazione per lxml in python

from lxml import etree 

Ma, purtroppo non funziona più. Nel dubbio ho controllato l'installazione con:

sudo apt-get install python-lxml 
sudo pip install lxml 
sudo apt-get install libxml2-dev 
sudo apt-get install libxslt1-dev 

ho controllato se potesse essere la mia versione di pitone con:

[email protected]:~$ python 
Python 2.7.3 (default, Sep 14 2012, 14:11:57) 
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import lxml 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named lxml 

Il mio sistema operativo è Ubuntu 12.04.1 LTS con Python 2.7.3.

Tutto sembra a posto. Non riesco a vedere quale potrebbe essere il problema.

risolto:

Infine importazione eTree con

from xml import etree 

Non so perché, e se v'è una differenza, ma che sta funzionando come previsto.

+1

Questo è ciò che è stato fatto per 'virtualenv'. –

+0

Qual è stato il risultato di 'pip install lxml' - sembra strano che le librerie richieste per compilarlo, vengano dopo di esso ... –

+0

Qual è stato l'output di' sudo pip install lxml'? Inoltre, se vuoi usare 'pip' per installare' lxml', devi installare il pacchetto 'python-dev'. –

risposta

4

Risolto il problema.

Sembra che un software che ho installato abbia rovinato il mio percorso python. Il python che stavo usando quando si chiama python in un terminale era quello installato dal software, e quello chiamato dal mio script era quello installato sul mio sistema.

Quindi, ho appena rimosso il percorso python del software dalla variabile path di bash.

+0

sì, questo sembra essere il problema anche per me. Nel mio caso è in conflitto con MAMP. Il 'sudo easy_install lxml' mostra:' Costruire contro libxml2/libxslt nella seguente directory:/Applications/MAMP/Library/lib .......... /tmp/easy_install-KzJaeI/lxml-3.2.5 /src/lxml/includes/etree_defs.h:9:10: errore irreversibile: 'file libxml/xmlversion.h' non trovato. Il comando 'echo $ PATH' visualizza' $ echo $ PATH /Applications/MAMP/Library/bin:/Applications/MAMP/bin/php/php5.5.26/bin:/Users/admin/.composer/vendor/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin' – r3x

6

La tua soluzione citata in edit, che usa xml.etree invece di lxml.etree non è il modo migliore per farlo, poiché questi moduli hanno conosciuto incompatibilities, e principalmente perché lxml è sicuramente più optimised.

Un buon modo per fare un ambiente pulito a disposizione è quello di utilizzare virtualenv:

$ virtualenv myproject 
$ cd myproject 
$ ./bin/pip install lxml # Repeat this with other dependencies 
[wait for download and compiling] 

Poi, utilizzare ./bin/python per eseguire lo script. I vantaggi di questo metodo sono:

  • si possono avere diverse versioni di dipendenze tra il sistema e il vostro progetto
  • anche se si rompe tutto nel vostro ambiente virtuale, non sarà compromesso il resto del sistema
  • non c'è bisogno dei privilegi di root per fare un'installazione

come riferimento, un modo più potente, ma un po 'più complessa per raggiungere questo obiettivo è quello di utilizzare buildout, ma può sembra caccia flie s con un bazooka se vuoi solo eseguire un semplice script a un solo file.

+0

So che env e pip virtuali sono utili, MA come ho detto creare un env virtuale per ciascuno dei miei script non è lo scopo. Vedi la mia risposta per capire qual è stato il mio problema! – user1254498

-1

Per Python 3.6, è molto difficile.

Ho lo stesso problema e provo a installare l'ultima versione, lxml 3.8. Ma ho ancora l'errore. E poi uso lxml 3.7.3, quindi va bene.

+0

Perché non si importa dal pacchetto xml come accennato? Funziona benissimo :-) –

+0

grazie damonxu, lo stesso qui. Errore di importazione di lxml 3.8, dopo aver disinstallato 3.8 e installato 3.7.3, funziona correttamente – WoltjerD