lxml简易安装方法

进公司快一个月了,到现在还在学习工具,周末还得来加班解决工具的安装问题,先鄙视自己……

遇到问题

安装公司的一个框架的时候一个python库lxml一直安装失败,得到错误:

 

Traceback (most recent call last):

  File "setup.py", line 115, in

    STATIC_CFLAGS, STATIC_BINARIES),

  File "/home/work/safe/tool/lxml-2.2.2/setupinfo.py", line 65, in ext_modules

    lib_versions = get_library_versions()

  File "/home/work/safe/tool/lxml-2.2.2/setupinfo.py", line 247, in get_library_versions

    xml2_version = run_command(find_xml2_config(), "--version")

  File "/home/work/safe/tool/lxml-2.2.2/setupinfo.py", line 236, in run_command

    stdout=subprocess.PIPE, stderr=subprocess.PIPE)

  File "/home/work/safe/tool/python/lib/python2.6/subprocess.py", line 595, in __init__

    errread, errwrite)

  File "/home/work/safe/tool/python/lib/python2.6/subprocess.py", line 1092, in _execute_child

    raise child_exception

OSError: [Errno 2] No such file or directory

 

我这个python初学者一直追到subprocess.Popen函数,返现是它引发了exception。单独测试这个函数,发现要运行的命令必须加上完整的路径。可安装时传进去的参数的确是完整的路径啊!

而且换一台机器立马就装成功了……实在不想再纠结这个问题了,问题解决才是王道,于是找到了绕过这个函数的放法

解决方案

1.安装lxml前必须安装好libxml和libxslt(框架已自带编译好的,我就没有动手编译)

2.根据libxml和libxslt的路径修改setup.py中的数组如下,例如

STATIC_INCLUDE_DIRS = ["/home/work/safe/tool/libxslt/include","/home/work/safe/tool/libxml2/include"] STATIC_LIBRARY_DIRS = ["/home/work/safe/tool/libxml2/lib","/home/work/safe/tool/libxslt.lib"] STATIC_CFLAGS = [] STATIC_BINARIES = [] 

3.编译的时候带上--static参数即可

python setup.py build_ext --static python setup.py build --static python setup.py install --static 

思考

1.linux系统安装多个不同版本软件的问题

以python为例,公司机器上的python为2.3版本,但现在要用python2.6,而我们一般都没有root权限,只能将python安装到个人目录下。这时候在shell里输入python,运行的还是python2.3。怎么办呢?

其实linux安装软件也就是可执行文件+环境变量。只要能够在path里找到你的可执行文件,就算是安装成功了,没有windows还需要注册表之类的那么麻烦。因此,只要调整不同版本软件在环境变量PATH中的先后顺序即可!你想用哪个版本的,就把哪个版本的放在PATH的前面就可以了。

2.软件的编译安装

以前对linux下编译安装软件的认识就停留在"configure"、“make”、“make install”的层面上。这次解决问题的过程中,阅读了一点安装文件的代码,发现有些软件有着复杂的库依赖,如果所需要的库没有在默认路径里,就需要你通过参数的形式指定。

3.一个有用的python函数

 

就是上面出问题那个函数,它的作用是调用shell命令,可传任意参数,可返回执行状态和执行结果。

>>传送门<<

 

你可能感兴趣的:(awk,sed,python,perl,Linux,python,library,file,command,exception,path)