在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安装包地址
下载两个库的安装包:
- libxml2:ftp://xmlsoft.org/libxml2/libxml2-2.7.2.tar.gz
- libxslt :http://ftp.acc.umu.se/pub/gnome/sources/libxslt/1.1/libxslt-1.1.22.tar.gz
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的更多相关文章
- [python] 2、python使用pyaudio进行录音,及其在python虚拟环境virtualenv中安装遇到的问题
1.pyaudio安装大背景 最近在做智能音箱,需要编写声音拾取代码,我先是百度两篇比较常见的用python进行录音的操作的文章: python写一个录音小程序:http://blog.csdn.ne ...
- windows下virtualenv中安装MySQL-python
先在正常的环境下安装 MySQL-python-1.2.3.win-amd64-py2.7.exe (用everything搜索一下就出来) 然后到 C:\Python27\Lib\site-pack ...
- 在virtualenv中安装NumPy、 SciPy、 scikit-learn、 matplotlib
首先要进入对应的虚拟环境 然后安装包 这里把安装源改成使用豆瓣的源进行下载 这样的话 下载速度会快很多 安装numpy包 pip install numpy -i https://pypi ...
- 在virtualenv中使用不同的Python版本
来源:百度SEO公司 我有一个目前使用python 2.5.4运行的Debian系统. 我正确安装了virtualenv,一切正常. 我是否可以将virtualenv与其他版本的Python一起使 ...
- 如何在virtualenv虚拟环境中安装mysql-python
接触过virtualenv后,想在这个虚拟环境中安装独立的开发环境.在安装MySQLdb时遇到错误 pc 09:09:30 File "/home/pc/work/VENV/py3/loca ...
- ubuntu 14.04中安装 ruby on rails 环境
环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 1. bundle install 时,报json错误可以看出是在安装nokogiri时遇到了问题,此时执行 sudo ap ...
- ubuntu 14.04中安装 ruby on rails 环境(填坑版) 呕血推荐
环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 开发相关: ruby 2.2.0 rails 4.2.0 sublime text 3 本文说明:所有的命令均在$ 之后,若 ...
- [django]在virtualenv下安装的第三方库的使用方法
在virtualenv下安装的第三方库,例如south, requests等,如果想在django中使用,需要先将库添加到settings.py的INSTALLED_APPS中, 以south, re ...
- Windows下Python,setuptools,pip,virtualenv的安装
Windows 2003平台,安装Python2.7.4,Python3.3,setuptools,pip,virtualenv. 安装Python2.7.4(当前版本是2.7.6),安装路径:C:\ ...
随机推荐
- sqlserver exists和in 与exists和not in
1.exists 和 in 1.1 正常情况下exists和in的效果是一样的,如图试验 即使子查询中包含null也没有关系,依然可以正常使用 1.2 in 和 exists效率比较 先看in 由图中 ...
- 转载收藏之用 - 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
Senparc.Weixin.MP SDK已经涵盖了微信5.0的所有公共API,以及2013年10月29日升级之后大部分实用的接口. 整个项目的源代码以及已经编译好的程序集可以在这个项目中获取到:ht ...
- 如何成为一个牛逼的C/C++程序员?
这个题目的噱头太大,要真的写起来, 足够写一本书了. 本人是过来人, 结合自身的体会和大家交流一下,希望新人能少走弯路. 每个人的情况不一样,我下面的描述可能并不适合每一个看到这篇文章的人. 一.C/ ...
- Spring-AOP实践 - 统计访问时间--StopWatch
公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为S ...
- 通过实现Comparable接口结合TreeSet来对对象自动排序
经过会遇到这样的情况,对于某个对象数组或者链表要按照一定的规则进行排序,那么我们该怎么做呢? 如遇到这样的需求: 1.需求1 对于学生对象按照年龄进行排序,年龄小的排在前面. 单单看到这样的需求,实现 ...
- 【HDU1166】敌兵布阵(树状数组或线段树)
是一道树状数组的裸题,也可以说是线段树的对于单点维护的裸题.多做这种题目可以提高自己对基础知识的理解程度,很经典. #include <iostream> #include <cst ...
- extjs两个tbar问题
版本:extjs3.4 接触过extjs的同志们都知道每个panel都有一个tbar(top bar 上面工具栏) ,bbar(bottom bar 底部工具栏) 大家做查询页面,一 ...
- python高级编程(第12章:优化学习)3
#微观剖析 ''' 当找到速度很慢函数时,有时还需要做到测试某个部分函数剖析工作,这需要通过手动对一部分代码速度测试完成 ''' """ import tempfile, ...
- python高级编程之描述符与属性03
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #属性Property #提供了一个内建描述符类型,它知道如何将一个 ...
- [每日一题] OCP1z0-047 :2013-08-17 EXTERNAL TABLE――加载数据 ............................56
正确答案:C 一.对答案解释: A. TYPE:有两个选可供选择: 1. ORACLE_LOADER:传统方式,与SQLLDR一样,参数从多,应用较多. 2. ...