2012-09-06 128 views
1

PySide成功安装后,它完美的作品,但我不能找到一种方法,导入shiboken模块。现在我发现对功能要求通过一个Python模块(http://bugs.pyside.org/show_bug.cgi?id=902)揭露shiboken功能的讨论,但问题得到解决。如果我理解正确,它将于2012年1月实施。 即使安装PySide 1.1.1后,当我尝试:PySide的shiboken Python模块没有找到

>>> import shiboken 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named shiboken 

我得到一个ImportError异常。我如何安装shiboken python模块?

回答

4

看样子有人忘了更新的cmake:bugs-PYSIDE-55

不过,我刚刚编译shiboken-1.1.2,这个问题似乎是固定的。

+0

感谢您的回复,这是否意味着shiboken python模块从未安装过纯PySide安装,我必须手动编译它? – andrean

+0

@andrean。你在什么平台上,以及你通常如何安装PySide? – ekhumoro

+0

我使用的是Ubuntu,我用pip安装了PySide。 – andrean

1

我相信在理想的情况下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 

这一切,它花了我几个小时才能弄清楚,希望这将节省别人:)

+0

+ +1为了分担您的来之不易的知识。 – ekhumoro

+1

没有人有Windows版本的解决方案...? – 2013-01-05 09:07:42

0

以下是我编译shiboken.pyd在源代码的Windows上,使用PySide-1.1.2 + Qt4.8.4 + msvc2010进行测试。

首先,手动下载shiboken-1.1.2.tar.bz2,解压缩。那么这样编译它(你可能需要设置的virtualenv):

python setup.py build --openssl=C:\dev\OpenSSL\1.0.0j\bin --qmake=C:\Qt\4.8.4\bin\qmake.exe 

它结束后,我在得到了shiboken.pyd:

PySide-1.1.2\pyside_install\py2.7-qt4.8.4-32bit-release\lib\site-packages\shiboken.pyd 

附:

但是,在“PySide-1.1.2 \ build \ lib”中缺少shiboken.pyd,其中文件将被安装到站点包。这就解释了为什么我coundn't通过使用PIP编译PySide得到shiboken.pyd:

pip install PySide --install-option="--openssl=C:\dev\OpenSSL\1.0.0j\bin" --install-option="--qmake=C:\Qt\4.8.4\bin\qmake.exe" 

顺便说一句,在Mac OS X,如果您使用的MacPorts安装PySide,“进口shiboken”也将失败,因为它是安装到错误的位置(“/opt/local/lib/python2.7/site-packages”而不是“/opt/local/Library/Frameworks/Python.framework/Version/2.7/lib/python2.7/site-包“)。将“/opt/local/lib/python2.7/site-packages”添加到PYTHONPATH将解决该问题。

pyside-setup脚本中肯定存在缺陷。希望Digia可以在项目死亡之前派人修复PySide。