Почему переменные среды Python различаются при выполнении с веб-сервера?

У меня есть следующий исполняемый скрипт python:

#!/usr/bin/python import os print os.environ 

когда я выполняю его из командной строки с правами root, я получаю следующее:

 { 'LANG': 'en_US.UTF-8', 'TERM': 'xterm-256color', 'SHELL': '/bin/bash', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'LANGUAGE': 'en_US:en', 'SHLVL': '1', 'SSH_TTY': '/dev/pts/0', 'OLDPWD': '/var/www/bais-mordechai-laravel', 'COMP_WORDBREAKS': ' \t\n"\'><;|&(:', 'PWD': '/var/www/bais-mordechai-laravel/public', 'LESSOPEN': '| /usr/bin/lesspipe %s', 'SSH_CLIENT': '71.205.188.8 56489 22', 'LOGNAME': 'root', 'USER': 'root', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games', 'MAIL': '/var/mail/root', 'LS_COLORS':'...', 'HOME': '/root', '_': './pythontest', 'SSH_CONNECTION': '...' } 

Но когда я запускаю это из php-скрипта (работает на сервере nginx) и повторяю результат, я получаю:

 { 'HOME': '/var/www', 'PWD': '/var/www/bais-mordechai-laravel/public', 'USER': 'www-data' } 

Почему они разные? В частности, как я могу заставить веб-версию включить переменную «PATH»?

Related of "Почему переменные среды Python различаются при выполнении с веб-сервера?"

Для apache см. Mod_setenv .

Этот модуль позволяет управлять внутренними переменными среды, которые используются различными модулями HTTP-сервера Apache. Эти переменные также предоставляются сценариям CGI в качестве встроенных переменных среды системы и доступны для использования на страницах SSI. Переменные среды могут быть переданы из оболочки, которая вызвала процесс httpd. В качестве альтернативы переменные среды могут быть установлены или отменены в процессе настройки.

Если вы используете FCGId от Apache, см. FcgidInitialEnv .

Используйте FcgidInitialEnv для определения переменных окружения для перехода к приложению FastCGI. Эта директива может использоваться несколько раз.

Этот параметр применяется ко всем приложениям, созданным для этого сервера или виртуального хоста. Используйте FcgidCmdOptions, чтобы применить этот параметр к одному приложению.

Для Nginx CGI см. Настройку env .

По умолчанию nginx удаляет все переменные среды, унаследованные от родительского процесса, за исключением переменной TZ. Эта директива позволяет сохранить некоторые унаследованные переменные, изменить их значения или создать новые переменные среды.

Если вы используете NgxWSGIModule, см. Параметр wsgi_var .

Директива назначает переменную, которая будет добавлена ​​в словарь среды, переданный в приложение WSGI. В качестве значений можно использовать строки, nginx-переменные и их комбинацию. Не заданные директивы наследуются от внешнего уровня.

Если вы используете приложение (gunicorn | tornado | twisted | etc) + supervisord, см. Директиву об окружающей среде .

Список пар ключ / значение в форме KEY = "val", KEY2 = "val2", который будет помещен в среду процесса супервизора (и, как результат, во все среды его дочернего процесса). Этот параметр может включать значение% (здесь) s, которое расширяется до каталога, в котором был найден файл конфигурации суперсайда. Значения, содержащие не буквенно-цифровые символы, должны быть указаны (например, KEY = "val: 123", KEY2 = "val, 456"). В противном случае цитирование значений является необязательным, но рекомендуется. Обратите внимание, что подпроцессы будут наследовать переменные среды оболочки, используемые для запуска супервизора, за исключением переопределенных здесь и внутри среды среды программы.

Если вы используете что-то еще, дайте мне знать.

Вы всегда можете вводить переменные среды с помощью os.environ – делать это в начале вашего (c | fc | ws) gi.py скрипта. Se также sys.path :

 sys.path.append('/usr/local/django')