TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #4480 2.42K
Переменные окружения: введение

Переменные окружения — это данные, хранящиеся вне программы, которые могут влиять на её поведение. Например, ключ API или пароли, указанные в коде, будут доступны только при выполнении программы — и не попадут в публичный репозиторий. Такое хранение существенно повышает безопасность «переносимого» проекта.


Встроенный модуль os

Простейший способ обратиться к средовой переменной в коде — os.environ:


import os
print(os.environ) # Вывести все переменные
val = os.environ['USER'] # Бросит KeyError, если нет
val = os.getenv('USER')



.env и python-dotenv

Общепринятая практика — хранить конфигурацию в файле .env и загружать переменные при старте скрипта:


# .env
API_KEY=abcdef
DB_URL=postgres://...



from dotenv import load_dotenv
import os

load_dotenv() # загрузка из .env
api_key = os.getenv('API_KEY')


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


Без .env

Порой для простых проектов проще вообще не создавать файлов .env, можно экспортировать в виртуальное окружение переменную сразу. Как это делается в Unix или macOS:


export API_KEY="abcdef"
export API_SECRET="12345"


В Windows CMD:


set API_KEY=abcdef
set API_SECRET=12345



load_dotenv

Еще один удобный способ «вчитаться» во все средовые переменные в коде — функция load_dotenv().

Для нее потребуется установить библиотеку: pip install python-dotenv. И теперь функция считает все переменные, каким бы способом они ни были объявлены:


from dotenv import load_dotenv
load_dotenv()


#основы
@zen_of_python
  • ✍ 4
  • ❤ 2
More from @zen_of_python
  1. Sep 25, 2026Почему Python предупреждает о последовательности \477 и как это исправить В строках Python…
  2. Sep 25, 2026Как запускать Python-код в песочнице на MicroPython и WebAssembly В проектах Саймона Уилли…
  3. Sep 25, 2026Как emojet ускоряет работу с эмодзи в Python Библиотека emojet преобразует названия в эмод…
  4. Sep 24, 2026Как читать многострочный ввод в Python REPL несколько раз Вызов open(0).read() читает стан…
  5. Sep 24, 2026Как исправить вызов NamedTuple в Python 3.15 В Python 3.15 больше не поддерживается создан…
  6. Sep 24, 2026Как запустить урезанный Python в браузерной песочнице Monty от Pydantic исполняет небольшо…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →