Как установить lxml для python без прав администратора на linux? - PullRequest
5 голосов
/ 12 мая 2011

Мне просто нужны некоторые пакеты, которых нет на хост-машине (а я и linux ... мы ... мы не проводили много времени вместе ...).

Я использовал для установкиони как:

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

или

# with easy_install
easy_install prefix=~/.local package

Но это не работает с lxml.Я получаю много ошибок во время сборки:

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 говорит, что у него есть некоторые зависимости.Но как их установить без прав администратора?

1 Ответ

11 голосов
/ 12 мая 2011

Если у вас нет прав администратора и вы не можете убедить администратора установить соответствующие пакеты для вас, у вас есть два варианта:

Вариант 1 - Загрузить исходные коды для libxml2 и libxslt и скомпилируйте и установите их где-нибудь под вашим $HOME, затем соберите python-lxml для этих копий.

Это довольно сложный пример, так как если вы пропустите большезависимости, которые вы могли загружать / компилировать в течение длительного времени.

Вариант 2 - Загрузите бинарные пакеты для того же дистрибутива Linux, который используется на вашем сервере, и извлеките содержимое под вашимhome directory.

Например, если вы используете 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 native и pure-python и переместите общий libraries наверх, затем удалите извлеченное содержимое:

% 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
...