Что такое переменные окружения
Перейти к содержимому

Что такое переменные окружения

  • автор:

Переменные окружения — Основы командной строки

Команда cd без аргументов делает домашнюю директорию пользователя рабочей. Возникает вопрос, каким образом она узнает о том, где находится домашняя директория?

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

Эта команда ориентируется на так называемую переменную окружения, которую мы изучим в этом уроке.

Что такое переменные окружения

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

Посмотреть установленные переменные можно командой env (environment). Ниже неполный список этих переменных, которые доступны на одном из серверов Хекслета:

env TERM=xterm-256color SHELL=/bin/bash LC_ALL=en_US.UTF-8 USER=kirill.m HEXLET_VERSION=v2711 PATH=/home/kirill.m/bin:/home/kirill.m/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin PWD=/home/kirill.m LANG=en_US.UTF-8 SHLVL=1 HOME=/home/kirill.m LOGNAME=kirill.m 

Формат вывода очень простой: слева от знака равно расположено имя переменной, справа — значение. В вашем случае вывод команды env будет отличаться не только значениями этих переменных, но и их составом. Например, у вас точно не будет HEXLET_VERSION , но наверняка будет HOME , только с другим значением.

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

Возьмем для примера ту же команду cd . Она знает лишь то, что домашняя директория доступна в переменной окружения HOME . Как она попала в систему — не важно.

Без переменной окружения пришлось бы делать одну из двух вещей:

  • При вызове cd каждый раз указывать, где находится домашняя директория. Например, так: cd —home-dir /home/kirill.m . Такой способ убивает весь смысл быстрого перехода в домашнюю директорию
  • Договариваться, что где-то будет храниться специальный файл с настройками, в том числе домашней директории. Настройки из этого файла будут читаться командой cd при каждом запуске

Существует некоторый базовый набор переменных, которые всегда устанавливаются bash при старте. Они используются большим количеством утилит и нужны для нормального функционирования системы. Одну из таких переменных мы уже знаем — это HOME :

# Для вывода переменной используется echo, # а перед самой переменной ставится знак $ echo $HOME /home/kirill.m # Вокруг знака `=` не должно быть пробелов HOME=/tmp echo $HOME /tmp # Возвращаем обратно HOME=/home/kirill.m echo $HOME /home/kirill.m 

Теперь проведем эксперимент: попробуем установить HOME и выполнить переход в эту директорию с помощью команды cd , которая должна отправить нас в домашнюю директорию:

# Достаточно выполнить присваивание слева от запускаемой команды HOME=/tmp cd /tmp pwd /tmp 

Команда cd выполнила переход по пути, указанном в переменной HOME . Теперь снова сделаем cd , но не добавляя определение переменной слева:

cd pwd /home/kirill.m echo $HOME /home/kirill.m 

В этот раз произошел переход в настоящую домашнюю директорию. Получается, что вызов HOME=/tmp cd изменил переменную только для того конкретного запуска. И действительно, существует два способа задавать значение переменной окружения: локальный и глобальный.

Когда мы указали HOME=/tmp прямо перед командой cd , то переменная не была изменена для текущей сессии — она была изменена для запущенной команды, в данном случае cd . Такой трюк можно проделывать с любой командой.

Другой способ установки изменяет значение глобально, для всей сессии и выполняется так:

echo $HOME /home/kirill.m export HOME=/tmp cd pwd /tmp echo $HOME /tmp 

Обратите внимание, что изменение происходит в рамках текущей сессии. Другими словами, если у нас открыто две вкладки терминала, то изменение произойдет только в той вкладке, в которой мы написали команду.

Особую роль среди переменных окружения играет PATH — еще одна важная переменная. Сложности с ней возникают настолько часто, что этой переменной посвящен практически целый урок впереди.

Самостоятельная работа

Изучите переменные окружения в вашей локальной среде, набрав команду env .

Дополнительные материалы

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

  • Статья «Как учиться и справляться с негативными мыслями»
  • Статья «Ловушки обучения»
  • Статья «Сложные простые задачи по программированию»
  • Урок «Как эффективно учиться на Хекслете»
  • Вебинар « Как самостоятельно учиться »

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Что такое переменные окружения и как их использовать

Узнайте, что такое переменные окружения, как их использовать для безопасности и конфигурирования веб-приложений.

Web developer using environment variables for secure coding.

Алексей Кодов
Автор статьи
1 июня 2023 в 11:54

Переменные окружения — это набор значений, которые определяют поведение и настройки операционной системы, а также других программ, работающих в этой среде. Они могут быть использованы для хранения информации, которую используют различные приложения, и для настройки системных параметров. В веб-разработке они обычно используются для хранения секретных данных, таких как ключи API, пароли и других конфиденциальных данных.

Примеры переменных окружения

Одним из наиболее известных примеров переменных окружения является PATH . Эта переменная содержит список директорий, в которых операционная система ищет исполняемые файлы. Другие примеры включают HOME , который указывает на домашнюю директорию пользователя, и LANG , который задает язык и региональные настройки системы.

