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: выберите одну из нескольких версий установленных модулей
  • Как и почему PyCharm изменяет логику импорта Python?
  • добавление каталога в sys.path / PYTHONPATH
  • Python - добавить PYTHONPATH во время запуска модуля командной строки
  • Проблемы с Python 2.x с несколькими версиями в отношении PYTHONPATH
  • Имя модуля отличается от имени каталога?
  • Где разместить файл конфигурации в Python?
  • Как добавить что-то к PYTHONPATH?
  • импорт импорта и изменение динамического пути
  • Создание вторичного каталога сайтов-пакетов (и загрузка пакетов из .pth файлов в нем)
  • не может запускать файл сценария python с помощью приглашения Windows
  •  
    Interesting Posts for Van-Lav

    Ожидаемый синглтон: share.move – сообщество Odoo v9

    Объединение вложенных элементов списка на основе повторяющегося значения

    TypeError: не может конкатенировать объекты 'str' и 'list' в электронной почте

    Как реализовать алгоритм ранжирования на моем веб-сайте для сортировки данных базы данных?

    Ленько транспонировать список в Python

    Получение атрибутов модели из конвейера scikit-learn

    Чтение и печать текстовых файлов

    Как мне получить cx_Oracle для работы с 64-разрядными версиями Itanium Windows?

    Как импортировать cv2 в проект python «Visual Studio 2015»?

    Как скомпилировать OpenCV для iOS7 (arm64)

    Получение pdb в Emacs для использования процесса Python из текущего virtualenv

    Как я могу нарисовать значения NaN как особый цвет с imshow в matplotlib?

    Как установить галочку для оси x для графика штрихов, созданного с помощью pandas DataFrame?

    Python 3.6 datetime.fromtimestamp выдает ошибку при задании 0

    UWSGI + NGINX 502 Bad Gateway

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