1

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 模块?

4

3 回答 3

4

看起来有人忘记更新 cmake: bugs-PYSIDE-55

但是,我刚刚编译shiboken-1.1.2,问题似乎已解决。

于 2012-09-06T16:27:45.937 回答
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

就是这样,我花了几个小时才弄清楚,希望这会拯救别人:)

于 2012-09-07T10:22:10.370 回答
0

以下是我在 Windows 上从源代码编译 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

附言

但是,“PySide-1.1.2\build\lib”中缺少 shiboken.pyd,文件将安装到站点包中。这解释了为什么我无法通过使用以下方法从 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。

于 2013-03-30T19:19:20.930 回答