כאשר אנו כותבים קוד, במיוחד בפרויקטים שדורשים אינטראקציה עם שירותים חיצוניים, אנו נתקלים בנתונים רגישים: סיסמאות, מפתחות API, אסימוני גישה וכו'. להטמיע ערכים אלו ישירות בקוד – מסוכן ולא מומלץ. במקום זאת, מומלץ להשתמש בקובץ .env
.
מהו קובץ .env
?
קובץ .env
הוא קובץ טקסט פשוט, שכל שורה בו מייצגת משתנה סביבה בפורמט:
API_KEY=your-secret-api-key
DB_PASSWORD=super-secret-password
קובץ זה לא מועלה למערכת ניהול גרסאות (Git) והוא משמש אך ורק להגדרות מקומיות.
מדוע אסור לאחסן סודות בקוד?
דוגמה לפרקטיקה לקויה:
API_KEY = "sk-1234567890abcdef" # ❌
אם קוד כזה יגיע למאגר ציבורי – תחשוף במקרה את הסודות. גם אם תמחק את הקובץ מאוחר יותר – ההיסטוריה של הקומיטים עדיין תשמור את המפתח.
התקנת python-dotenv
לעבודה עם קבצי .env
ב-Python משתמשים לעיתים קרובות בספריה python-dotenv
.
להתקנה:
pip install python-dotenv
כיצד להשתמש בקובץ .env
ב-Python
- צור קובץ
.env
בשורש הפרויקט:
API_KEY=sk-1234567890abcdef
DB_PASSWORD=my_db_password
- הוסף את הקובץ
.env
לקובץ.gitignore
כדי למנוע העלאתו ל-Git:
.env
- טען את המשתנים ב-Python:
from dotenv import load_dotenv
import os
load_dotenv() # טוען את המשתנים מתוך הקובץ .env
api_key = os.getenv("API_KEY")
db_password = os.getenv("DB_PASSWORD")
כעת המשתנים api_key
ו-db_password
זמינים בקוד ללא הצורך להכניס את הערכים ידנית.
דוגמה מתקדמת
אם ברצונכם לטעון קובץ .env
ממיקום ספציפי:
from dotenv import load_dotenv
from pathlib import Path
import os
env_path = Path('.') / 'config' / '.env'
load_dotenv(dotenv_path=env_path)
token = os.getenv("TG_BOT_TOKEN")
חלופה: משתני סביבה במערכת
ניתן גם להגדיר משתני סביבה ישירות במערכת ההפעלה (למשל, בסביבות CI/CD או בקונטיינרי Docker) ולהשתמש ב-os.getenv()
ללא הספריה python-dotenv
.
שיטות עבודה מומלצות
- לעולם אל תעלה את קובץ ה-
.env
למאגר – הוסף אותו לקובץ.gitignore
. - שמור קובץ
.env.example
עם ערכים ריקים בתור תבנית:
# .env.example
API_KEY=
DB_PASSWORD=
- השתמש בקבצי
.env
נפרדים לסביבות שונות: .env.dev
.env.prod
.env.test
וטען את הקובץ המתאים בהתאם להקשר.
סיכום
השימוש בקבצי .env
מהווה צעד פשוט אך חשוב להגדלת הבטיחות והגמישות של הפרויקט. היתרונות כוללים:
- הפרדת ההגדרות מהקוד,
- הגנה על נתונים רגישים,
- פישוט תהליכי הפריסה בסביבות שונות.
אל תכניסו סודות ישירות לקוד. השתמשו בקבצי .env
, והפכו את הפרויקט שלכם לא רק לפונקציונלי אלא גם לבטוח.