PySide / Qt 导入错误
我正在尝试在Python中导入PySide / Qt,结果遇到了以下错误:
from PySide import QtCore
ImportError: dlopen(/usr/local/lib/python2.7/site-packages/PySide/QtCore.so, 2): Library not loaded: libpyside-python2.7.1.2.dylib
Referenced from: /usr/local/lib/python2.7/site-packages/PySide/QtCore.so
Reason: image not found
我的运行和安装环境是:
- Mac OSX 10.9.4 Mavericks
- 通过Homebrew安装的Python 2.7
- 通过Homebrew安装的Qt
- 通过Pip安装的PySide
文件libpyside-python2.7.1.2.dylib和错误信息中提到的QtCore.so文件在同一个路径下。
我搜索了很多关于这个问题的资料,发现大多数人都是在尝试把这些库打包成一个应用,而我并不是这样。我只是想在我的系统上运行它,但却遇到了这个问题。对于应用的故障排除,有人建议使用oTool;我不确定这是否有帮助,但我运行oTool时的输出是:
otool -L QtCore.so
QtCore.so:
libpyside-python2.7.1.2.dylib (compatibility version 1.2.0, current version 1.2.2)
libshiboken-python2.7.1.2.dylib (compatibility version 1.2.0, current version 1.2.2)
/usr/local/lib/QtCore.framework/Versions/4/QtCore (compatibility version 4.8.0, current version 4.8.6)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
有什么想法吗?提前谢谢你们 :)
5 个回答
我遇到过类似的问题,在Mavericks系统上使用通过Brew安装的Qt和虚拟环境。
我需要执行 brew reinstall Qt
这个命令。
然后运行 pyside_postinstall.py -install
。
我找到了解决办法,可以在这里查看
export DYLD_LIBRARY_PATH=/usr/local/lib/python[version]/site-packages/PySide
对于 Python 3.5,这个方法是这样的:
export DYLD_LIBRARY_PATH=/usr/local/lib/python3.5/site-packages/PySide
我遇到了类似的问题,最后通过手动使用 otool -L
(在问题中提到的)和 install_name_tool
来更新路径,解决了这个问题。
install_name_tool -change @rpath/libshiboken.cpython-34m.1.2.dylib /usr/local/lib/python3.4/site-packages/PySide/libshiboken.cpython-34m.1.2.dylib /usr/local/lib/python3.4/site-packages/PySide/QtCore.so
install_name_tool -change @rpath/libpyside.cpython-34m.1.2.dylib /usr/local/lib/python3.4/site-packages/PySide/libpyside.cpython-34m.1.2.dylib /usr/local/lib/python3.4/site-packages/PySide/QtCore.so
在脚本能够运行之前,我需要对 PySide 目录中的几个文件进行这样的操作。
这篇博客文章是一个不错的参考:http://thecourtsofchaos.com/2013/09/16/how-to-copy-and-relink-binaries-on-osx/
如果你看这个,你的问题就能解决了:https://github.com/pyside/packaging/blob/master/setuptools/templates/pyside_postinstall.py
pyside_postinstall.py -install
好吧,这个安装程序有点问题,因为oTool的输出应该显示库的完整路径(这个路径应该通过Pyside安装程序使用install_name_tool来更改)。
与其花时间去搞清楚安装程序的哪个部分出错了,我建议你定义:
DYLD_LIBRARY_PATH=/your/path/to/pyside/libraries
export DYLD_LIBRARY_PATH
这样做会强制执行文件加载器去你提供的路径中查找库,即使这个路径没有通过链接器配置。