# Пример переменных окружения в Linux/Unix export API_KEY="your_api_key_here" export DATABASE_URL="your_database_url_here" # Пример переменных окружения в Windows set API_KEY="your_api_key_here" set DATABASE_URL="your_database_url_here"

Как использовать переменные окружения

Для доступа к переменным окружения в ваших приложениях вам потребуется использовать специальные функции и методы, предоставляемые вашим языком программирования или фреймворком. Например, в Python вы можете использовать модуль os для доступа к переменным окружения:

import os api_key = os.environ.get("API_KEY") database_url = os.environ.get("DATABASE_URL")

В Node.js вы можете использовать объект process.env для доступа к переменным окружения:

const apiKey = process.env.API_KEY; const databaseUrl = process.env.DATABASE_URL;

Веб-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Зачем использовать переменные окружения

Использование переменных окружения имеет ряд преимуществ, таких как:

  1. Безопасность: Хранение секретных данных в переменных окружения позволяет избежать их случайного разглашения, так как они не включаются в исходный код вашего проекта.
  2. Конфигурируемость: Переменные окружения позволяют легко изменять конфигурацию приложения, не изменяя сам код. Это особенно полезно при развертывании приложения на разных стадиях разработки, таких как тестирование, стейджинг и продакшн.
  3. Портативность: Использование переменных окружения делает ваше приложение более независимым от конкретной платформы или окружения, так как они могут быть легко настроены для разных сценариев.

Теперь вы знаете, что такое переменные окружения и как их использовать в веб-разработке. Удачи вам на пути изучения этой увлекательной области! ��

Environment variables (Русский)

Состояние перевода: На этой странице представлен перевод статьи Environment variables. Дата последней синхронизации: 19 октября 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

  • Приложения по умолчанию
  • systemd/Пользователь#Переменные окружения

Переменная окружения — именованный объект, содержащий текстовую информацию, которую могут использовать запускаемые программы. Проще говоря, это переменная с именем и значением. Значением такой переменной может быть, например, место размещения исполняемых файлов в системе, имя предпочитаемого текстового редактора или настройки системной локали. Новые в Linux пользователи часто находят такой способ хранения настроек неудобным. Однако переменные окружения позволяют простым и надёжным способом передавать настройки сразу для множества приложений.

Утилиты

Пакет coreutils содержит программы printenv и env. Программа printenv позволяет отобразить список текущих переменных окружения и их значения:

$ printenv

Примечание: Некоторые переменные окружения относятся к конкретному пользователю в системе. Вы можете убедиться в этом, сравнив выводы команды printenv, запущенной обычным пользователем и суперпользователем.

Программа env может быть использована для запуска команд с указанием нового значения переменной окружения. В следующем примере будет запущен xterm, для которого переменная окружения EDITOR имеет значение vim . Такой вызов не затронет переменную окружения EDITOR в текущем сеансе терминала.

$ env EDITOR=vim xterm

Встроенная в командную оболочку команда set(1p) позволяет вам устанавливать значения переменных окружения в текущем сеансе терминала, а также отображать имена и значения переменных окружения текущего сеанса.

Чтобы увидеть переменные окружения конкретных процессов, откройте файл /proc/pid/environ , где pid — числовой идентификатор интересующего процесса. Записи в этом файле отделены друг от друга нулевым байтом ( \x0 ), который обычно не виден в терминале. Вы можете использовать, например, sed для отображения переменных окружения процесса в более читабельном формате, заменив нулевые байты на переносы строки: sed ‘s:\x0:\n:g’ /proc/$PID/environ

Установка переменных

