Добавление переменной окружения под python - PullRequest
2 голосов
/ 09 февраля 2012

Я пытаюсь включить разделяемую библиотеку Matlab в python, если сначала я добавляю следующие переменные в переменную окружения, чем код python работает нормально:

$ export LD_LIBRARY_PATH=/usr/local/MATLAB/R2010b/runtime/glnxa64:/usr/local/MATLAB/R2010b/sys/os/glnxa64:/usr/local/MATLAB/R2010b/sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/usr/local/MATLAB/R2010b/sys/java/jre/glnxa64/jre/lib/amd64/server:/usr/local/MATLAB/R2010b/sys/java/jre/glnxa64/jre/lib/amd64

$ python run.py

Содержимое прогона.py

from ctypes import *

if __name__ == '__main__':    

    dll = CDLL("/home/robu/Documents/tmo_compile/libmatrix/distrib/libmatrix.so")

Я пытался добавить переменные этой среды в pythyon

from ctypes import *

import os

LD_LIBRARY_PATH = "/usr/local/MATLAB/R2010b/runtime/glnxa64:/usr/local/MATLAB/R2010b/sys/os/glnxa64:/usr/local/MATLAB/R2010b/sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/usr/local/MATLAB/R2010b/sys/java/jre/glnxa64/jre/lib/amd64/server:/usr/local/MATLAB/R2010b/sys/java/jre/glnxa64/jre/lib/amd64"
XAPPLRESDIR = "/usr/local/MATLAB/R2010b/X11/app-defaults"

if __name__ == '__main__':    
    os.environ['LD_LIBRARY_PATH'] =  LD_LIBRARY_PATH
    os.environ['XAPPLRESDIR'] =  XAPPLRESDIR

    print os.environ['LD_LIBRARY_PATH']

    dll = CDLL("/home/robu/Documents/tmo_compile/libmatrix/distrib/libmatrix.so")

Но в этом случае я получаю и ошибка

OSError: libmwmclmcrrt.so: cannot open shared object file: No such file or directory

Что яделать неправильно в питоне?


ОБНОВЛЕНО

Я пробовал следующее:

 if(not os.environ.has_key('LD_LIBRARY_PATH')):
        os.environ['LD_LIBRARY_PATH'] =  LD_LIBRARY_PATH
        os.environ['XAPPLRESDIR'] =  XAPPLRESDIR

        os.execve('run.py', (), os.environ)

, но я получаю OSError: [Errno 2] No such file or directory

1 Ответ

2 голосов
/ 09 февраля 2012

Эта переменная окружения читается загрузчиком при первой загрузке.Слишком поздно устанавливать его в Python, поскольку загрузчик был загружен при запуске исполняемого файла Python.Вам нужно будет использовать os.exec*() для замены текущего процесса путем запуска нового исполняемого файла (и, следовательно, загрузки нового загрузчика).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...