Установите LD_LIBRARY_PATH перед импортом в python
Python использует переменную среды PYTHONPATH
, чтобы определить, в каких папках он должен искать модули.
Вы можете поиграть с ним, изменив sys.path
, который отлично работает для чистых модулей Python.
Но когда модуль использует общие объектные файлы или статические библиотеки, он ищет те, которые находятся в LD_LIBRARY_PATH
(на linux), но это невозможно изменить так же легко и зависит от платформы, насколько я знаю.
Быстрое исправление этой проблемы - это, конечно, установить переменную среды или вызвать script как LD_LIBRARY_PATH=. ./script.py
, но тогда вам придется снова установить ее для каждой новой оболочки, которую вы открываете.
Кроме того, файлы .so
в моем случае всегда будут находиться в том же каталоге, что и файл .py
, но могут быть хорошо перемещены на другой абсолютный путь, поэтому я бы хотел установить их автоматически каждый раз, когда я вызываю script.
Как я могу отредактировать путь, в котором интерпретатор Python ищет платформу для библиотек независимо от времени выполнения?
EDIT:
Я уже пробовал os.environ['LD_LIBRARY_PATH'] = os.getcwd()
, но безрезультатно.
Ответы
Ответ 1
Я бы использовал:
import os
os.environ['LD_LIBRARY_PATH'] = os.getcwd() # or whatever path you want
Задает переменную среды LD_LIBRARY_PATH
для продолжительности/времени жизни только текущего процесса.
EDIT: похоже, что это необходимо установить перед запуском Python: Изменение LD_LIBRARY_PATH во время выполнения для ctypes
Итак, я предлагаю пойти с оберткой .sh
(или .py
, если вы настаиваете) script. Кроме того, как отметил @chepner, вы можете захотеть установить ваши файлы .so
в стандартном местоположении (в пределах virtualenv).
См. также Настройка LD_LIBRARY_PATH изнутри Python