Почему переменные среды, установленные в командной строке, не действуют при запуске Spyder

Я использую IDE Spyder Anaconda для Python. Я пишу код в Spyder IDE, который требует установки нескольких переменных среды ($ CPATH, $ LIBRARY_PATH и $ LD_LIBRARY_PATH) для библиотеки Theano.

Я запускаю Spyder с помощью команды

sudo ./spyder 

и заводится нормально. Несмотря на то, что я установил переменные среды в моем

/root/.bashrc

файл, код по-прежнему не может принять путь, и если я попытаюсь напечатать

print os.environ["LD_LIBRARY_PATH"]

он вызывает KeyError.

Я пробовал все вышеперечисленное с обычным пользователем, но все равно не получается. Как я могу заставить Spyder IDE просматривать файлы по указанным выше путям и где я могу установить их внутри Spyder?


person London guy    schedule 01.07.2015    source источник
comment
Попробуйте sudo env. Это отделит проблемы со spyder от проблем с не запущенной оболочкой .bashrc   -  person Robert Jacobs    schedule 01.07.2015
comment
.bashrc читается только для интерактивных оболочек   -  person mata    schedule 01.07.2015
comment
попробуйте объявить переменные прямо в коде: os.environ["LD_LIBRARY_PATH"]="exact/path/to/folder"   -  person Andersson    schedule 01.07.2015
comment
@Andersson Я даже настроил с помощью os.environ. Не работает :(.   -  person London guy    schedule 01.07.2015
comment
@RobertJacobs Я сделал sudo env, и он печатает множество переменных среды. Я не вижу своих переменных в списке. Это забота?   -  person London guy    schedule 01.07.2015
comment
Можете ли вы добавить переменные env перед sudo? Или запустите скрипт, который устанавливает их перед вызовом spyder. Или запустите sudo -i , затем запустите spyder.   -  person Robert Jacobs    schedule 01.07.2015
comment
Спасибо всем. Наконец, это работает, только когда я делаю sudo LD_LIBRARY_PATH=/usr/lib/ LIBRARY_PATH=/usr/lib CPATH=/usr/lib python ‹file_name.py›. Это означает, что только если я установлю его в командной строке перед запуском файла, он будет работать нормально. Установка его в /root/.bashrc совсем не помогает.   -  person London guy    schedule 01.07.2015
comment
Возможно, это глупый вопрос, но зачем вам запускать редактор с правами root? В частности, сохранение LD_LIBRARY_PATH в качестве переменной среды, вероятно, имеет более серьезные последствия для безопасности, чем вы думаете, и мне интересно, нужно ли вам это вообще?   -  person SingleNegationElimination    schedule 01.07.2015


Ответы (1)


Вам нужно сообщить файлу sudoers, какие переменные окружения следует сохранить при использовании команды sudo.

Чтобы отредактировать файл sudoers, запустите.

sudo visudo

Затем добавьте следующую строку в конец.

Defaults env_keep = "LD_LIBRARY_PATH CPATH LIBRARY_PATH"

Затем export ваша переменная.

export LD_LIBRARY_PATH="/path/to/library"

Теперь вы должны быть в состоянии запустить его.

Дополнительную информацию можно найти здесь Как сохранить переменные среды при использовании SUDO

person Dobz    schedule 01.07.2015
comment
Я пробую это сейчас. - person London guy; 01.07.2015
comment
Можете ли вы помочь мне добавить больше переменных среды, чтобы сохранить? Должен ли я просто оставить пробел в кавычках и добавить больше? У меня их 3 - person London guy; 01.07.2015
comment
Я пробую это сейчас. - person London guy; 01.07.2015
comment
Как правило, это очень плохой совет. Именно эти переменные среды не сохраняются sudo, потому что их сохранение представляет собой большой риск для безопасности. avdice должен заключаться в том, чтобы создать скрипт-оболочку или не запускать IDE от имени пользователя root, не позволять sudo сохранять небезопасные переменные среды. - person mata; 01.07.2015