我相信在理想的情况下ekhumoro的回答是完全正确的,不幸的是我没那么幸运,二进制包仍然不允许使用shiboken python模块。我不得不手动编译它,但这部分变得棘手,因为它没有在主页上找到的默认指令工作,可能是因为我使用Ubuntu 12.04,或者我不知道为什么。 由于目标是从withing一个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模块,这happend:
-- 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
现在安装w ^作为成功的,但是当我试图在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
这一切,它花了我几个小时才能弄清楚,希望这将节省别人:)
感谢您的回复,这是否意味着shiboken python模块从未安装过纯PySide安装,我必须手动编译它? – andrean
@andrean。你在什么平台上,以及你通常如何安装PySide? – ekhumoro
我使用的是Ubuntu,我用pip安装了PySide。 – andrean