Чтобы избежать замусоривания переменных окружения, стоит по возможности ограничивать области действия переменных. Кроме того, графические сеансы и службы systemd требуют установки переменных в определённых местах, чтобы они сработали. Область действия переменных окружения разделяется на контексты, на которые они влияют:

  • системный — все программы у любых пользователей, кроме служб systemd;
  • пользовательский — все программы определённого пользователя, кроме служб systemd (смотрите systemd/Пользователь#Переменные окружения) или графических окружений (смотрите раздел #Графические приложения).

На системном уровне

С помощью файлов инициализации оболочки

Большинство дистрибутивов Linux советуют изменять или добавлять переменные окружения в /etc/profile или других местах. Имейте в виду, что сразу множество файлов могут содержать переменные окружения и переопределять их, вроде /etc/locale.conf . По сути, любой скрипт может быть использован для этого, однако по принятым в UNIX соглашениям следует использовать для этого только определённые файлы.

Для установки переменных окружения на уровне всей системы можно использовать следующие файлы (каждый со своими ограничениями):

  • /etc/environment используется модулем pam_env. Он не привязан к командным оболочкам, поэтому скрипты или glob-выражения использовать здесь нельзя. Здесь можно указывать только пары имя=значение .
  • /etc/profile устанавливает переменные только в оболочках входа (когда пользователь выполняет вход в систему). В нём можно запускать скрипты (например, запускаются скрипты из каталога /etc/profile.d/ ) и он может использоваться в оболочках, совместимых с Bourne shell.
  • Файлы настроек, специфичные для конкретных командных оболочек — глобальные файлы настроек для вашей командной оболочки, инициализирует переменные и запускает скрипты. Например, Bash (Русский)#Файлы настроек (например, ~/.bashrc ) или Zsh (Русский)#Файлы запуска/завершения (например, ~/.zshrc ).

Ниже приведён пример скрипта, который создаёт функцию для добавления нескольких каталогов (например, ~/bin и ~/scripts ) в PATH . Чтобы это сделать, просто поместите код в один из системных файлов инициализации окружения ( /etc/profile или /etc/bash.bashrc ):

set_path()< # Проверяем, что id пользователя 1000 или больше [ "$(id -u)" -ge 1000 ] || return for i in "$@"; do # Проверяем существование каталога [ -d "$i" ] || continue # Проверяем, что его ещё нет в $PATH. echo "$PATH" | grep -Eq "(^|:)$i(:|$)" && continue # Затем добавляем в $PATH и экспортируем переменную export PATH="$:$i" done > set_path ~/bin ~/scripts

Одним из способов использования общих переменных окружения в разных оболочках является создание файла без комментариев, пустых строк и пробелов (bash), который может быть прочитан непосредственно программой envsubst (вдохновлено [1]):

EDITOR=vim XDG_CACHE_HOME=$HOME/.cache XDG_CONFIG_HOME=$HOME/.config XDG_DATA_HOME=$HOME/.local/share XDG_STATE_HOME=$HOME/.local/state
bashrc
export $(envsubst < .env)
config/fish/config.fish
export (envsubst < .env)
С помощью pam_env

PAM-модуль pam_env(8) загружает переменные для прописывания в окружение из этих файлов в указанном порядке: /etc/security/pam_env.conf и /etc/environment .

  • Эти файлы считываются перед другими файлами, в частности перед ~/.profile , ~/.bash_profile и ~/.zshenv .
  • Устаревший файл ~/.pam_environment больше не считывается. Смотрите FS#68945.

/etc/environment должен содержать только простые пары вида ПЕРЕМЕННАЯ=значение на отдельных строках, например:

EDITOR=nano

/etc/security/pam_env.conf имеет формат:

ПЕРЕМЕННАЯ [DEFAULT=значение] [OVERRIDE=значение]

@ и @ являются специальными переменными, значение которых берётся из /etc/passwd . Следующий пример показывает, как использовать переменную HOME внутри другой переменной:

XDG_CONFIG_HOME DEFAULT=@/.config

Примечание: Переменные $ и $ не связаны с переменными окружения HOME и SHELL , по умолчанию они не задаются.

Формат также позволяет расширить уже определённые переменные значениями из других переменных с помощью $ПЕРЕМЕННАЯ> , например:

GOPATH DEFAULT=$/go

Пары ПЕРЕМЕННАЯ=значение тоже допускаются, но расширение переменных здесь не поддерживается. Подробнее смотрите pam_env.conf(5) .

На уровне пользователя

Не всегда требуется устанавливать переменные окружения на уровне системы. Например, вы можете захотеть добавить свой каталог /home/пользователь/bin в PATH , однако не хотите, чтобы это затрагивало других пользователей системы. Пользовательские переменные окружения можно устанавливать во многих файлах:

  • Файлы инициализации командной оболочки, например Bash (Русский)#Файлы настроек или Zsh (Русский)#Файлы запуска/завершения.
    • Если вы не хотите ограничить область действия переменных только открытыми терминалами (например, только для приложений командной строки), вы скорее всего хотите изменить параметры оболочки входа.

    Например, чтобы добавить каталог в PATH , поместите следующее в ~/.bash_profile :

    export PATH

    Для применения изменений перелогиньтесь или выполните source: $ source ~/.bash_profile .

    Примечание: Демон dbus и пользовательский экземпляр systemd не наследуют никакие переменные окружения из мест вроде ~/.bashrc . Это означает, что, например, активируемые через dbus программы вроде GNOME Files не будут использовать их по умолчанию. Смотрите systemd/Пользователь#Переменные окружения.

    Совет: С помощью команды export -p можно просмотреть глобальные и локальные переменные окружения, объявленные для пользовательского сеанса.

    Графические приложения

    Если переменная окружения влияет только на графические приложения, можно ограничить область её применения, установив её только в рамках графического сеанса. В порядке сужения области:

    • #На уровне Xorg или #На уровне Wayland — охватывают весь графический сеанс, в том числе наверняка среду рабочего стола;
    • #На уровне графического сеанса — охватывает приложения, запущенные в рамках графического сеанса, в том числе, возможно, и среду рабочего стола;
    • #На уровне приложения — только для отдельного графического приложения.
    На уровне графического сеанса

    Некоторые графические окружения (например, KDE Plasma), поддерживают запуск скриптов при входе: можно использовать их для установки переменных окружения. Пример есть в статье KDE (Русский)#Автозапуск приложений.

    На уровне Xorg

    Установка переменных окружения для сеанса Xorg зависит от того, каким конкретно способом он запускается:

    • Большинство экранных менеджеров выполняют source файла xprofile.
    • startx и SLiM выполняют xinitrc.
    • XDM выполняет ~/.xsession ; смотрите XDM (Русский)#Определение сеанса.
    • SDDM дополнительно выполняет source скриптов оболочек входа, вроде ~/.bash_profile для bash или ~/.zprofile и ~/.zlogin для zsh. [2]

    Хотя конец скрипта зависит от того, какой это файл, а любой расширенный синтаксис зависит от используемой оболочки, базовое использование универсально:

    ~/.xprofile, ~/.xinitrc или ~/.xsession
    . export ПЕРЕМЕННАЯ=значение .
    На уровне Wayland

    Так как Wayland не использует Xorg-специфичные файлы, GDM и KDE Plasma вместо них загружают пользовательские переменные окружения systemd.

    ~/.config/environment.d/envvars.conf
    ПЕРЕМЕННАЯ=значение

    Другие экранные менеджеры (например, SDDM) пока что не поддерживают это напрямую. Однако SDDM выполняет source скриптов оболочек входа и для сеансов Wayland тоже.

    Если ваш экранный менеджер выполняет скрипты запуска вроде ~/.bash_profile и вы хотите использовать environment.d , то с помощью run-parts можно сделать так:

    ~/.bash_profile
    # использует systemd-environment-d-generator(8) для генерации переменных окружения и экспортирует их export $(run-parts /usr/lib/systemd/user-environment-generators | sed '/:$/d; /^$/d' | xargs)

    Примечание: Этот код запускает все исполняемые файлы в каталоге /usr/lib/systemd/user-environment-generators , что может быть как желательным, так и нежелательным. Если нужно, запускайте /usr/lib/systemd/user-environment-generators/30-systemd-environment-d-generator напрямую.

    На уровне приложения

    Чтобы установить переменные окружения только для определённого приложения вместо целого сеанса, измените .desktop файл этого приложения. Смотрите Ярлыки приложений#Изменение переменных окружения.

    Для игры из Steam можно настроить окружение, отредактировав её параметры запуска.

    На уровне сеанса или оболочки

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

    В таком случае можно определить переменную PATH в текущем сеансе с помощью команды export. Пока командная оболочка продолжает работать, все запускаемые в ней процессы будут использовать изменённое значение переменной.

    $ export PATH="$:/home/my_user/tmp/usr/bin"

    Примеры

    В этом разделе описываются типовые переменные окружения, используемые в Linux.

    • XDG_CURRENT_DESKTOP — это переменная freedesktop.org, содержащая список разделённых двоеточиями строк, которыми идентифицируется среда рабочего стола[3]. Стандартные значения — GNOME , GNOME-Flashback , KDE , LXDE , LXQt , MATE , TDE , Unity , XFCE , EDE , Cinnamon , Pantheon и DDE [4].
      • Cinnamon был зарегистрирован позже других сред. В итоге некоторые приложения по-прежнему ожидают старое нестандартное значение X-CINNAMON , например Qt[5].
      • XDG_SESSION_DESKTOP похожа на XDG_CURRENT_DESKTOP , но допускает использование только одной строки. Несмотря на название, переменная не входит в стандарт freedesktop.org.
      • DE — более старая переменная для обозначения текущей среды рабочего стола (Desktop Environment). Её значения не стандартизированы, но можно ориентироваться на xdg-utils как на справочник типовых значений для многих сред рабочего стола.
      • DESKTOP_SESSION — ещё одна старая переменная, но используется реже, чем DE . Значение также может быть путём к файлу .desktop сеанса в каталоге /usr/share/xsessions/ [6].
      • WINDOW_MANAGER — переменная, иногда используемая для выбораоконного менеджера, который будет использоваться в среде рабочего стола. Это отличает её от других упомянутых здесь переменных, которые устанавливаются уже выбранным экранным менеджером или средой рабочего стола и используется для чтения другими программами.
      • PATH содержит список каталогов, разделённых двоеточиями, в которых система ищет исполняемые файлы. Когда обычная команда (например, ls, systemctl или pacman) интерпретируется командной оболочкой (например, bash или zsh), оболочка ищет исполняемый файл с указанным именем в каталогах из этого списка и, если находит, запускает файл, передав ему указанные аргументы командной строки. Чтобы запускать исполняемые файлы, пути к которым не находятся в PATH , необходимо указывать относительный или абсолютный путь к файлу, например ./a.out или /bin/ls .

      Примечание: Из соображений безопасности, не рекомендуется включать текущий каталог ( . ) в список PATH , так как это может спровоцировать случайный запуск вредоносного исполняемого файла.

      • HOME содержит путь к домашнему каталогу текущего пользователя. Эта переменная может использоваться приложениями для определения расположения файлов настроек пользователя, который их запускает.
      • PWD содержит путь к текущему рабочему каталогу.
      • OLDPWD содержит путь к предыдущему рабочему каталогу, то есть, значение PWD перед последним вызовом cd.
      • TERM содержит тип запущенного терминала, например xterm-256color . Это используется некоторыми программами, которые хотят знать возможности текущего терминала.
      • MAIL содержит путь к каталогу, где сохраняется входящая почта. Обычно имеет значение /var/spool/mail/$LOGNAME .
      • ftp_proxy и http_proxy содержат адреса прокси-серверов для протоколов FTP и HTTP соответственно:
      ftp_proxy="ftp://192.168.0.1:21" http_proxy="http://192.168.0.1:80"
      • MANPATH содержит разделённый двоеточиями список каталогов, которые использует man для поиска man-страниц.

      Примечание: В /etc/profile есть комментарий "Man is much better than us at figuring this out", так что эту переменную обычно стоит не задавать. Смотрите manpath(5) .

      • INFODIR содержит разделённый двоеточиями список каталогов, которые использует info для поиска info-страниц, например /usr/share/info:/usr/local/share/info .
      • TZ может использоваться для установки временной зоны. Можно ссылаться на файл из /usr/share/zoneinfo/ , например TZ=":/usr/share/zoneinfo/Europe/Moscow" , тогда перед путём к файлу должно стоять двоеточие (смотрите документацию GNU).

      Программы по умолчанию

      • SHELL содержит путь к предпочитаемой командной оболочке текущего пользователя. Имейте в виду, что это не обязательно совпадает с текущей работающей оболочкой. Если значение не указано, Bash автоматически устанавливает в качестве её значения оболочку входа, прописанную в файле /etc/passwd , или /bin/sh , если это не удаётся определить.
      • PAGER указывает команду для запуска программы постраничного просмотра содержимого текстовых файлов, например, /bin/less .
      • EDITOR содержит команду для запуска программы для редактирования текстовых файлов, например /usr/bin/nano . Также можно задать специальную команду, которая будет выбирать редактор в зависимости от окружения, например, gedit в X или nano в терминале, как в этом примере:
      [ -n "$DISPLAY" ] && export EDITOR=gedit || export EDITOR=nano
      • VISUAL позволяет указать имя продвинутого текстового редактора для более сложных задач, например, редактирования почты. Это могут быть vi , vim, emacs и т. д.
      • BROWSER содержит команду для запуска веб-браузера. Может быть полезно устанавливать это значение в зависимости от наличия графического окружения:
      [ -n "$DISPLAY" ] && export BROWSER=firefox || export BROWSER=links

      Совет: При прописывании программ по умолчанию также можно ориентироваться на переменную WAYLAND_DISPLAY , наличие которой указывает на то, что запущен Wayland-композитор.

      Смотрите также

      • Gentoo:Handbook:X86/Working/EnvVar
      • Ubuntu Community Wiki - Environment Variables

      Python переменные окружения: виды и способы использования

      Переменные окружения Python необходимы для изменения настроек системы. Кроме этого, многие программы, написанные на данном языке, корректно работают только при правильном значении переменных среды. Если эти значения изменятся, скрипт перестанет работать задуманным образом, и его нужно будет отладить.

      Не менее значимая функция переменных окружения – это использование их для хранения закрытых данных, таких как токены, пароли, IP-ключи и т. д. В нашем материале мы расскажем более подробно о задачах переменных среды и покажем, как с ними можно работать.

      Определение переменных окружения в Python

      Переменная, чье значение присваивается Python извне, называют переменной окружения. Как правило, ее устанавливают в командной строке перед тем, как обратиться к исполняемому файлу Python. После этого ОС позволяет программе Python получать доступ к такой переменной.

      Переменные окружения в Python необходимы для гибкости программы. Благодаря им, пользователь получает возможность менять нужные параметры перед выполнением программы. Программа же, в свою очередь, может просматривать изменяемые параметры, динамически подстраивая свое поведение. Т.е. нет необходимости модифицировать код. Такое применение переменных окружения будет называться настройкой программы.

      Алгоритм, по которому проходит установка переменных окружения, напрямую зависит от платформы. Поэтому следует использовать встроенный модуль OS компании Python для считывания переменных. Функции этого модуля позволяют взаимодействовать с операционной системой вне зависимости от ее платформы.

      Для доступа к таким переменным в Python используется объект os.environ — это словарь, в котором хранятся все переменные окружения программы.

      Имейте в виду, что объект os.environ фиксируется при загрузке модуля OS на Python. И если вы будете изменять переменные окружения после этого, то изменения не отобразятся os.environ (например, при экспорте новой переменной окружения в терминальный эмулятор).

      Виды переменных окружения Python

      • PYTHONHOME

      Меняет местоположение стандартных библиотек Python. Изначально они находятся в prefix/lib/pythonversion и exec_prefix/lib/pythonversion, где prefix и exec_prefix — каталоги, которые зависят от установки, оба по умолчанию — /usr/local.

      Если для этой переменной окружения задан один каталог, то его значение может заменить prefix или exec_prefix. Для указания разных значений установите PYTHONHOME на prefix:exec_prefix.

      По умолчанию изменяет путь поиска для файлов модулей. Имеет такой же формат, как и для оболочки PATH — т. е. один или более путей каталога, разделяемых os.pathsep (например, знак «:» в Unix или «;» в Windows). Происходит автоматическое игнорирование несуществующих каталогов.

      Дополнительный каталог указывается в пути поиска перед PYTHONPATH, как было рассмотрено выше в пункте «Интерфейсные опции». При необходимости изменения пути поиска нужно обратиться к переменной sys.path в программе Python.

      Узнай, какие ИТ - профессии
      входят в ТОП-30 с доходом
      от 210 000 ₽/мес
      Павел Симонов
      Исполнительный директор Geekbrains

      Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.

      Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

      Скачивайте и используйте уже сегодня:

      Павел Симонов - исполнительный директор Geekbrains

      Павел Симонов
      Исполнительный директор Geekbrains

      Топ-30 самых востребованных и высокооплачиваемых профессий 2023

      Поможет разобраться в актуальной ситуации на рынке труда

      Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

      Только проверенные нейросети с доступом из России и свободным использованием

      ТОП-100 площадок для поиска работы от GeekBrains

      Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

      Получить подборку бесплатно
      Уже скачали 24152

      • PYTHONSTARTUP

      Если эта переменная является именем файла, то Python-команды в этом файле будут выполняться до первого приглашения в интерактивном режиме. Файл и интерактивные команды выполняются в одном пространстве имен. Поэтому и определенные, и импортированные в этом пространстве объекты могут быть использованы без квалификации в интерактивном сеансе. Также можно изменять подсказки в этом файле sys.ps1 и sys.ps2 и хук sys.__interactivehook__.

      Если в этой переменной окружения задана непустая строка, то это равнозначно указанию параметра -О. Если же задано целое число, то это равносильно -ОО.

      • PYTHONBREAKPOINT

      Если эта переменная окружения Python установлена, то она определяет вызываемый объект, применяя нотацию пути с точками. Модуль с вызываемым объектом импортируется, далее непосредственно сам вызываемый объект будет запущен реализацией по умолчанию sys.breakpointhook(), вызываемая, в свою очередь, встроенной функцией breakpoint().

      Если PYTHONBREAKPOINT не задана или установлена пустая строка, то это равносильно значению «pdb.set_trace». Если установить такое значения в строку «0», то это приведет к действию немедленного возврата со стороны реализации по умолчанию sys.breakpointhook().

      Если для этой переменной в качестве значения указана непустая строка, то это равносильно указанию параметра -d. Если же указано целое число, то это равнозначно -dd.

      Если значение переменной указано, как пустая строка, то это равносильно значению параметра -i.

      Переменную окружения PYTHONINSPECT можно изменить кодом Python с применением os.environ для принудительного проверочного режима по окончанию работы программы.

      • PYTHONUNBUFFERED

      Если в качестве значения этой переменной окружения Python задана непустая строка, то это равносильно указанию параметра -u.

      Если для нее задается значение непустой строки, то это равнозначно указанию параметра -v. Если устанавливается целое число, то это равнозначно -vv.

      При установленном значении этой переменной Python пренебрегает регистром в операторах import. Это будет работать только в OS X и Windows.

      • PYTHONDONTWRITEBYTECODE

      Если в качестве значения этой переменной установлена непустая строка, то это равнозначно указанию параметра -В. Т.е. Python не станет писать файлы.рус.

      • PYTHONPYCACHEPREFIX

      Если для переменной значение установлено, то это равносильно указанию параметру -Х pycache_prefix=PATH. Т.е. Python осуществит запись фалов.рус не в каталогах __pycache__ в исходном дереве, а в зеркальном дереве каталогов по этому пути.

      Для вас подарок! В свободном доступе до 26.11 -->
      Скачайте ТОП-10
      бесплатных нейросетей
      для программирования
      Помогут писать код быстрее на 25%
      Чтобы получить подарок, заполните информацию в открывшемся окне

      • PYTHONHASHSEED

      В случае, когда значение такой переменной определено, как random, или же она не установлена, то применяется случайное значение для заполнения хэшей объектов.

      Если для значения переменной указано целое число, то оно используется, как неизменное начальное число для генерации hash() типов, включенных в процесс рандомизации хэша.

      Главной целью является разрешение повторяемого хеширования (например, для самопроверки интерпретатора). А также допуск к совместному использованию хеш-значений кластером процессов Python.

      • PYTHONIOENCODING

      Если эта переменная окружения установлена до начала запуска интерпретатора, то она заменяет кодировку, которую используют в stdin/stdout/stderr, в синтаксисе encodingname:errorhandler. И encodingname, и :errorhandler являются необязательными и содержат то же значение, что и str.encode().

      Stderr пренебрегает частью :errorhandler. Обработчик всегда будет ‘backslashreplace’.

      Дарим скидку от 60%
      на обучение «Frontend-разработчик» до 26 ноября
      Уже через 9 месяцев сможете устроиться на работу с доходом от 150 000 рублей

      • PYTHONNOUSERSITE

      Если значение этой переменной задано, то Python не будет добавлять каталог пользователя site-packages в sys.path.

      Данная переменная задает базовый пользовательский каталог, который применяют при вычислении пути установки Distutils для python setup.py install —user и пути пользовательской директории site-packages.

      • PYTHONEXECUTABLE

      Если значение этой переменной задано, то для sys.argv[0] будет установлено её значение вместо значения, полученного через среду выполнения C. Работает только в Mac OS X.

      Только до 27.11
      Скачай подборку материалов, чтобы гарантированно найти работу в IT за 14 дней
      Список документов:

      ТОП-100 площадок для поиска работы от GeekBrains

      20 профессий 2023 года, с доходом от 150 000 рублей

      Чек-лист «Как успешно пройти собеседование»

      Чтобы зарегистрироваться на бесплатный интенсив и получить в подарок подборку файлов от GeekBrains, заполните информацию в открывшемся окне

      • PYTHONWARNINGS

      Эта переменная равнозначна опции -W. Если значение указано в виде строки, разделенной запятыми, то это равносильно многократному указанию -W. При этом фильтры, которые были расположены в списке позже, будут иметь преимущество над фильтрами, расположенными в списке ранее.

      • PYTHONFAULTHANDLER

      В случае, когда для такой переменной задается непустая строка, то при запуске будет вызван faulthandler.enable(): установить обработчик для сигналов SIGSEGV, SIGFPE, SIGABRT, SIGBUS и SIGILL для дампа трассировки Python. Это равнозначно опции —X faulthandler.

      • PYTHONTRACEMALLOC

      При определении этой переменной непустой строкой начинается отслеживание выделения памяти Python с использованием модуля tracemalloc. Значением переменной будет являться наибольшее количество фреймов, сохраняемых в обратной трассировке trace.

      • PYTHONPROFILEIMPORTTIME

      Когда значение этой переменной — непустая строка, то Python укажет количество времени, занимаемое каждым импортом. Это полностью соответствует настройке —X importtime в командной строке.

      • PYTHONASYNCIODEBUG

      Когда для такой переменной окружения задается непустая строка, то происходит включение режима отладки модуля asyncio.

      • PYTHONMALLOC

      Эта переменная задает распределители памяти Python и/или устанавливает отладочные хуки.

      • PYTHONMALLOCSTATS

      При установке непустой строки для этой переменной Python осуществит печать статистики pymalloc распределителя памяти. Причем это будет происходить каждый раз, когда создаётся новая объектная арена pymalloc, а также при завершении работы.

      Эта переменная будет проигнорирована, если PYTHONMALLOC применяется для принудительного использования распределителя malloc() библиотеки C, или если Python был настроен без поддержки pymalloc.

      Популярные статьи

      • PYTHONLEGACYWINDOWSFSENCODING

      Если для значения этой переменной задана непустая строка, то режим ошибок и кодировка файловой системы по умолчанию откатятся до значений в версии 3.6 «replace» и «mbcs» соответственно. В ином случае будут использованы значения по умолчанию «surrogatepass» и «utf-8».

      • PYTHONLEGACYWINDOWSSTDIO

      При для переменной используется непустая строка, то новые средства чтения и записи консоли не будут применены. Т.е. символы Юникод будут кодироваться согласно активной кодовой странице консоли, а не с использованием utf-8.

      Переменная будет проигнорирована, если стандартные потоки перенаправляются (в каналы или файлы), а не ссылаются на буферы консоли.

      • PYTHONCOERCECLOCALE

      Если в качестве значения переменной указывается «0», то основное приложение командной строки Python будет пропускать приведение устаревших локалей C и POSIX на основе ASCII к более действенной альтернативе на основе UTF-8.

      Если значение переменной не установлено (или не равно «0»), то переменная окружения переопределения локали LC_ALL тоже не устанавливается, а текущая локаль, указанная для категории LC_CTYPE, является либо локалью по умолчанию C, либо явно ASCII-основанной локали POSIX, то Python CLI будет пытаться настроить следующие локали для категории LC_CTYPE в порядке, который был указан перед загрузкой среды выполнения интерпретатора.

      Для целей отладки установка PYTHONCOERCECLOCALE=warn даст результат, при котором Python будет выдавать предупреждающие сообщения на stderr, если будет активировано принуждение локали, или если языковой стандарт, вызывающий приведение, всё ещё активен при инициализации среды выполнения Python.

      Когда для такой переменной задается непустая строка, то активируется «режим разработки» Python. (См. опцию -X dev)

      Если для этой переменной задано значение «1», то это активирует режим интерпретатора UTF-8, где UTF-8 применяется, как кодировка текста для интерфейсов системы, независимо от текущей настройки локали.

      Если задано значение «0», то интерпретатор будет работать в режиме с учётом локали по умолчанию.

      Установка любой другой непустой строки будет вызывать ошибку при инициализации интерпретатора.

      Работа с переменными окружения Python

      • Считывание одной/всех переменных окружения

      Код, указанный ниже, помогает прочесть и вывести одну конкретную или же все переменные окружения. Для того чтобы сделать вывод имен и значений всех переменных, применяют цикл FOR. Далее выводится значение переменной HOME.

      # Импортируем модуль os
      import os
      # Создаём цикл, чтобы вывести все переменные среды
      print(«The keys and values of all environment variables:»)
      for key in os.environ:
      print(key, ‘=>’, os.environ[key])
      # Выводим значение одной переменной
      print(«The value of HOME is: «, os.environ[‘HOME’])

      Если выполнить этот скрипт, то можно увидеть следующее: сначала был получен перечень всех переменных окружения, а потом — значение переменной HOME.

      • Проверка присвоения переменной окружения ее значения

      Для проверки переменных создадим Python-файл с нижеуказанным скриптом. Модуль OS будем использовать для чтения значений переменных. Модуль SYS – для завершения работы приложения.

      Бесконечный цикл while будет без остановки принимать имена переменных от пользователя. Также цикл будет проверять их значения до того момента, как пользователь не введет имя такой переменной, значение для которой не присвоено.

      Если пользователь вводит имя переменной окружения с указанным значением, то это значение будет выведено. В противном случае — будет выведено сообщение об ошибке, и процесс прервется.

      # Импортируем модуль os
      import os
      # Импортируем модуль sys
      import sys
      while True:
      # Принимаем имя переменной среды
      key_value = input(«Enter the key of the environment variable:»)
      # Проверяем, инициализирована ли переменная
      try:
      if os.environ[key_value]:
      print(«The value of», key_value, » is «, os.environ[key_value])
      # Если переменной не присвоено значение, то ошибка
      except KeyError:
      print(key_value, ‘environment variable is not set.’)
      # Завершаем процесс выполнения скрипта
      sys.exit(1)

      Итог работы скрипта можно увидеть на скрине. В первом случае вводилось имя переменной с определенным значением. Во втором — имя переменной с неустановленным значением. Согласно результату, переменная HOME была определена, и ее значение появилось в консоли. Для переменной API_KEY значение не указывалось, поэтому скрипт вывел сообщение и прекратил работу.

      • Проверка переменной на истинность

      Создадим файл в Python с нижеуказанным кодом. Чтобы проверить переменную DEBUG на истину, используем функцию get(). В соответствии со значениями переменной программа будет выводить различные сообщения.

      # Импортируем модуль os
      import os
      # Проверяем значение переменной среды
      if os.environ.get(‘DEBUG’) == ‘True’:
      print(‘Debug mode is on’)
      else:
      print(‘Debug mode is off’)

      При значении переменной DEBUG – False, итог работы кода будет соответствовать скрину. Используя функцию setdefault, можно менять значение переменной.

      • Наделение переменной окружения значением

      Чтобы любой переменной окружения присвоить значение, используют функцию setdefault().

      Создадим код, изменяющий значение переменной DEBUG на True (по умолчанию установлено False), применяя функцию setdefault(). После присвоения значения осуществим проверку функцией get().

      Хотите стать мастером универсального языка программирования? Узнайте, как создавать сайты, приложения и нейросети с курсом Python-разработчика. Станьте востребованным специалистом в IT сфере уже через 9 месяцев обучения. Присоединяйтесь к дружной команде опытных преподавателей и студентов, которые уже достигли успеха в сфере программирования.

      При верном написании кода появится сообщение «Режим отладки включен». При ошибочном – «Режим отладки выключен».

      # Импортируем модуль os
      import os
      # Задаём значение переменной DEBUG
      os.environ.setdefault(‘DEBUG’, ‘True’)
      # Проверяем значение переменной
      if os.environ.get(‘DEBUG’) == ‘True’:
      print(‘Debug mode is on’)
      else:
      print(‘Debug mode is off’)

      На скрине ниже показан результат: переменной DEBUG было задано значение True, поэтому появилось сообщение «Режим отладки включен».

      Работа с библиотекой python-dotenv

      Пакет python-dotenv предназначен для того, чтобы при новом запуске терминала не тратить время на внесение переменных окружения вручную. Становится возможным загружать их из файла .env в корневом каталоге приложения.

      pip install python-dotenv

      Создадим файл .env с теми переменными окружения, которые нужны нашему приложению. Помните, что .env-файл не нужно хранить в системе контроля версий, добавьте его в .gitignore.

      from dotenv import load_dotenv

      dotenv_path = os.path.join(os.path.dirname(__file__), ‘.env’)

      Такой файл .env можно применять для всех переменных конфигурации, но для переменных окружения FLASK_APP и FLASK_DEBUG использовать его нельзя. Дело в том, что без этих переменных не обойтись уже в начале загрузки приложения.

      Итак, теперь вы понимаете, с какой целью используются и как применяются переменные окружения Python.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *