2012-11-13 62 views
7

我已经安装在我的Mac的LXML,当我在Python这样出现错误时,进口lxml.etree到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

本文可能帮助:[在Mac OS X 10.7上的Virtualenv中构建Python Lxml](http://roderickhodgson.com/blog/2012/10/27/building-python-lxml-on-mac-os- x-10-dot-7 /)(你可能会链接到_libxml2_的旧版本,而不是_lxml_所需的版本)。 –

+0

我会考虑Virtualenv,但我可以在当前的Python安装lxml基础? – heghogbbb

+0

谢谢,我将在对此解决方案进行测试后返回此处 – heghogbbb

回答

7

我有同样的问题类型。如果你有点子安装它,如下所示:pip install lxml

相反,尝试使用

STATIC_DEPS=true pip install lxml 

这解决了这个问题对我来说。

this website

+0

谢谢,我已经在几十次测试后安装了这个软件包。但你的解决方案似乎很好。 – heghogbbb

5

发现如果你已经安装libxml2,那么它是可能的,它只是不拿起正确的版本(有默认的OS X安装的版本)。特别是,假设您已安装libxml2/usr/local。你可以查阅一下共享库etree.so引用:

$> 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) 

检查在系统中安装的版本,符号:

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

对于我来说,这是不存在的系统安装的库。在我的版本安装,但是:

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

为了解决这个问题,请确保您的安装路径首先出现在DYLD_LIBRARY_PATH

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

经过一个小时的尝试,这解决了我的问题......这个问题的永久解决方案是什么? – eaponte

+0

您可以将此路径添加到'/etc/ld.so.conf.d/lxml.conf'(创建一个新文件),然后运行'ldconfig'(http://man7.org/linux/man-pages /man8/ldconfig.8.html) –

+0

对我来说,做相反的事情解决了我的问题(因为符号实际上是在系统的libxml2版本中),所以我必须将/ usr/lib作为DYLD_LIBRARY_PATH的第一个条目 – knocte

-1

运行以下命令来安装lxml的包。

pip install lxml --user 

应该解决这个问题。我测试它在MAC OSX 10.7.5,它工作正常。