PYTHONPATH не работает для sudo на GNU / Linux (работает для root)
EDIT: работает для root, sudo-проблема. Читать ниже.
у меня есть каталог с моими собственными библиотеками, например, мои библиотеки Python расположены в /home/name/lib/py
.
Я добавил этот каталог в путь Python для всех пользователей (включая root), добавив следующую строку /etc/bash.bashrc
:
export PYTHONPATH=$PYTHONPATH:/home/name/lib/py
это работает для всех пользователей (включая root). Но это не работает для суда. Есть ли способ заставить sudo использовать /etc/bash.bashrc
?
EDIT: больше информация:
я добавил PYTHONPATH
в файл sudoers так:Defaults env_keep += "HOME PYTHONPATH"
. Это sitll не работает.
env | grep PYTHON:
PYTHONDONTWRITEBYTECODE=1
PYTHONPATH=/home/name/lib/py
sudo env | grep PYTHON:
PYTHONDONTWRITEBYTECODE=1
sudo echo $PYTHONPATH:
/home/name/lib/py
5 ответов
исправление в моем случае было убрать Defaults !env_reset
от пользователям использовать sudo?.
но, я должен был сохранить Defaults env_keep += "PYTHONPATH"
В пользователям использовать sudo?.
Я на самом деле добавил Defaults env_reset
(который сбрасывает переменные окружения), но он все еще работает из-за env_keep
.
кажется,env_keep
и !env_reset
конфликт друг с другом, но это только предположение.
Итак, весь процесс:
- добавить
export PYTHONPATH=/your/custom/path
to~/.bashrc
или/etc/bash.bashrc
- добавить
PYTHONPATH
кDefaults env_keep += "ENV1 ENV2 ..."
в файле sudoers - удалить
Defaults !env_reset
из файла sudoers, если присутствует
то же самое верно для PATH
переменная, она также не переносится в среду суперпользователя, даже если вы передаете флаг среды сохранения -E
.
Я использую эту команду sudo сейчас без каких-либо других изменений:
sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript
поскольку это альтернативный подход, который работает (для меня), я думал, что поделюсь здесь.
еще один совет:
sudo echo $PYTHONPATH:
/home/name/lib/py
это не сработает. Shell интерпретирует это следующим образом:
1) разверните $PYTHONPATH из переменной env, например:/usr/lib / python
2) выполнить "sudo echo / usr/lib / python"
этого должно быть опубликовано где-то еще. Но суда не будет обрабатывать файл среды по умолчанию. Если вы хотите вызвать этот флаг-i, он должен помочь вам. Он будет имитировать первоначальный вход пользователей.
возможно, вам придется поиграть с тем, где вы ставите свои переменные. http://linux.die.net/man/8/sudo