2012-11-13 9 views
7

ho installato un lxml sul mio mac, quando digito in pitone come questoottenere gli errori quando importazione lxml.etree a Python

 
localhost:lxml-3.0.1 apple$ python 
Python 2.7.3 (v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from lxml import etree 
Traceback (most recent call last): 
    File "", line 1, in 
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-3.0.1-py2.7-macosx-10.6-intel.egg/lxml/etree.so, 2): Symbol not found: ___xmlStructuredErrorContext 
    Referenced from: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-3.0.1-py2.7-macosx-10.6-intel.egg/lxml/etree.so 
    Expected in: flat namespace 
in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-3.0.1-py2.7-macosx-10.6-intel.egg/lxml/etree.so 
+2

Questo articolo può aiutare: [Costruire Python Lxml in un Virtualenv su Mac OS X 10.7] (http://roderickhodgson.com/blog/2012/10/27/building-python-lxml-on-mac-os- x-10-punto-7 /) (probabilmente stai collegando una versione precedente di _libxml2_ che richiede _lxml_). –

+0

penserò a Virtualenv, ma potrei installare lxml base su Python corrente? – heghogbbb

+0

grazie, tornerò qui dopo un test per questa soluzione – heghogbbb

risposta

7

Ho avuto lo stesso problema. Se avete installato con pip come segue: pip install lxml

Invece, tenta di utilizzare

STATIC_DEPS=true pip install lxml 

Questo ha risolto il problema per me.

trovato su this website

+0

grazie, ho già installato quel pacchetto dopo dozzine di test. ma la tua soluzione sembra buona. – heghogbbb

5

Se avete installato libxml2, allora è possibile che si tratta solo di non far salire la versione destra (c'è una versione installata con OS X per impostazione predefinita). In particolare, supponi di aver installato libxml2 su /usr/local. È possibile controllare quali librerie condivise etree.so riferimenti:

$> otool -L /Library/Python/2.7/site-packages/lxml-3.2.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so 
/Library/Python/2.7/site-packages/lxml-3.2.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so: 
    /usr/lib/libxslt.1.dylib (compatibility version 3.0.0, current version 3.24.0) 
    /usr/local/lib/libexslt.0.dylib (compatibility version 9.0.0, current version 9.17.0) 
    /usr/lib/libxml2.2.dylib (compatibility version 10.0.0, current version 10.3.0) 
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) 

Controllo per quel simbolo nella versione installata del sistema-:

$> nm /usr/lib/libxml2.2.dylib | grep ___xmlStructuredErrorContext 

Per me, non è presente nella libreria installata dal sistema. Nella versione ho installato, però:

$> nm /usr/local/lib/libxml2.2.dylib | grep ___xmlStructuredErrorContext 
000000000007dec0 T ___xmlStructuredErrorContext 

Per risolvere questo problema, assicurarsi che il percorso di installazione appare per primo nella DYLD_LIBRARY_PATH:

$> export DYLD_LIBRARY_PATH=/usr/local/lib 
$> python 
>>> from lxml import etree 
# Success! 
+0

Questo ha risolto il mio problema dopo un'ora di tentativi ... Qual è la soluzione definitiva a questo problema? – eaponte

+0

Probabilmente si può aggiungere questo percorso a '/ etc/ld.so.conf.d/lxml.conf' (creare un nuovo file) e quindi eseguire' ldconfig' (http://man7.org/linux/man-pages /man8/ldconfig.8.html) –

+0

come per me, facendo l'opposto risolto il mio problema (perché il simbolo era in realtà nella versione libxml2 del sistema), quindi ho dovuto mettere/usr/lib come prima voce di DYLD_LIBRARY_PATH – knocte

-1

eseguire il seguente comando per installare il pacchetto lxml.

pip install lxml --user 

dovrebbe risolvere il problema. L'ho provato su MAC OSX 10.7.5, ha funzionato bene.

Problemi correlati