Ваш сценарий может проверить наличие / правильность переменной среды перед импортом модуля, затем установить его в os.environ, если он отсутствует, и затем вызвать os.execv () для перезапускаинтерпретатор python, использующий те же аргументы командной строки, но обновленный набор переменных среды.
Это рекомендуется только до любого другого импорта (кроме os и sys) из-за потенциальногоимпортировать побочные эффекты, такие как дескрипторы открытых файлов или сокеты, которые могут быть затруднены при чистом закрытии.
Этот код устанавливает LD_LIBRARY_PATH и ORACLE_HOME:
#!/usr/bin/python
import os, sys
if 'LD_LIBRARY_PATH' not in os.environ:
os.environ['LD_LIBRARY_PATH'] = '/usr/lib/oracle/XX.Y/client64/lib'
os.environ['ORACLE_HOME'] = '/usr/lib/oracle/XX.Y/client64'
try:
os.execv(sys.argv[0], sys.argv)
except Exception, exc:
print 'Failed re-exec:', exc
sys.exit(1)
#
# import yourmodule
print 'Success:', os.environ['LD_LIBRARY_PATH']
# your program goes here
Вероятно, лучше установить эту переменную среды как часть начальной среды (в родительском процессе или файле задания systemd / etc).