zoukankan      html  css  js  c++  java
  • 在virtualenv中安装libxml2和libxslt

    在使用python的工作中,需要使用到libxml2和libxslt库。原来在实际环境中已经安装完成了,但是在virtualenv中还没有,现在正在整理virtualenv的环境。下面把在virtualenv环境的安装步骤记录下来,方便大家参考。

    1.正常环境安装

    在正常python环境中安装这两个库的方法比较简单,直接下载源码包,编译安装即可
    具体安装步骤:
    1、解压:$tar zxvf libxml2-2.7.2.tar.gz
    2、进入解压后的安装目录:$cd libxml2-2.7.2
    3、安装三部曲:1)$./configure
    2)$make
    3)$cd python
    3)$python setup.py install
    安装完毕。
    非常的简单。

    2.virtualenv环境安装

    下面的方法就是在在虚拟环境中安装。
    方法其实是大同小异,只是细微的差异。

    2.1环境信息

    环境信息:

    • os:Linux systest 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
    • python:Python 2.7.6
    • GCC:gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

    2.2安装包地址

    下载两个库的安装包:

    2.3安装libxml2

    先安装libxml2,解压。
    激活虚拟环境,然后在激活的的虚拟环境中操作。

    cd libxml2-2.7.2/
    ./configure --with-python=~/path/to/your/virtual/env/bin/python
    make
    cd python/
    python setup.py install
    

    libxml2在make之前,需要对Makefile做一些修改,详细见后面的安装过程中的问题。

    cd libxslt-1.1.22/
    ./configure --with-python=~/path/to/your/virtual/env/bin/python
    make
    cd python/
    sudo make install
    

    第三步:安装完成验证

    在虚拟环境中,输入python

    Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
    [GCC 4.8.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import libxml2
    >>> import libxslt
    >>> 
    

    如果没有报错,说明安装成功。

    3.安装过程问题汇总

    3.1 libxslt编译依赖libxml2库出错:

    /usr/bin/ld: /usr/local/lib/libxml2.a(entities.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
    /usr/local/lib/libxml2.a: error adding symbols: Bad value
    

    当时觉得奇怪,libxml2库已经安装好了,现在安装libxslt库,怎么报这个错误,在网上搜索下了错误信息,找到了这个文章(
    http://blog.csdn.net/zangcf/article/details/21607855),说编译的时候没有加-fPIC参数。
    就搜索了下这个参数的作用,-fPIC则表明使用地址无关代码。PIC:Position Independent Code.
    觉得libxslt编译不过,是这个问题引起的,然后修改了libxml的编译参数,重新编译安装libxml,然后在编译libxslt,顺利通过。

    解决方法:
    在libxml的Makefile的下面的位置添加-fPIC参数。

    CFLAGS = -g -O2 -pedantic -W -Wformat -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat -Wchar-subscripts -Wunin     itialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototype     s -Wnested-externs -Winline -Wredundant-decls -fPIC
    

    -fPIC的说明参考:Linux共享对象之编译参数fPIC

    4.一点疑问和想法

    4.1 模块的版本号

    安装完成后,在virtualenv的环境中查看安装是否成功,使用pip freeze命令来查看,能看到libxml2的版本号为libxml2-python==2.7.2,无法看到libxslt的版本号。env/lib/python2.7/site-packages的文件夹中,看到了libxml的egg信息,没有libxslt的egg信息。

    我的个人猜想是:
    libxml2库是通过python setup.py方式安装的,生成了完整的egg-info信息;而libxslt包是make install安装的,直接把对应的文件复制到了site-packages的目录下,没有生成egg-info信息。尝试着按照libxml的egg-info文件名称建立了一个文件
    touch libxslt_python-1.1.22-py2.7.egg-info

    然后在执行pip freeze命令,发现可以显示出libxslt的版本号信息了。同时观察了其他几个显示版本号的包,都有对应的egg信息。pip命令应该是通过egg-info来管理包的。

    4.2 动态库的调用

    libxml2和libxslt都是c语言完成,加了python的适配,在site-packages的文件夹中,有.a .so以及对应名称的.py文件,打开python文件查看,是python调用了对应的文件来实现的,充分发挥了Python的胶水特性。后续在需要的时候深入了解下python如何调用动态库的函数。

  • 相关阅读:
    Taro api封装
    taro中如何定义全局变量
    移动端悬浮框可移动,可回弹,Vue and React
    VS2015 安装mvc4安装包以及vs2010 sp1后导致Razor语法失效代码不高亮(能正常运行)/视图页面无法智能提示(.cshtml)解决办法
    C#6.0新特性的尝试
    Visual Studio Code 添加设置代码段(snippet)
    AngularJs的$http发送POST请求,php无法接收Post的数据解决方案
    [Asp.net mvc] 在Asp.net mvc 中使用MiniProfiler
    [Asp.net mvc]实体更新异常:存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。
    win8.1右键新建菜单添加新建php文件
  • 原文地址:https://www.cnblogs.com/StitchSun/p/4617035.html
Copyright © 2011-2022 走看看