在使用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如何调用动态库的函数。

在virtualenv中安装libxml2和libxslt的更多相关文章

  1. [python] 2、python使用pyaudio进行录音,及其在python虚拟环境virtualenv中安装遇到的问题

    1.pyaudio安装大背景 最近在做智能音箱,需要编写声音拾取代码,我先是百度两篇比较常见的用python进行录音的操作的文章: python写一个录音小程序:http://blog.csdn.ne ...

  2. windows下virtualenv中安装MySQL-python

    先在正常的环境下安装 MySQL-python-1.2.3.win-amd64-py2.7.exe (用everything搜索一下就出来) 然后到 C:\Python27\Lib\site-pack ...

  3. 在virtualenv中安装NumPy、 SciPy、 scikit-learn、 matplotlib

    首先要进入对应的虚拟环境 然后安装包    这里把安装源改成使用豆瓣的源进行下载  这样的话 下载速度会快很多   安装numpy包 pip install numpy -i https://pypi ...

  4. 在virtualenv中使用不同的Python版本

    来源:百度SEO公司   我有一个目前使用python 2.5.4运行的Debian系统. 我正确安装了virtualenv,一切正常. 我是否可以将virtualenv与其他版本的Python一起使 ...

  5. 如何在virtualenv虚拟环境中安装mysql-python

    接触过virtualenv后,想在这个虚拟环境中安装独立的开发环境.在安装MySQLdb时遇到错误 pc 09:09:30 File "/home/pc/work/VENV/py3/loca ...

  6. ubuntu 14.04中安装 ruby on rails 环境

    环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 1. bundle install 时,报json错误可以看出是在安装nokogiri时遇到了问题,此时执行 sudo ap ...

  7. ubuntu 14.04中安装 ruby on rails 环境(填坑版) 呕血推荐

    环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 开发相关: ruby 2.2.0 rails 4.2.0 sublime text 3 本文说明:所有的命令均在$ 之后,若 ...

  8. [django]在virtualenv下安装的第三方库的使用方法

    在virtualenv下安装的第三方库,例如south, requests等,如果想在django中使用,需要先将库添加到settings.py的INSTALLED_APPS中, 以south, re ...

  9. Windows下Python,setuptools,pip,virtualenv的安装

    Windows 2003平台,安装Python2.7.4,Python3.3,setuptools,pip,virtualenv. 安装Python2.7.4(当前版本是2.7.6),安装路径:C:\ ...

随机推荐

  1. poj2960 S-Nim

    大意:有n堆石子,每堆石子个数已知,两人轮流从中取石子, 每次可取的石子数x满足x属于集合S(k) = {s1,s2,s3...sk-1},问先拿者是否有必胜策略? 裸nim,可以用记忆化搜索. #i ...

  2. BZOJ 1017 魔兽地图DotR(树形DP)

    题意:有两类装备,高级装备A和基础装备B.现在有m的钱.每种B有一个单价和可以购买的数量上限.每个Ai可以由Ci种其他物品合成,给出Ci种其他物品每种需要的数量.每个装备有一个贡献值.求最大的贡献值. ...

  3. windows下编译firefox

    可以自己定制下.估计很简单..... 官方文档扫一遍: https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_I ...

  4. 五子棋AI

    下面是一些参考资料,打算看看: http://www.cnblogs.com/Blog_SivenZhang/archive/2010/06/13/1757677.html http://blog.c ...

  5. log4j日志分模块打印,同时不打印到控制台上

    由于定时刷新程序的启用,导致catalina.out配置文件中打入大量日志,致使程序调试困难.          无法正常查看日志.所以客户要求将性能流量配置日志迁移出catalina.out目录.修 ...

  6. IDX爱定客 | 氪加

    IDX爱定客 | 氪加 个性化定制鞋网站,在线定制只需三分钟

  7. Java日志终极指南

    Java日志基础 Java使用了一种自定义的.可扩展的方法来输出日志.虽然Java通过java.util.logging包提供了一套基本的日志处理API,但你可以很轻松的使用一种或者多种其它日志解决方 ...

  8. MVC 简单数据传递

    Mode: namespace MVCDemo.Models { public class Data { //申明为静态 归类所有,取数据不要实例化 ; public static string st ...

  9. C# 二叉堆

    二叉堆数据结构讲解: http://www.cnblogs.com/yc_sunniwell/archive/2010/06/28/1766751.html   C#代码实现 using System ...

  10. 平时的笔记04:处理stagger模块

    #! /usr/bin/env python3 # # __init__.py # From the stagger project: http://code.google.com/p/stagger ...