Python

Как проверить доступность переменных окружения в Python: os.environ и getenv()

В Python переменные окружения читают через модуль os. Если нужно просто получить значение, используйте os.getenv(), а если нужно проверить сам факт наличия переменной, используйте оператор in с os.environ

import os

token = os.getenv("API_TOKEN")

if token:
    print("API_TOKEN доступен")
else:
    print("API_TOKEN не найден или пустой")

Такой код подходит для первого теста, но с секретами нужно быть аккуратным: не печатайте токены, пароли и ключи целиком в консоль, логи или скриншоты

Проверка через os.getenv()

os.getenv("NAME") возвращает значение переменной окружения, если она есть, и None, если переменной нет. Можно указать запасное значение вторым аргументом, и это удобно для настроек проекта: локально используется значение по умолчанию, а на сервере переменная окружения задает реальный режим работы

import os

mode = os.getenv("APP_MODE", "development")
print(mode)

Проверка наличия через os.environ

Если важно отличить «переменной нет» от «переменная есть, но пустая», используйте os.environ

import os

if "API_TOKEN" in os.environ:
    print("Переменная API_TOKEN существует")
else:
    print("Переменной API_TOKEN нет")

После этого можно отдельно посмотреть, пустая она или нет

value = os.environ.get("API_TOKEN")

if value == "":
    print("Переменная есть, но она пустая")
elif value is None:
    print("Переменной нет")
else:
    print("Переменная есть и не пустая")

Как задать переменную перед запуском

На macOS и Linux можно запустить программу так

API_TOKEN=12345 python main.py

Или экспортировать переменную для текущей сессии терминала

export API_TOKEN=12345
python main.py
$env:API_TOKEN="12345"
python main.py

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

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

Если значение секретное, не печатайте его целиком. Можно вывести только факт наличия и длину

import os

token = os.getenv("API_TOKEN")

if token:
    print("API_TOKEN найден")
    print("Длина:", len(token))
else:
    print("API_TOKEN не найден")

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

Почему Python не видит переменную

Самая частая причина: переменная задана не в той сессии терминала, где запускается Python. Например, вы прописали export API_TOKEN=... в одном окне, а запускаете программу из другого. Вторая причина — редактор кода запускает программу не из вашего терминала, а из собственного процесса, где переменных окружения нет

Проверьте сначала в терминале

echo $API_TOKEN
echo $env:API_TOKEN

Потом проверьте из Python

import os
print("API_TOKEN" in os.environ)

Переменные окружения и .env

Файл .env сам по себе Python не читает. Если вы хотите хранить локальные настройки в .env, обычно используют библиотеку python-dotenv или встроенный механизм фреймворка, если он есть

python -m pip install python-dotenv
from dotenv import load_dotenv
import os

load_dotenv()
print(os.getenv("APP_MODE"))

Не добавляйте .env с секретами в публичный репозиторий. Обычно его кладут в .gitignore

Мини-задача

Создайте файл main.py

import os

required_vars = ["API_TOKEN", "APP_MODE"]

for name in required_vars:
    if name in os.environ and os.environ[name]:
        print(f"{name}: доступна")
    else:
        print(f"{name}: нет или пустая")

Запустите без переменных, потом задайте одну переменную и запустите снова. Так вы увидите разницу между отсутствующей и доступной настройкой

Частые ошибки

Печатаю секрет в консоль

Не стоит. Для проверки достаточно написать, что переменная найдена, и показать длину значения

Задал переменную, но Python ее не видит

Проверьте, из какого терминала запускается программа. Если запускаете из редактора, настройте переменные окружения в конфигурации запуска редактора

Думаю, что .env работает сам

Нет. .env нужно загружать явно через библиотеку или инструмент, который умеет читать такие файлы

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x