Я считаю, что в идеальных обстоятельствах ответ ekhumoro абсолютно правильный, к сожалению, мне не повезло, и бинарные пакеты по-прежнему не позволяли использовать модуль shiboken python. Мне пришлось скомпилировать его вручную, но эта часть тоже оказалась сложной, поскольку она не работала с инструкциями по умолчанию, найденными на их домашней странице, вероятно, потому, что я использую Ubuntu 12.04, или я не знаю, почему еще. Поскольку целью было использование внутри virtualenv, я следовал этим инструкциям:
export PYSIDESANDBOXPATH=/path/to/my/virtualenv
export PATH=$PYSIDESANDBOXPATH/bin:$PATH
export PYTHONPATH=$PYSIDESANDBOXPATH/lib/python2.6/site-packages:$PYTHONPATH
export LD_LIBRARY_PATH=$PYSIDESANDBOXPATH/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$PYSIDESANDBOXPATH/lib/pkgconfig:$PKG_CONFIG_PATH
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$PYSIDESANDBOXPATH -DCMAKE_BUILD_TYPE=Debug -DENABLE_ICECC=0'
make
make install
sudo ldconfig
Первая проблема здесь заключалась в том, что после того, как он был скомпилирован, и началась установка, и он хотел установить модуль shiboken python, произошло это:
-- Installing: .../lib/python2.7/site-packages/shiboken.so
-- Removed runtime path from .../lib/python2.7/site-packages/shiboken.so
Затем я нашел где-то, что я должен добавить этот параметр в cmake:
-DCMAKE_SKIP_RPATH:BOOL=YES
Теперь установка прошла успешно, но когда я попытался импортировать шибокен в python, произошло следующее:
import shiboken
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libshiboken.so: cannot open shared object file: No such file or directory
Google показал, что проблема вызвана тем, что $LD_LIBRARY_PATH не содержит пути, по которому находятся эти библиотеки. Прежде всего, Ubuntu 12 (и я думаю, что 10 и 11 также) больше не использует переменную окружения $LD_LIBRARY_PATH, поэтому она даже не была установлена. Таким образом, даже путь был неправильным, потому что я пытался соединить эту неустановленную переменную с путем:
export LD_LIBRARY_PATH=$PYSIDESANDBOXPATH/lib:$LD_LIBRARY_PATH
Таким образом, он обработал его как две обычные строки и просто соединил их вместе. Фрагмент ниже показывает, как безопасно присоединиться к ним, чтобы избежать таких проблем. Но и это не решило проблемы. поскольку запуск ldconfig по-прежнему ничего не обновлял, поэтому импорт в python снова не удался. Окончательное решение, найденное и с помощью Google :), заключалось в создании нового файла в /etc/ld.so.conf.d/ и помещении туда содержимого $LD_LIBRARY_PATH, после чего запускался ldconfig. Итак, вот окончательный сценарий установки, который работал, как и ожидалось:
#!/usr/bin/env bash
export PYSIDESANDBOXPATH=/path/to/my/virtualenv
export PATH="$PYSIDESANDBOXPATH/bin${PATH:+:$PATH}"
export PYTHONPATH="$PYSIDESANDBOXPATH/lib/python2.7/site-packages${PYTHONPATH:+:$PYTHONPATH}"
export LD_LIBRARY_PATH="$PYSIDESANDBOXPATH/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export PKG_CONFIG_PATH="$PYSIDESANDBOXPATH/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$PYSIDESANDBOXPATH -DCMAKE_SKIP_RPATH:BOOL=YES -DCMAKE_BUILD_TYPE=Debug -DENABLE_ICECC=0
make
make install
sudo sh -c "echo $LD_LIBRARY_PATH > /etc/ld.so.conf.d/shiboken.conf"
sudo ldconfig
Вот и все, мне потребовалось несколько часов, чтобы понять, надеюсь, это спасет кого-то еще :)
person
andrean
schedule
07.09.2012