Если у вас нет прав администратора и вы не можете убедить администратора установить соответствующие пакеты для вас, у вас есть два варианта:
Вариант 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