【问题标题】:PySide's shiboken python module not foundPySide 的 shiboken python 模块未找到
【发布时间】:2012-09-06 13:56:32
【问题描述】:

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

【问题讨论】:

    标签: python import installation pyside


    【解决方案1】:

    好像有人忘记更新 cmake:bugs-PYSIDE-55

    不过,我刚刚编译了shiboken-1.1.2,问题似乎已经解决了。

    【讨论】:

    • 谢谢回复,是不是说纯PySide安装从来没有安装过shiboken python模块,必须手动编译?
    • @andrean。您在哪个平台上,您通常如何安装 PySide?​​span>
    • 我用的是ubuntu,我用pip安装了PySide。
    • @andrean。您可以尝试来自qt site 的 ubuntu 二进制文件。看起来latest packages 可用,包括shiboken
    • 我使用 pip 安装了 PySide,因为我在 virtualenv 中使用了它,但我将尝试使用二进制包进行系统范围的安装。感谢您的信息,希望这会奏效。
    【解决方案2】:

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

    Google 透露该问题是因为 $LD_LIBRARY_PATH 不包含这些库所在的路径。首先,ubuntu 12(我认为 10 和 11 也是)不再使用 $LD_LIBRARY_PATH 环境变量,所以它甚至没有设置。 所以即使路径不正确,因为我试图用路径加入那个未设置的变量:

    export LD_LIBRARY_PATH=$PYSIDESANDBOXPATH/lib:$LD_LIBRARY_PATH
    

    因此它将它视为两个常规字符串并将它们连接在一起。下面的 sn-p 显示了如何安全地加入它们以避免造成此类麻烦。但这也没有解决问题。由于运行 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
    

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

    【讨论】:

    • 有人有windows版本的解决方案吗...?
    【解决方案3】:

    这是我在 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多