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

  • импорт импорта и изменение динамического пути
  • Команда управления Django ImportError
  • Постоянно добавлять каталог в PYTHONPATH
  • Создание вторичного каталога сайтов-пакетов (и загрузка пакетов из .pth файлов в нем)
  • Эффект использования sys.path.insert (0, путь) и sys.path (добавление) при загрузке модулей
  • Как добавить к pythonpath в Windows 7?
  • Как импортировать несколько местоположений в PYTHONPATH (bash)
  • ОШИБКА: virtualenvwrapper не смог найти virtualenv на вашем пути
  •  
    Interesting Posts for Van-Lav

    Как извлечь все значения определенного ключа из списка словарей?

    поиск кратчайшего пути, исключающего определенные края?

    Как установить wxPython на Mac OS X?

    Невозможно выполнить замену

    подавлять научную нотацию при записи python float в файлы

    Pandon pandas, варианты построения нескольких строк

    Можно ли получить доступ к необработанным устройствам с помощью python с окнами?

    Опасность смешивания матрицы и матрицы

    Проблемы с распаковкой Pandas: ValueError: индекс содержит повторяющиеся записи, не может изменять форму

    Как перевести эту математическую формулу в Haskell или Python? (Был переведен на PHP)

    Почему у Python нет статических переменных?

    Передача объектов python в качестве аргументов функции C / C ++ с использованием ctypes

    создание класса, который ведет себя как любая переменная, но имеет обратный вызов при изменении / чтении

    Как быстро можно отправлять последовательные и независимые задания с помощью qsub?

    Python numpy: создать 2d массив значений на основе координат

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