PySide安装成功,它运行正常,但我找不到导入shiboken模块的方法。现在我找到了关于通过python模块(http://bugs.pyside.org/show_bug.cgi?id=902)公开shiboken函数的功能请求的讨论,但问题已经解决。它是在2012年1月实施的,如果我理解正确的话。 即使在我尝试安装PySide 1.1.1之后:
>>> import shiboken
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named shiboken
我收到一个ImportError异常。如何安装shiboken python模块?
答案 0 :(得分:4)
看起来有人忘了更新cmake:bugs-PYSIDE-55。
但是,我刚刚编译了shiboken-1.1.2
,问题似乎已得到解决。
答案 1 :(得分:1)
我在理想的情况下相信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
就这一切而言,我花了几个小时才弄明白,希望这会拯救别人:)
答案 2 :(得分:0)
以下是我在源代码上编译shiboken.pyd的方法,使用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
P.S。
但是,“PySide-1.1.2 \ build \ lib”中缺少shiboken.pyd,其中文件将安装到site-packages。这解释了为什么我不能通过使用以下方法从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,“import shiboken”也会失败,因为它安装在错误的位置(“/opt/local/lib/python2.7/site-packages”而不是“/opt/local/Library/Frameworks/Python.framework/Version/2.7/lib/python2.7/site-packages”)。将“/opt/local/lib/python2.7/site-packages”添加到PYTHONPATH将解决问题。
pyside-setup脚本肯定存在错误。希望Digia可以在项目失效前派人去修复PySide。