我想用lxml和pypy做一些学习,所以我决定在我的Yosemite Mac上设置它。但经过三天的尝试,我仍然无法尝试lxml,因为我无法正确设置。
这就是我所做的:
干净的homebrew
和xcode-select --install
安装
proix:~ user$ brew --version
0.9.5
proix:~ user$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.0.0
Thread model: posix
酿造libxml2
和libxslt
- libxml2代码tar 3.4.1和libxslt代码tar 1.1.28;工作得很好。建立并安装了Lib。
proix:~ user$ brew list
libxml2 libxslt
proix:~ user$ brew info
2 kegs, 409 files, 14M
proix:~ user$ ll /usr/local/Cellar/libxml2/2.9.2/lib/
total 6096
drwxr-xr-x 8 user admin 272 27 Dez 11:46 .
drwxr-xr-x 13 user admin 442 27 Dez 11:46 ..
drwxr-xr-x 3 user admin 102 27 Dez 11:46 cmake
-r--r--r-- 1 user admin 1184284 27 Dez 11:46 libxml2.2.dylib
-r--r--r-- 1 user admin 1922024 27 Dez 11:46 libxml2.a
lrwxr-xr-x 1 user admin 15 27 Dez 11:46 libxml2.dylib -> libxml2.2.dylib
drwxr-xr-x 3 user admin 102 27 Dez 11:46 pkgconfig
-r--r--r-- 1 user admin 269 27 Dez 11:46 xml2Conf.sh
proix:~ user$ ll /usr/local/Cellar/libxslt/1.1.28/lib/
total 1440
drwxr-xr-x 10 user admin 340 27 Dez 12:10 .
drwxr-xr-x 13 user admin 442 27 Dez 12:10 ..
-r--r--r-- 1 user admin 76728 27 Dez 12:10 libexslt.0.dylib
-r--r--r-- 1 user admin 101832 27 Dez 12:10 libexslt.a
lrwxr-xr-x 1 user admin 16 27 Dez 12:10 libexslt.dylib -> libexslt.0.dylib
-r--r--r-- 1 user admin 214344 27 Dez 12:10 libxslt.1.dylib
-r--r--r-- 1 user admin 326040 27 Dez 12:10 libxslt.a
lrwxr-xr-x 1 user admin 15 27 Dez 12:10 libxslt.dylib -> libxslt.1.dylib
drwxr-xr-x 4 user admin 136 27 Dez 12:10 pkgconfig
-r--r--r-- 1 user admin 288 27 Dez 12:10 xsltConf.sh
但是这些新版本没有被使用:
$ xmllint --version
xmllint: using libxml version 20900
所以我通过恢复控制台(启动时cmd + R)切换/usr/lib
下的库。重新启动后,我得到了预期的结果:
$ xmllint --version
xmllint: using libxml version 20902`
一句警告!在正常登录会话期间,请勿尝试执行此操作。如果操作系统再也找不到libxml2.dylib
,那么它会让你的系统无用。
创建一个用于测试的virtualenv:
virtualenv lxmllab
source lxmllab/bin/activate`
使用STATIC_DEPS=true sudo pip install lxml
安装lxml。工作得很好:
(lxmllab)proix:~ user$ pip list
backports.ssl-match-hostname (3.4.0.2)
certifi (14.5.14)
cffi (0.6)
docutils (0.12)
ipython (2.3.1)
Jinja2 (2.7.3)
lxml (3.4.1)
MarkupSafe (0.23)
nose (1.3.4)
numpydoc (0.5)
pip (6.0.3)
py (1.4.26)
Pygments (2.0.1)
pyzmq (14.4.1)
setuptools (8.2.1)
Sphinx (1.2.3)
tornado (4.0.2)
测试一下:
(lxmllab)proix:~ user$ pypy -c 'from lxml import etree'
Unknown libxml2 version: 20902
Traceback (most recent call last):
File "app_main.py", line 72, in run_toplevel
File "app_main.py", line 562, in run_it
File "<string>", line 1, in <module>
File "lxml.etree.pyx", line 270, in init lxml.etree (src/lxml/lxml.etree.c:199039)
File "lxml.etree.pyx", line 235, in lxml.etree.__unpackDottedVersion (src/lxml/lxml.etree.c:9383)
TypeError: unsupported operand type for int(): 'unicode'
(lxmllab)proix:~ user$ pypy
Python 2.7.3 (5acfe049a5b0, May 21 2013, 13:47:22)
[PyPy 2.0.2 with GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``redefining yellow seems like a
better idea''
---- from lxml import etree
Unknown libxml2 version: 20902
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "lxml.etree.pyx", line 270, in init lxml.etree (src/lxml/lxml.etree.c:199039)
File "lxml.etree.pyx", line 235, in lxml.etree.__unpackDottedVersion (src/lxml/lxml.etree.c:9383)
TypeError: unsupported operand type for int(): 'unicode'
----
那是我被困的地方。我尝试了几个修复,但无济于事:
LD_LIBRARY_PATH
和/或DYLD_LIBRARY_PATH
设置为libxml2的位置。site-packages/lxml
文件夹。有没有人知道我应该怎样做才能使这个工作,或者在Yosemite下使lxml lib工作的正确方法是什么?
答案 0 :(得分:1)
PyPy不能与lxml一起使用(至少不是很好,即使它不小心),因为lxml是在使用CPython C API绑定的Cython之上构建的。考虑使用lxml-cffi而不是https://github.com/amauryfa/lxml/tree/cffi