L23. 配置化改造:把死代码变活
Vibe Coding 宣言:凡是能在运行前改的东西,都不要写死在代码里。
0. 为什么这一课至关重要? (Why It Matters)
- 硬编码是万恶之源:如果你要把爬虫抓取频率从 1 秒改到 10 秒,还要去改代码、提交、重新部署?那你就是给自己找麻烦。
- 环境隔离:开发环境连本地数据库,生产环境连云数据库。如果写死了 IP,你就完蛋了。
- 安全:密码写在代码里会被偷。写在环境变量里才安全。
1. 目标 (Goal)
学会使用 python-dotenv 管理环境变量,并创建一个 config.py 来统一管理配置。
2. 核心概念/装备/指令 (The Core)
2.1 环境变量 (Environment Variables)
操作系统级别的变量。
os.getenv('KEY'): 获取变量。如果没设置,返回 None。
2.2 .env 文件 (The Secret File)
一个存变量的文件。切记不要提交到 Git!
DB_HOST=localhost
DB_PORT=5432
API_KEY=sk-xxxx
DEBUG=True3. 实战演练 (Action)
Step 1: 安装
bash
pip install python-dotenvStep 2: 创建 .env
在项目根目录创建 .env 文件,写入配置。
Step 3: 创建 config.py
不要在每个文件里都写 os.getenv。统一管理:
python
# config.py
import os
from dotenv import load_dotenv
load_dotenv() # 加载 .env
class Config:
DB_HOST = os.getenv('DB_HOST', 'localhost') # 默认值
API_KEY = os.getenv('API_KEY')
DEBUG = os.getenv('DEBUG', 'False').lower() == 'true'
if not API_KEY:
raise ValueError("API_KEY is missing!")Step 4: 使用配置
python
# main.py
from config import Config
if Config.DEBUG:
print("Debug mode is on")
connect_db(Config.DB_HOST)4. 常见问题 (FAQ - Vibe Style)
Q: 为什么 load_dotenv() 没生效? A: 路径不对。 确保你在项目根目录运行程序。或者显式指定路径:load_dotenv('/path/to/.env')。
Q: Git 怎么忽略 .env? A: 在 .gitignore 里加一行 .env。 这一步必须要在提交代码前做!
Q: 那队友怎么知道有哪些配置? A: 创建一个 .env.example。 里面只写 Key,不写 Value(或者写假数据)。队友拿到后复制一份改成 .env。
5. 验收标准 (Definition of Done)
- 代码里没有任何硬编码的 URL、Key 或密码。
- 修改
.env文件,程序的行为会随之改变(比如开启/关闭 Debug 模式)。 .env文件没有被 Git 追踪。
Next Mission: L24. 自动化集成:让消息飞一会