Модуль Python не может загрузить разделяемую библиотеку, Причина: изображение не найдено

Я пытаюсь использовать модуль Python Houdini, который поставляется вместе с приложением и является частью установочной папки Houdini, вне стандартных путей Python. После выполнения инструкций по установке запустите скрипт Houdini Terminal 16.5.571 и добавьте /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs в _virtualenv_path_extensions.pth в моем site-packages папка hou модуль может быть импортирован, часть Python, которая является. Однако не удается загрузить динамические библиотеки.

Сообщение об ошибке

Traceback (most recent call last):

File "myscript.py", line 7, in <module>
    import hou
  File "/Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/hou.py", line 19, in <module>
    import _hou
ImportError: dlopen(/Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so, 2): Library not loaded: @rpath/Houdini.framework/Versions/16.5.571/Houdini
  Referenced from: /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so
  Reason: image not found

Все файлы и папки, упомянутые в сообщении об ошибке, находятся в пути Houdini. /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current с Current будучи символической ссылкой на 16.5.571,

Модуль Python

Resources/houdini/python2.7libs/hou.py

Модуль Python найден.

Общие библиотеки

Resources/houdini/python2.7libs/_hou.so`

Это содержит ссылку на @rpath/Houdini.framework/Versions/16.5.571/Houdini который он, вероятно, пытается найти.

Houdini

Это похоже на фактическую dylib файлы, содержащие @loader_path/Libraries а также dylib...@rpath/libHoudiniUI и т.д. и многое другое.

Я читал здесь Не удается найти динамическую библиотеку при запуске скрипта Python из Bazel, что SIP может быть причиной, но даже после ln -s общие библиотеки в /usr/local/lib ошибка все еще произошла.

я использую pyenv но попытался с системной средой Python, что привело к тому же поведению.

Какие-либо предложения?

1 ответ

Решение

Ответ в dyld: Библиотека не загружена... Причина: изображение не загружено, указало мне правильное направление, предлагая переписать пути динамической библиотеки, используя otool,

Список всех библиотек, загруженных _hou.so, показывает следующий список, с @rpath/Houdini.framework/Versions/16.5.571/Houdini будучи тем, кто вызывает проблему.

otool -L /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so
/Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so:
    @rpath/Houdini.framework/Versions/16.5.571/Houdini (compatibility version 1.0.0, current version 16.5.255)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1443.14.0)
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 22.0.0)
    /System/Library/Frameworks/QTKit.framework/Versions/A/QTKit (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 492.0.0)
    /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.0)

Переписать путь можно с помощью install_name_tool -change,

install_name_tool -change @rpath/Houdini.framework/Versions/16.5.571/Houdini /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/16.5.571/Houdini /Applications/Houdini/Houdini16.5.571/Frameworks/Houdini.framework/Versions/Current/Resources/houdini/python2.7libs/_hou.so

Может быть, лучше использовать относительный путь.

Другие вопросы по тегам