我只需要一些不在主机上的软件包(和我和linux …我们…我们没有花太多时间在一起…)。
我曾经安装它们,如:
# from the source python setup.py install --user
要么
# with easy_install easy_install prefix=~/.local package
但它不适用于lxml。 在构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表示它有一些依赖关系。 但是如何在没有pipe理权限的情况下安装?
如果您没有管理权限,并且无法说服管理员为您安装相关软件包,则有两种选择:
选项1 – 下载libxml2
和libxslt
源代码,并将它们编译并安装到您的$HOME
某处,然后针对这些副本构建python-lxml。
这是一个相当复杂的例子,因为如果你错过了更多的依赖关系,你可能会长时间下载/编译。
选项2 – 为服务器上使用的相同Linux发行版下载二进制包,然后将内容解压缩到您的主目录下。
例如,如果你正在运行Ubuntu Lucid,你首先要找出你的操作系统正在使用的版本,然后下载你缺少的软件包:
% uname -m x86_64 % aptitude show libxml2 | grep Version Version: 2.7.6.dfsg-1ubuntu1.1
接下来从Ubuntu服务器直接下载你需要的软件包:
% 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代码,并将共享库移动到顶部,然后删除提取的内容:
% 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
(或者等效的)中,这样它们是永久的:
% export LD_LIBRARY_PATH=$HOME/root/lib % export PYTHONPATH=$HOME/root
您可以验证使用ldd
找到共享对象(如果已安装):
% 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了:
% python >>> from lxml import etree