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 конфликт друг с другом, но это только предположение.


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

  1. добавить export PYTHONPATH=/your/custom/path to ~/.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:


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

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