如何在Linux上没有管理权限的情况下为python安装lxml? [英] How to install lxml for python without administative rights on linux?

查看:245
本文介绍了如何在Linux上没有管理权限的情况下为python安装lxml?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只需要一些主机上没有的软件包(我和linux ...我们...我们并没有花费太多时间...).

I just need some packages which dont present at the host machine (and I and linux... we... we didn't spend much time together...).

我以前像这样安装它们:

I used to install them like:

# from the source
python setup.py install --user

# with easy_install
easy_install prefix=~/.local package

但是它不适用于lxml.在构建过程中出现很多错误:

But it doesn't work with lxml. I get a lot of errors during the build:

x:~/lxml-2.3$ python setup.py build
Building lxml version 2.3.
Building without Cython.
ERROR: /bin/sh: xslt-config: command not found

** make sure the development packages of libxml2 and libxslt are installed **

Using build configuration of libxslt
running build
running build_py
running build_ext
building 'lxml.etree' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c src/lxml/lxml.etree.c -o build/temp.linux-i686-2.6/src/lxml/lxml.etree.o -w
In file included from src/lxml/lxml.etree.c:227:
src/lxml/etree_defs.h:9:31: error: libxml/xmlversion.h: No such file or directory
src/lxml/etree_defs.h:11:4: error: #error the development package of libxml2 (header files etc.) is not installed correctly
src/lxml/etree_defs.h:13:32: error: libxslt/xsltconfig.h: No such file or directory
src/lxml/etree_defs.h:15:4: error: #error the development package of libxslt (header files etc.) is not installed correctly
src/lxml/lxml.etree.c:230:29: error: libxml/encoding.h: No such file or directory
src/lxml/lxml.etree.c:231:28: error: libxml/chvalid.h: No such file or directory
src/lxml/lxml.etree.c:232:25: error: libxml/hash.h: No such file or directory
...
src/lxml/lxml.etree.c:55179: error: Б─≤xmlNodeБ─≥ undeclared (first use in this function)
src/lxml/lxml.etree.c:55179: error: Б─≤__pyx_v_c_nodeБ─≥ undeclared (first use in this function)
src/lxml/lxml.etree.c:55184: error: Б─≤_node_to_node_functionБ─≥ undeclared (first use in this function)
src/lxml/lxml.etree.c:55184: error: expected Б─≤;Б─≥ before Б─≤__pyx_v_next_elementБ─≥
src/lxml/lxml.etree.c:55251: error: Б─≤struct __pyx_obj_4lxml_5etree__ReadOnlyProxyБ─≥ has no member named Б─≤_c_nodeБ─≥
...

http://lxml.de/installation.html 说,它具有某些依赖性.但是如何在没有管理权限的情况下安装它们?

http://lxml.de/installation.html says that it has some dependencies. But how to install them without administrative rights?

推荐答案

如果您没有管理员权限,并且无法说服管理员为您安装相关的软件包,则有两种选择:

If you have no admin rights, and cannot convince the administrator to install the relevant packages for you, you have two options:

选项1 -下载 libxml2libxslt 的源,并将其编译并安装在您的$HOME某处,然后针对这些副本构建python-lxml.

Option 1 - Download sources for libxml2 and libxslt and compile and install them under your $HOME somewhere, then build python-lxml against those copies.

这是一个非常复杂的示例,因为如果您缺少更多的依赖项,则可能需要很长时间才能下载/编译.

This is a pretty involved example, since if you're missing further dependencies you could be downloading / compiling for a long time.

选项2 -下载与您的服务器上使用的Linux发行版相同的二进制软件包,然后将其内容提取到主目录下.

Option 2 - Download the binary packages for the same distribution of Linux that is used on your server, and extract the contents under your home directory.

例如,如果您正在运行Ubuntu Lucid,则首先要找到操作系统使用的版本,然后下载缺少的软件包:

For example, if you're running Ubuntu Lucid, you'd first find out the version your OS is using and then download the packages you're missing:

% uname -m
x86_64
% aptitude show libxml2 | grep Version
Version: 2.7.6.dfsg-1ubuntu1.1

接下来,请从Ubuntu服务器直接下载所需的软件包:

Next download the packages you need direct from the Ubuntu server:

% mkdir root ; cd root
% wget http://us.archive.ubuntu.com/ubuntu/pool/main/libx/libxml2/libxml2_2.7.6.dfsg-1ubuntu1.1_amd64.deb
% wget http://us.archive.ubuntu.com/ubuntu/pool/main/libx/libxslt/libxslt1.1_1.1.26-6build1_amd64.deb
% wget http://us.archive.ubuntu.com/ubuntu/pool/main/l/lxml/python-lxml_2.2.4-1_amd64.deb

提取内容并合并lxml本机代码和纯python代码,并将共享库移到顶部,然后删除提取的内容:

Extract the contents and merge the lxml native and pure-python code and move the shared libraries to the top, then remove the extracted contents:

% dpkg-deb -x libxml2_2.7.6.dfsg-1ubuntu1.1_amd64.deb .
% dpkg-deb -x libxslt1.1_1.1.26-6build1_amd64.deb .
% dpkg-deb -x python-lxml_2.2.4-1_amd64.deb .
% mv ./usr/lib/python2.6/dist-packages/lxml .
% mv ./usr/share/pyshared/lxml/* lxml
% mv ./usr/lib .
% rm *.deb
% rm -rf usr

最后,要使用这些文件,您需要设置LD_LIBRARY_PATH和PYTHONPATH环境变量以指向$HOME/root.将它们放在您的~/.bashrc(或等效文件)中,以便它们永久存在:

Finally, to use those files you need to set your LD_LIBRARY_PATH and PYTHONPATH environment variables to point into $HOME/root. Place these in your ~/.bashrc (or equivalent) so they are permanent:

% export LD_LIBRARY_PATH=$HOME/root/lib
% export PYTHONPATH=$HOME/root

您可以使用ldd(如果已安装)验证是否找到共享对象:

You can verify that the shared objects are being found using ldd (if it's installed):

% ldd $HOME/root/lxml/etree.so | grep $HOME
libxslt.so.1 => /home/user/root/lib/libxslt.so.1 (0x00007ff9b1f0f000)
libexslt.so.0 => /home/user/root/lib/libexslt.so.0 (0x00007ff9b1cfa000)
libxml2.so.2 => /home/user/root/lib/libxml2.so.2 (0x00007ff9b19a9000)

然后您就可以测试Python了:

Then you're ready to test Python:

% python
>>> from lxml import etree

这篇关于如何在Linux上没有管理权限的情况下为python安装lxml?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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