You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用python-decouple管理Django项目多个不同的.env环境文件

多环境.env文件切换方案(基于python-decouple)

python-decouple原生不支持直接在manage.py命令后加--env-file参数指定配置文件,可通过以下几种方式实现多环境文件的切换管理:

方案1:通过环境变量指定配置文件路径

这是最轻量化的实现方式,不需要修改Django框架逻辑:

  1. 首先修改项目的settings.py文件,自定义decouple的配置加载逻辑:
import os
from decouple import Config, RepositoryEnv

# 优先读取系统环境变量中指定的env文件,默认加载开发环境配置
ENV_FILE = os.getenv("DJANGO_ENV_FILE", ".env.dev")
config = Config(RepositoryEnv(ENV_FILE))

# 后续所有配置读取都使用该config实例即可,示例如下
DEBUG = config('DEBUG', default=False, cast=bool)
SECRET_KEY = config('SECRET_KEY')
DATABASES = {
    'default': {
        'ENGINE': config('DB_ENGINE'),
        'NAME': config('DB_NAME'),
        'USER': config('DB_USER'),
        'PASSWORD': config('DB_PASSWORD'),
        'HOST': config('DB_HOST'),
        'PORT': config('DB_PORT', cast=int),
    }
}
  1. 运行Django命令前指定环境变量即可切换配置:
  • Linux/macOS环境:
    DJANGO_ENV_FILE=.env.prod python manage.py runserver
  • Windows CMD环境:
    set DJANGO_ENV_FILE=.env.prod && python manage.py runserver
  • Windows PowerShell环境:
    $env:DJANGO_ENV_FILE=".env.prod"; python manage.py runserver

方案2:配合Docker使用时直接指定env文件

如果用Docker部署,不需要修改Python代码,直接在Docker启动参数或docker-compose配置中指定env文件即可:

  1. 直接用Docker命令启动时:
    docker run --env-file .env.prod 你的镜像名
  2. 用docker-compose管理时,在不同环境的compose配置中指定env_file字段即可,示例:
# docker-compose.prod.yml
services:
  web:
    build: .
    command: gunicorn 你的项目名.wsgi:application --bind 0.0.0.0:8000
    env_file: .env.prod
    volumes:
      - ./:/app
    ports:
      - "8000:8000"

启动时指定对应compose文件即可自动加载对应环境配置:
docker compose -f docker-compose.prod.yml up -d

方案3:自定义manage.py参数支持--env-file

如果需要完全匹配你提到的--env-file命令格式,可以自行扩展manage.py的逻辑:
修改项目根目录下的manage.py文件,加入参数解析逻辑:

#!/usr/bin/env python
import os
import sys

def main():
    # 处理自定义--env-file参数
    env_file = ".env.dev"
    if "--env-file" in sys.argv:
        arg_index = sys.argv.index("--env-file")
        if arg_index + 1 < len(sys.argv):
            env_file = sys.argv.pop(arg_index + 1)
            sys.argv.pop(arg_index)
    os.environ["DJANGO_ENV_FILE"] = env_file

    # 原有Django启动逻辑
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)

if __name__ == '__main__':
    main()

修改完成后即可直接使用你期望的命令格式切换环境:
python manage.py runserver --env-file=.env.prod

注意事项

  • 所有.env文件都需要加入.gitignore规则,避免敏感信息(密钥、数据库密码等)提交到代码仓库
  • 可以在仓库中提供.env.example模板文件,标注所有需要填写的配置项,方便团队成员使用

内容的提问来源于stack exchange,提问作者Johnny Pereira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:57:04