Модуль 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
Может быть, лучше использовать относительный путь.