Переменные окружения для Python проектов
При разработки web-приложения или бота мы часто имеем дело с какой-либо секретной информацией, различными токенами и паролями (API-ключами, секретами веб-форм). «Хардкодить» эту информацию, а тем более сохранять в публично доступной системе контроля версий это очень плохая идея.
# Плохая практика. Не делай так. API_KEY = 'very_secret_password'
Конфигурационные файлы
Самый простой путь решения данной проблемы, это создание отдельного конфигурационного файла со всей чувствительной информацией и добавление его в .gitignore . Минус такого подхода в том, что в гит нужно держать ещё и шаблон конфигурационного файла и не забывать его периодически обновлять.
# Уже лучше. from config import API_KEY app = Flask(__name__) app.config['API_KEY'] = API_KEY
Переменные окружения
Более продвинутый подход, это использование переменных окружения. Переменные окружения это именованные переменные, содержащие текстовую информацию, которую могут использовать запускаемые программы. Например, чтобы запустить flask-приложение, вначале нужно указать в переменной окружения FLASK_APP имя нашего приложения:
$ export FLASK_APP=hello.py $ flask run * Running on http://127.0.0.1:5000/
С помощью переменных окружения можно получать различные параметры приложение и секретные ключи:
import os app.config['API_KEY'] = os.environ.get('API_KEY')
Библиотека python-dotenv
Чтобы не задавать каждый раз вручную переменные окружения при новом запуске терминала, можно воспользоваться пакетом python-dotenv. Он позволяет загружать переменные окружения из файла .env в корневом каталоге приложения.
Устанавливаем пакет:
pip install python-dotenv
Теперь можно создать файл .env со всеми переменными среды, которые необходимы вашему приложению. Важно, добавьте .env -файл в .gitignore , не храните его в системе контроля версий.
import os from dotenv import load_dotenv dotenv_path = os.path.join(os.path.dirname(__file__), '.env') if os.path.exists(dotenv_path): load_dotenv(dotenv_path)
Этот .env-файл можно использовать для всех переменных конфигурации, но его нельзя использовать для переменных среды FLASK_APP и FLASK_DEBUG , так как они необходимы уже в процессе начальной загрузки приложения.
Утилита direnv
Переменные среды могут быть автоматически загружены при входе в папку с проектом, это особенно удобно при работе с несколькими проектами одновременно. Сделать это позволяет утилита direnv. Direnv — это менеджер переменных среды для терминала, поддерживает bash, zsh, tcsh и др. оболочки. Позволяет автоматически загружать и выгружать переменные среды в зависимости от вашего текущего каталога. Это позволяет иметь переменные среды, специфичные для каждого проекта. Перед каждым приглашением проверяется наличие файла .envrc в текущем и родительском каталогах. Если файл существует, он загружается в подшаблон bash, и все экспортированные переменные затем захватываются direnv, а затем становятся доступными для оболочки.
sudo apt-get install direnv
Далее необходимо внести изменения для настройки нашей оболочки, для bash необходимо в конец файла ~/.bashrc добавить следующее и перезапустить консоль:
eval "$(direnv hook bash)"
Пример использования direnv
Создадим новую папку для проекта:
$ mkdir ~/my-project $ cd ~/my-project
Покажем, что переменная окружения FLASK_APP не загружена:
$ echo $FLASK_APP nope
Запишем переменные окружения в файл .envrc :
$ echo export FLASK_APP=hello.py > .envrc .envrc is not allowed
Для обеспечения безопасности, после создания или изменения файла .envrc , нужно выполнить подтверждение с помощью команды direnv allow:
$ direnv allow . direnv: reloading direnv: loading .envrc direnv export: +FLASK_APP
Покажем, что переменная окружения загружена:
$ echo $FLASK_APP hello.py
При выхода из папки с проектом переменные окружения выгружаются
$ cd .. direnv: unloading
и становятся снова не заданными
$ echo $FLASK_APP nope
Работа с виртуальным окружением в direnv
Кроме загрузки переменных окружения, утилита direnv позволяет также работать с виртуальным окружением для Python.
Виртуальное окружение позволяет использовать для отдельные проектов разные версии интерпретатора python и пакетов библиотек. Существует несколько способов создания виртуального окружения для python, здесь мы рассмотрим модуль venv, для другие варианты описаны в документации к direnv.
Чтобы использовать venv для автоматического создания и активирования виртуального окружения, необходимо добавить в файл ~/.config/direnv/direnvrc следующий код (см. документацию).
Создание виртуального окружения
Если в файл .envrc добавить строчку
layout python-venv
то при переходе в папку будет direnv создаст виртуальное окружение в папке direnv, например .direnv/python-venv-3.7.3 .
Чтобы создать виртуальное окружение с другим путем, например в более привычной папке venv, надо задать переменную VIRTUAL_ENV :
export VIRTUAL_ENV=.venv
Таким же способом можно подключать уже созданное виртуальное окружение.
Работа с разными версиями Python
Для установки отличной от системной версии python, нужно использовать команду:
layout python-venv python3.6
Создаем строку приглашения bash (PS1)
В отличие от ручной активации виртуального окружения, в нашем случае строка приглашения bash (PS1) не будет изменена (обычно она выглядит как (venv) user@comp:~$ ). Чтобы вернуть показ активации виртуального окружения в консоли нужно в файл ~/.bashrc добавить следующий код:
show_virtual_env() < if [[ -n "$VIRTUAL_ENV" && -n "$DIRENV_DIR" ]]; then echo "($(basename $VIRTUAL_ENV))" fi >export -f show_virtual_env PS1='$(show_virtual_env)'$PS1
Пример файла настройки файла .envrc
Вот так может выглядеть файл .envrc настроенный для разработки flask-приложения:
export VIRTUAL_ENV=venv layout python-venv export FLASK_APP=app.py export FLASK_DEBUG=1
Это позволяет автоматически активировать виртуальное окружение и загрузить переменные окружения при входе в папку с проектом.
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
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Получить подборку бесплатно
Уже скачали 27934
- 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__ в исходном дереве, а в зеркальном дереве каталогов по этому пути.
Для вас подарок! В свободном доступе до 05.05 —>
Скачайте ТОП-10
бесплатных нейросетей
для программирования
Помогут писать код быстрее на 25%
Чтобы получить подарок, заполните информацию в открывшемся окне
- PYTHONHASHSEED
В случае, когда значение такой переменной определено, как random, или же она не установлена, то применяется случайное значение для заполнения хэшей объектов.
Если для значения переменной указано целое число, то оно используется, как неизменное начальное число для генерации hash() типов, включенных в процесс рандомизации хэша.
Главной целью является разрешение повторяемого хеширования (например, для самопроверки интерпретатора). А также допуск к совместному использованию хеш-значений кластером процессов Python.
- PYTHONIOENCODING
Если эта переменная окружения установлена до начала запуска интерпретатора, то она заменяет кодировку, которую используют в stdin/stdout/stderr, в синтаксисе encodingname:errorhandler. И encodingname, и :errorhandler являются необязательными и содержат то же значение, что и str.encode().
Stderr пренебрегает частью :errorhandler. Обработчик всегда будет ‘backslashreplace’.
Дарим скидку от 60%
на обучение «Frontend-разработчик» до 05 мая
Уже через 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.
Только до 2.05
Скачай подборку материалов, чтобы гарантированно найти работу в 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.
Check environment variables in Python
This post will discuss how to check environment variables in Python.
1. Using os.environ
You can use os.environ to get a complete list of all the environment variables along with their values.
if __name__ == ‘__main__’ :
for x in os . environ :
print ( ( x , os . getenv ( x ) ) )
To access an environment variable, you can use the [] syntax. For example, environ[‘HOME’] gives the pathname of your home directory in the Linux environment.
if __name__ == ‘__main__’ :
print ( os . environ [ ‘HOME’ ] )
Note that this raises a KeyError when the key is not present. To avoid this exception, you can do any of the following:
1. Surround the code with a try-except block:
if __name__ == ‘__main__’ :
print ( os . environ [ ‘HOME’ ] )
print ( ‘Not found’ )
2. Use the dict.get() function that returns None when the key is not found:
if __name__ == ‘__main__’ :
x = os . environ . get ( ‘HOME’ )
if x is not None :
print ( ‘Not found’ )
3. Pass a default value to dict.get() function:
if __name__ == ‘__main__’ :
x = os . environ . get ( ‘HOME’ , ‘Not found’ )
4. Check if the key exists with the in keyword:
if __name__ == ‘__main__’ :
if key in os . environ :
print ( os . environ [ key ] )
print ( ‘Not found’ )
2. Using envparse module
Another option is to use the envparse utility to handle environment variables. Here’s an example of its usage:
from envparse import env
if __name__ == ‘__main__’ :
x = env . str ( ‘HOME’ , default = ‘Not found’ )
3. Using envs module
Alternatively, you can use the envs module, which allows easy access to environment variables from Python.
from envs import env
if __name__ == ‘__main__’ :
x = env ( ‘HOME’ )
That’s all about checking environment variables in Python.
Average rating 5 /5. Vote count: 23
No votes so far! Be the first to rate this post.
We are sorry that this post was not useful for you!
Tell us how we can improve this post?
Thanks for reading.
To share your code in the comments, please use our online compiler that supports C, C++, Java, Python, JavaScript, C#, PHP, and many more popular programming languages.
Like us? Refer us to your friends and support our growth. Happy coding 🙂
Software Engineer | Content Writer | 12+ years experience
Переменные среды окружения системы (environment)
Переменные среды обычно используются для значений конфигурации, таких как пути поиска, расположение файлов и т. д.
Содержание:
- Переменная os.environ ,
- Функция os.supports_bytes_environ ,
- Переменная os.environb ,
- Функция os.getenv() ,
- Функция os.getenvb() ,
- Функция os.putenv() ,
- Функция os.unsetenv() ,
- Функция os.get_exec_path() .
os.environ :
Переменная os.environ это объект сопоставления, подобный словарю, который представляет переменные среды окружения системы. Например, os.environ[‘HOME’] это путь к домашнему каталогу на некоторых платформах и эквивалентен getenv(«HOME») в языке C .
Переменная os.environ фиксируется при первом импорте модуля os , во время запуска Python. Изменения в среде OS, сделанные после этого времени, не отражаются os.environ , за исключением изменений, внесенных путем непосредственного изменения os.environ .
Если платформа поддерживает функцию os.putenv() , то сопоставление os.environ может использовать ее для изменения среды. Функция os.putenv() будет вызываться автоматически при изменении os.environ .
Если платформа не поддерживает функцию os.putenv() , то измененная копия сопоставления os.environ может быть передана соответствующим функциям создания процессов, чтобы заставить дочерние процессы использовать измененную среду.
В Unix ключи и значения используют sys.getfilesystemencoding() и обработчик ошибок ‘surrogateescape’ . Если вы хотите использовать другую кодировку, то используйте os.environb .
Заметка:
- Вызов os.putenv() , напрямую не изменят os.environ , поэтому лучше менять значения ключей os.environ .
- На некоторых платформах, включая FreeBSD и Mac OS X, настройка os.environ может вызвать утечки памяти.
Если платформа поддерживает функцию os.unsetenv() , то с ее помощью можно удалить элементы в этом отображении os.environ для сброса указанной переменной среды. Функция os.unsetenv() будет вызываться автоматически при удалении элемента из os.environ и при вызове одного из методов .pop() или .clear().
>>> import os >>> os.environ['LANG'] # 'ru_RU.UTF-8' >>> os.environ['HOME'] # '/home/docs-python' >>> os.environ['HOME'] = '/tmp' >>> os.environ.pop('HOME') # '/tmp' >>> os.environ.get('HOME', '/var/www') # '/var/www' # очистка среды окружения os.environ.clear() os.environ # environ(<>)
os.supports_bytes_environ :
os.supports_bytes_environ производит проверку доступности функций модуля os.environb и os.getenvb() . Эти функции доступны только в том случае, если os.support_bytes_environ равно True . os.support_bytes_environ истинно, если родной тип среды ОС — байты, например False в Windows.
os.environb :
Байт-версия переменных сред окружения: представляет собой объект отображения, подобный словарю который представляет переменные среды окружения в виде байтовых строк. Environment и environmentb синхронизируются, изменяются обновления среды, и наоборот.
Окружение доступно только в том случае, если os.support_bytes_environ равно True .
os.getenv(key, default=None) :
Функция os.getenv() возвращает значение ключа key переменной среды, если оно существует или значение по умолчанию default , если его нет. Значения key , default и возвращаемый результат — строки str .
В Unix ключи и значения декодируются с помощью sys.getfilesystemencoding() и обработчик ошибок ‘surrogateescape’ . Используйте функцию os.getenvb() , если хотите использовать другую кодировку.
Доступность: большинство систем Unix, Windows.
>>> import os >>> os.environ['HOME'] # '/home/docs-python' >>> os.getenv('TEST_ENV', '/tmp') # '/tmp'
os.getenvb(key, default=None) :
Функция os.getenvb() возвращает значение ключа key переменной среды, если оно существует или значение по умолчанию default , если его нет. Значения key , default и возвращаемый результат — байтовые строки bytes .
Функция os.getenvb() доступна только в том случае, если os.support_bytes_environ равно True.
Доступность: большинство Unix.
os.putenv(key, value) :
Функция os.putenv() устанавливает переменную среды с именем key в строковое значение value . Такие изменения в переменной среде влияют на подпроцессы, запущенные с os.system(), os.popen() или os.fork() и os.execv() .
Примечание. На некоторых платформах, включая FreeBSD и Mac OS X , настройка среды может привести к утечке памяти.
Важно. Если функция os.putenv() поддерживается системой, то изменения для элементов в os.environ автоматически переводятся в соответствующие вызовы os.putenv() , однако самостоятельные вызовы os.putenv() не обновляют значения в словаре os.environ , поэтому предпочтительнее присваивать значения переменных сред элементам os.environ .
Функция os.putenv() вызывает событие аудита os.putenv с аргументами key , value .
Изменено в Python 3.9: Функция теперь всегда доступна.
os.unsetenv(key) :
Функция os.unsetenv() вызывает сброс (удаление) переменной среды окружения с именем key . Такие изменения в переменной среде влияют на подпроцессы, запущенные с os.system(), os.popen() или os.fork() и os.execv() .
Важно. Если функция os.unsetenv() поддерживается системой, удаление элементов в os.environ автоматически переводится в соответствующий вызов os.unsetenv() , однако самостоятельные вызовы os.unsetenv() не обновляют словарь os.environ , поэтому удалять элементы в самом словаре os.environ .
Функция os.unsetenv() вызывает событие аудита os.unsetenv с аргументом key .
Изменено в Python 3.9: теперь эта функция доступна всегда, а также доступна в Windows.
os.get_exec_path(env=None) :
Функция os.get_exec_path() возвращает список каталогов, в которых будет выполняться поиск исполняемого файла, аналогичного оболочке, например bash , при запуске процесса. Аргумент env , если он указан, должен быть словарем переменных среды для поиска в PATH . По умолчанию, когда env имеет значение None , используется Environment системы.
>>> os.get_exec_path() # ['/home/docs-python/.local/bin', '/usr/local/sbin', # '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', # '/bin', '/usr/games', '/usr/local/games', '/snap/bin'] >>> os.get_exec_path('PATH':'/usr/local/bin:/usr/sbin:/usr/bin:/sbin'>) # ['/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin']
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Управление переменной средой окружения системы
- Представление пути в файловой системе
- Извлечение/установка uid, gid и pid процесса
- Наследование файловых дескрипторов
- Создание дескриптора файла, чтение, запись и его закрытие
- Функция listdir() модуля os
- Функция walk() модуля os
- Функция scandir() модуля os
- Объект DirEntry() модуля os
- Функция stat() модуля os
- Объект stat_result, результаты выполнения os.stat()
- Функция lstat() модуля os
- Функция access() модуля os
- Функция chdir() модуля os
- Функция chmod() модуля os
- Функция chown() модуля os
- Функция chroot() модуля os
- Функция getcwd() модуля os
- Функция link() модуля os
- Функция mkdir() модуля os
- Функция makedirs() модуля os
- Функция symlink() модуля os
- Функция readlink() модуля os
- Функция remove() модуля os, удалить файл
- Функция removedirs() модуля os
- Функция rename() модуля os
- Функция renames() модуля os
- Функция replace() модуля os
- Функция rmdir() модуля os
- Функция strerror() модуля os
- Функция supports_dir_fd модуля os
- Функция supports_effective_ids модуля os
- Функция supports_fd модуля os
- Функция supports_follow_symlinks модуля os
- Функция truncate() модуля os
- Функция utime() модуля os
- Манипулирование списком контроля доступа ACL в Linux
- Функция abort() модуля os
- Функция exec*() модуля os
- Функция popen() модуля os
- Функция system() модуля os
- Функция _exit() модуля os
- Функция fork() модуля os
- Функция kill() модуля os
- Функции spawn*() модуля os
- Функция umask() модуля os
- Функция uname() модуля os
- Функция wait() модуля os
- Функция waitpid() модуля os
- Определение состояния процесса
- Константы для поддержки операций с путями
- Генератор случайных байтов на основе модуля os
- Функция startfile() модуля os
- Функция times() модуля os
- Функции getloadavg() и cpu_count() модуля os
- Функция waitstatus_to_exitcode() модуля os
- Функция listdrives() модуля os, имена дисков Windows
- Функция listmounts() модуля os, точки монтирования Windows
- Функция listvolumes() модуля os, список томов Windows