У меня python время выполнения на aws лямбде. Так как существует известная проблема, что ghostscript не работает на aws lambda ami (в моем случае это amazon linux из-за python 3.7). Поэтому я собрал все, чего не хватает на ami, и сгруппировал его с пакетом. Следующим шагом было установить
LD_LIBRARY_PATH = /tmp/project/ghostscript/
Теперь, когда я запускаю
print(os.listdir(os.environ['LD_LIBRARY_PATH']))
, я получаю
['libjbig.so.0', 'libpaper.so.1', 'libijs-0.35.so', 'libgs.so', 'libfreetype.so.6', 'libfontconfig.so.1', 'libtiff.so.5', 'libjbig2dec.so.0', 'libidn.so.11', 'libjpeg.so.8']
Пока все хорошо, теперь, когда я делаю вручную
print(ctypes.util.find_library('gs'))
Я получаю
'libgs.so'
Выглядит хорошо. Следующим шагом является загрузка библиотеки, поэтому
ctypes.cdll.LoadLibrary('libgs.so')
и она ломается
OSError: libgs.so: cannot open shared object file: No such file or directory
Теперь, как я понимаю, dlopen на linux идет по порядку (не говоря об условиях) rpath -> ld_library_path - > runpath -> cache -> usr / lib et c. Так почему же он не может найти мой так.
Итак, чтобы проверить, я изменил имя библиотеки libgs.so на /tmp/project/ghostscript/libgs.so и загружается (из-за abs путь), но не удалось связать один из его необходимых с той же ошибкой.
Последние два шага от стороннего модуля, поэтому изменение его не является хорошим вариантом. Я думаю, что LD_LIBRARY_PATH игнорируется. Пожалуйста, дайте мне знать ваши мысли.
Спасибо