PYTHONPATH не работает для sudo на GNU / Linux (работает для root)

EDIT: Работа для root, sudo – проблема. Читай ниже.

У меня есть каталог с моими собственными библиотеками, например, мои библиотеки Python расположены в /home/name/lib/py .
Я добавил этот каталог в PATH Python для всех пользователей (включая root), добавив следующую строку в /etc/bash.bashrc :

 export PYTHONPATH=$PYTHONPATH:/home/name/lib/py 

Он работает для всех пользователей (включая root). Но это не работает для sudo. Есть ли способ заставить 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 Solutions collect form web for “PYTHONPATH не работает для sudo на GNU / Linux (работает для root)”

Исправление в моем случае состояло в том, чтобы удалить Defaults !env_reset из sudoers.

Но в sudoers мне пришлось оставить Defaults env_keep += "PYTHONPATH" .
Я фактически добавил Defaults env_reset (который сбрасывает переменные среды), но он по-прежнему работает из-за env_keep .

Кажется, что env_keep и !env_reset конфликтуют с eachother, но это всего лишь предположение.


Итак, весь процесс:

  1. добавить export PYTHONPATH=/your/custom/path к ~/.bashrc или /etc/bash.bashrc
  2. добавить PYTHONPATH к значениям по Defaults env_keep += "ENV1 ENV2 ..." в файле sudoers
  3. удалить по 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»

Альтернативы манипулированию PYTHONPATH :

  • virtualenv
  • Distutils

Вероятно, это должно быть опубликовано где-то в другом месте. Но sudo не будет обрабатывать файл окружения по умолчанию. Если вы хотите вызвать, что флаг -i должен помочь вам. Он будет имитировать, что пользователи начального входа.

Возможно, вам придется поиграть с тем, где вы тоже ставите свои переменные. http://linux.die.net/man/8/sudo

Python - лучший язык программирования в мире.