我相信在理想情况下,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中导入shiboken时,发生了这种情况:
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
谷歌透露这个问题是因为 $LD_LIBRARY_PATH 不包含这些库所在的路径。首先,ubuntu 12(我认为 10 和 11 也是)不再使用 $LD_LIBRARY_PATH 环境变量,所以它甚至没有设置。所以即使路径不正确,因为我试图将未设置的变量与路径连接:
export LD_LIBRARY_PATH=$PYSIDESANDBOXPATH/lib:$LD_LIBRARY_PATH
所以它将它视为两个常规字符串并将它们连接在一起。下面的片段显示了如何安全地加入它们以避免造成此类麻烦。但这也没有解决问题。由于运行 ldconfig 仍然没有更新任何内容,因此在 python 中的导入再次失败。谷歌也找到了最终的解决方案 :) 在 /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
就是这样,我花了几个小时才弄清楚,希望这会拯救别人:)