【问题标题】:Library not loaded error with PySide on OSXOSX 上 PySide 的库未加载错误
【发布时间】:2017-07-19 01:40:06
【问题描述】:

我将下载的 PySide 副本从其原始安装位置 (/Library/PySide/2.7/site-packages/PySide) 移至网络上的某个位置,以便脚本可以访问它。但是,我开始收到“库未加载”错误。我在我的桌面上复制了一份用于测试:

Traceback (most recent call last):
  File "test_pyside_imports.py", line 2, in <module>
    import PySide.QtCore
ImportError: dlopen(/Users/user/Desktop/PySide_OSX/PySide/QtCore.so, 2): Library not loaded: /Library/Python/2.7/site-packages/PySide/libpyside-python2.7.1.2.dylib
  Referenced from: /Users/user/Desktop/PySide_OSX/PySide/QtCore.so
  Reason: image not found

我之前遇到过这个问题,我确信我已经用一个经常运行 install_name_tool 的 bash 脚本修复了它:

#! /usr/bin/env bash
install_name_tool -change @rpath/libpyside-python2.7.1.2.dylib ./PySide/libpyside-python2.7.1.2.dylib ./PySide/QtCore.so
install_name_tool -change @rpath/libshiboken-python2.7.1.2.dylib ./PySide/libshiboken-python2.7.1.2.dylib ./PySide/QtCore.so

但是,由于某种原因,脚本似乎无法解决问题,QtCore.so 仍在原始位置寻找库。我检查了文件的权限并仔细检查了脚本中的路径。知道我缺少什么吗?

谢谢。

编辑

越来越近了。

#! /usr/bin/env bash
install_name_tool -change /Library/Python/2.7/site-packages/PySide/libpyside-python2.7.1.2.dylib ./PySide/libpyside-python2.7.1.2.dylib ./PySide/QtCore.so
install_name_tool -change /Library/Python/2.7/site-packages/PySide/libshiboken-python2.7.1.2.dylib ./PySide/libshiboken-python2.7.1.2.dylib ./PySide/QtCore.so

当我将上述内容作为 bash 脚本运行然后尝试导入时,我收到一个新错误:

D25MG1AZF8J8:PySide_OSX spearsc$ python test_pyside_imports.py 
Traceback (most recent call last):
  File "test_pyside_imports.py", line 2, in <module>
    import PySide.QtCore
ImportError: dlopen(/Users/spearsc/Desktop/PySide_OSX/PySide/QtCore.so, 2): Library not loaded: ./PySide/libpyside-python2.7.1.2.dylib
  Referenced from: /Users/spearsc/Desktop/PySide_OSX/PySide/QtCore.so
  Reason: unsafe use of relative rpath ./PySide/libpyside-python2.7.1.2.dylib in /Users/spearsc/Desktop/PySide_OSX/PySide/QtCore.so with restricted binary

我认为我的第一个 bash 脚本的问题是旧路径不存在并且被忽略了。现在,我需要再试一次,但使用绝对路径。

【问题讨论】:

    标签: python macos install-name-tool


    【解决方案1】:

    这就是诀窍。我不得不在我的 bash 脚本中使用绝对路径。 bash 脚本所做的只是运行“install_name_tool”以将旧路径更改为新路径。

    #! /usr/bin/env bash
    install_name_tool -change /Library/Python/2.7/site-packages/PySide/libpyside-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/libpyside-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/QtCore.so
    install_name_tool -change /Library/Python/2.7/site-packages/PySide/libshiboken-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/libshiboken-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/QtCore.so
    install_name_tool -change /Library/Python/2.7/site-packages/PySide/libpyside-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/libpyside-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/libshiboken-python2.7.1.2.dylib
    install_name_tool -change /Library/Python/2.7/site-packages/PySide/libshiboken-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/libshiboken-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/libshiboken-python2.7.1.2.dylib
    install_name_tool -change /Library/Python/2.7/site-packages/PySide/libpyside-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/libpyside-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/libpyside-python2.7.1.2.dylib
    install_name_tool -change /Library/Python/2.7/site-packages/PySide/libshiboken-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/libshiboken-python2.7.1.2.dylib /Users/spearsc/Desktop/PySide_OSX/PySide/libpyside-python2.7.1.2.dylib
    

    请记住,代码 sn-p 只会更改 QtCore.so、libshiboken-python2.7.1.2.dylib 和 libpyside-python2.7.1.2.dylib 的路径。您还需要为 PySide 文件夹中的所有 .so 文件运行“install_name_tool”。最后,我的 bash 脚本长约 37-38 行。

    【讨论】:

      猜你喜欢
      • 2015-01-15
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 2013-02-09
      相关资源
      最近更新 更多