Skip to content

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=True

3. 实战演练 (Action)

Step 1: 安装

bash
pip install python-dotenv

Step 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)

  1. 代码里没有任何硬编码的 URL、Key 或密码。
  2. 修改 .env 文件,程序的行为会随之改变(比如开启/关闭 Debug 模式)。
  3. .env 文件没有被 Git 追踪。

Next Mission: L24. 自动化集成:让消息飞一会

基于 Claude Code 构建