Подтвердить что ты не робот

Установите 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(), но безрезультатно.

4b9b3361

Ответ 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