如何在优胜美地设置lxml和pypy? [英] How can I set up lxml and pypy on Yosemite?

查看:78
本文介绍了如何在优胜美地设置lxml和pypy?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想对lxml和pypy进行一些学习,所以我决定在我的Yosemite Mac上进行设置.但是经过三天的尝试,我仍然无法尝试lxml,因为我无法正确设置设置.

I wanted to do some learning with lxml and pypy, so I decided to get it set up on my Yosemite Mac. But after three days of trying, I still haven't been able to try lxml, because I can't get my setup right.

这就是我所做的:

  1. 干净的homebrewxcode-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

  • 构建了libxml2libxslt-libxml2代码tar 3.4.1和libxslt代码tar 1.1.28;工作正常.库已构建并安装.

  • Brewed up libxml2 and libxslt - libxml2 code tar 3.4.1 and libxslt code tar 1.1.28; worked fine. Libs were built and installed.

    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
    

  • 但是没有使用这些新版本:

  • But these new versions aren't being used:

    $ xmllint --version
    xmllint: using libxml version 20900
    

  • 因此,我通过故障恢复控制台(在引导过程中使用cmd + R)在/usr/lib下切换了库.重新启动后,我得到了预期的结果:

  • So I switched the libs under /usr/lib via the Recovery console (cmd+R during boot). After rebooting I get the expected result:

    $ xmllint --version
    xmllint: using libxml version 20902`
    

    警告!在正常的登录会话期间,请勿尝试执行此操作.如果操作系统再也找不到libxml2.dylib,它将完全使您的系统无用.

    A word of Warning! Do not attempt to do this during a normal login session. It utterly renders you system useless, if the OS cannot find libxml2.dylib any longer.

    创建一个用于测试的virtualenv:

    Create a virtualenv for testing:

    virtualenv lxmllab
    source lxmllab/bin/activate`
    

  • 使用STATIC_DEPS=true sudo pip install lxml安装lxml.也可以正常工作:

  • Install lxml with STATIC_DEPS=true sudo pip install lxml. Worked fine as well:

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

  • 测试一下:

  • Test it:

    (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'
    ---- 
    

  • 那是我被困住的地方.我尝试了几次修复,都无济于事:

    That's where I got stuck. I tried a couple of fixes, to no avail:

    • LD_LIBRARY_PATH和/或DYLD_LIBRARY_PATH设置为libxml2的位置.
    • 将libxml2 dylib复制到virtualenv site-packages/lxml文件夹.
    • Setting LD_LIBRARY_PATH and/or DYLD_LIBRARY_PATH to the locations of libxml2.
    • Copying the libxml2 dylibs to virtualenv site-packages/lxml folder.

    有人知道我应该怎么做才能使它工作,或者使lxml lib在优胜美地下工作的正确方法是什么?

    Does anybody know what I should do to get this to work, or what the correct way of getting the lxml lib working under Yosemite?

    推荐答案

    PyPy不能与lxml一起使用(至少不是很好,即使它偶然地起作用),这是因为lxml是在使用CPython C的Cython之上构建的API绑定.考虑使用lxml-cffi代替 https://github.com/amauryfa/lxml/tree/cffi

    PyPy does not work with lxml (at least not very well, even if it accidentally does), due to lxml being built on top of Cython which uses CPython C API bindings. Consider using lxml-cffi instead https://github.com/amauryfa/lxml/tree/cffi

    这篇关于如何在优胜美地设置lxml和pypy?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