Являются ли переменные окружения (environment variables) глобальными или локальными?

Ответ

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

1. Глобальные (системные) переменные:

  • Определяются на уровне операционной системы или пользовательской сессии.
  • Доступны всем процессам, запущенным в этой среде.
  • Примеры: PATH, HOME, JAVA_HOME.

2. Локальные (процессные) переменные:

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

Пример работы в Python:

import os

# Чтение переменной окружения
python_path = os.getenv('PYTHONPATH')
print(f'PYTHONPATH: {python_path}')

# Установка локальной переменной (только для текущего процесса)
os.environ['APP_ENV'] = 'development'
os.environ['API_KEY'] = 'secret_key_123'  # НЕБЕЗОПАСНО для реальных секретов!

# Проверка
print(f'APP_ENV: {os.getenv("APP_ENV")}')  # development

# Пример безопасной работы с секретами (использование .env файлов)
# Установите библиотеку python-dotenv: pip install python-dotenv
from dotenv import load_dotenv
load_dotenv()  # Загружает переменные из .env файла
secret = os.getenv('DB_PASSWORD')  # Безопасное чтение

Практические сценарии:

  • Разработка: .env файлы для хранения конфигураций (не коммитить в Git!).
  • CI/CD: Переменные окружения в Jenkins, GitHub Actions, GitLab CI для хранения токенов, URL сервисов.
  • Докеризация: Передача конфигурации через ENV инструкции в Dockerfile или docker run -e.

Важное правило: Никогда не храните реальные пароли, ключи API или другие секреты прямо в коде. Всегда используйте переменные окружения или специализированные сервисы хранения секретов (HashiCorp Vault, AWS Secrets Manager).

Ответ 18+ 🔞

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

Короче, есть два типа этих переменных, как бы. Первые — глобальные, они же системные. Это типа как общие правила в твоей операционке. Поставил JAVA_HOME — и все процессы, все эти твои запущенные штуки, знают, где искать эту самую Яву. Это как объявление на всю деревню: «Мужики, водка у Петровича в сарае!». Все слышали, все знают.

А вторые — локальные, они же процессные. Это уже твои личные, домашние заначки. Поставил для одного конкретного скрипта какую-нибудь API_KEY — и только он про неё знает. Его детищам, если он кого породит, эта тайна не откроется, если ты специально не прокричишь её на всё село (не экспортируешь). Удобно для секретиков и настроек под конкретный случай.

Вот, смотри, как в Питоне это выглядит, чтоб ты понимал масштаб трагедии:

import os

# Чтение переменной окружения
python_path = os.getenv('PYTHONPATH')
print(f'PYTHONPATH: {python_path}')

# Установка локальной переменной (только для текущего процесса)
os.environ['APP_ENV'] = 'development'
os.environ['API_KEY'] = 'secret_key_123'  # НЕБЕЗОПАСНО для реальных секретов!

# Проверка
print(f'APP_ENV: {os.getenv("APP_ENV")}')  # development

Видишь эту строчку с API_KEY? Вот это, блядь, пиздец. Прям в коде секрет писать — это всё равно что на заборе написать номер своей банковской карты и пин-код. Ядрёна вошь! Так делать нельзя, ни в коем случае, ёпта!

Для секретов есть нормальные способы. Например, эти .env файлики. Ставишь библиотечку python-dotenv и вуаля — читаешь настройки оттуда, а сам файл в гитик не пушаешь. Красота!

# Пример безопасной работы с секретами (использование .env файлов)
# Установите библиотеку python-dotenv: pip install python-dotenv
from dotenv import load_dotenv
load_dotenv()  # Загружает переменные из .env файла
secret = os.getenv('DB_PASSWORD')  # Безопасное чтение

А где это всё применяется? Да везде, блядь! Когда пишешь код локально — кидаешь настройки в .env. Когда это всё дело в какую-нибудь CI/CD систему летит, типа Jenkins или GitHub Actions — там уже свои переменные окружения подсовываешь, где токены и прочую хуйню хранят. В Докере — тоже через -e передаёшь или в Dockerfile пишешь ENV. В общем, инструмент универсальный.

И главное правило, которое надо выжечь себе на подкорке, ебать мои старые костыли: НИКОГДА, НИ-КОГ-ДА не пиши реальные пароли, ключи и прочие секреты прямо в код! Это уровень «сам от себя охуел». Для этого есть переменные окружения или специальные хранилища вроде Vault. Всё, запомнил? Иди, работай.