Environment Variables & Config
เก็บค่าตั้งค่าและ secret (เช่น API key) ไว้นอกโค้ด — ปลอดภัยและเปลี่ยนได้โดยไม่แก้โปรแกรม
API key, รหัสผ่านฐานข้อมูล, URL ของ server เหล่านี้ไม่ควรฮาร์ดโค้ดไว้ในโปรแกรม เพราะเปลี่ยนยากและเสี่ยงหลุดขึ้น git environment variable คือวิธีมาตรฐานในการเก็บค่าพวกนี้ไว้ "นอกโค้ด"
อ่าน environment variable
import os
# อ่านค่าจาก environment (คืน None ถ้าไม่มี)
api_key = os.environ.get("API_KEY")
# กำหนดค่า default ถ้าไม่มี
port = os.environ.get("PORT", "8000")
# ถ้าจำเป็นต้องมี ให้ raise เมื่อไม่เจอ
db_url = os.environ["DATABASE_URL"] # KeyError ถ้าไม่มี# ตั้งค่า env var ตอนรัน (macOS/Linux)
export API_KEY=secret123
python app.py
# หรือใส่หน้าคำสั่งครั้งเดียว
API_KEY=secret123 python app.pyไฟล์ .env + python-dotenv
การ export ทีละตัวไม่สะดวก นิยมเก็บค่าทั้งหมดไว้ในไฟล์ .env แล้วใช้ library python-dotenv โหลดเข้ามา
# ไฟล์ .env
API_KEY=secret123
DATABASE_URL=postgres://localhost/mydb
PORT=8000from dotenv import load_dotenv # pip install python-dotenv
import os
load_dotenv() # อ่าน .env เข้าสู่ environment
api_key = os.environ.get("API_KEY")
print(api_key) # secret123แยก config ออกจากโค้ด
# config.py — รวมการอ่าน config ไว้ที่เดียว
import os
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.environ.get("API_KEY")
DATABASE_URL = os.environ.get("DATABASE_URL")
DEBUG = os.environ.get("DEBUG", "false").lower() == "true"
# ไฟล์อื่นแค่ from config import API_KEYใส่ .env ใน .gitignore เสมอ! การเผลอ commit API key/รหัสผ่านขึ้น git (โดยเฉพาะ public repo) คือช่องโหว่ความปลอดภัยร้ายแรง — แม้ลบทีหลัง ค่าก็ยังอยู่ใน history นิยมทำไฟล์ .env.example ที่มีแค่ชื่อ key (ไม่มีค่าจริง) เข้า git แทนเพื่อให้คนอื่นรู้ว่าต้องตั้งอะไรบ้าง
สรุปหัวข้อนี้
- เก็บ secret/config ไว้นอกโค้ดด้วย environment variable
- อ่านด้วย os.environ.get("KEY", default) — get ปลอดภัยกว่าวงเล็บเหลี่ยม
- เก็บรวมใน .env แล้วโหลดด้วย python-dotenv (load_dotenv())
- ใส่ .env ใน .gitignore เสมอ — ทำ .env.example ไว้บอก key แทน
1) ย้าย API key ที่ฮาร์ดโค้ดในโปรแกรมไปเป็น env var 2) สร้างไฟล์ .env แล้วโหลดด้วย python-dotenv 3) เขียน config.py ที่รวมการอ่าน config 4) เพิ่ม .env เข้า .gitignore แล้วสร้าง .env.example