🛡 Как правильно хранить пароли и другую чувствительную информацию в ваших скриптах и проектах в python
• Скорее всего многие — хранят пароли прямо в коде. Это плохая идея: однажды файл улетит в репозиторий, дальше — скриншоты, форки, кеши, истории коммитов… вернуть секрет назад почти невозможно.
• Чуть лучше — держать секреты в отдельном .py и импортировать. Но это всё ещё код, который легко случайно закоммитить и потянуть на прод.
• Давайте разберёмся, как делают это правильно и почему.
🔐 Золотое правило: секреты — вне кода:
Идея простая: код — отдельно, значения — отдельно. На практике это делается через переменные среды окружения (environment variables). Про переменные среды окружения можно написать отдельную статью, сейчас это не так важно, просто имейте это ввиду.
Удобный локальный способ работать с ними — файл .env. Это просто текстовый файл формата ИМЯ=ЗНАЧЕНИЕ, из которого значения подгружаются в окружение при старте.
Пример файла .env:
NAME='Dima SQL-ит'
PROFESSION=analyst
HEIGHT=174
Заметим:
• Слева — название переменной, чаще пишут ЗАГЛАВНЫМИ (так принято называть константы для читабельности кода).
• В .env всё является — строками; значение 174 тоже будет текстом.
• Если в значении есть пробелы — берём в кавычки. Например, NAME=’Dima SQL-ит’.
⚙️ Как это подключить в Python
Устанавливаем библиотеку:
pip install python-dotenv
Загружаем .env и читаем переменные:
import os
import dotenv
dotenv.load_dotenv(".env") #Загружаем переменные окружения из файла .env
Читаем значения:
NAME = os.getenv("NAME") # 'Dima SQL-ит'
HEIGHT = os.getenv("HEIGHT") # '174' (строка)
DEBUG = os.getenv("DEBUG", "0") # дефолт, если переменной нет
Пояснение:
По умолчанию load_dotenv ищет файл .env рядом со скриптом; путь можно указать свой.
Все значения — строки; при необходимости приводим типы вручную:
height = int(os.getenv(“HEIGHT”, “0”))
✅ Почему это лучше, чем держать секреты в .py:
1) Не светишь секреты по ошибке - файла .env добавляют в .gitignore, реальные пароли/токены не улетают в репозиторий.
2) Простое разделение dev/test/prod - держим .env.dev, .env.stage, .env.prod и подсовываем нужный при запуске — код один, меняются значения. (актуально больше для разработчиков, но вы тоже можете придумать свои .env файлы под каждый случай)
3) И т.д.
Итог:
😎 Если эта инструкция вам помогла, то кидайте 🔥 или ❤️!
❓А как вы храните чувствительную информацию у себя в проектах?