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

如何在Django中区分本地与生产环境配置?非Docker环境下指定.env文件启动项目的最优方案

在非Docker环境下指定.env文件启动Django的最佳方案

我来分享几个实际项目中常用的靠谱方法,完美解决你想要通过参数指定.env文件启动Django的需求:

方案1:用django-environ支持命令行指定.env路径(最推荐)

django-environ是Django生态里专门管理环境变量的工具,能轻松实现你想要的--env参数指定功能,步骤如下:

  1. 首先安装依赖:
pip install django-environ
  1. 在你的base.py配置文件中修改环境变量读取逻辑,让它能识别命令行参数:
import environ
import sys

# 初始化environ实例
env = environ.Env()

# 从命令行参数中提取--env指定的文件路径
env_file_path = None
for idx, arg in enumerate(sys.argv):
    if arg.startswith('--env='):
        env_file_path = arg.split('=')[1]
        # 移除这个自定义参数,避免Django的runserver命令报错
        sys.argv.pop(idx)
        break

# 读取指定的.env文件,没指定的话默认用.env.local
if env_file_path:
    env.read_env(env_file_path)
else:
    env.read_env('.env.local')
  1. 现在启动项目就可以直接用你想要的命令了:
python manage.py runserver --env=./.env.local

这个方式最符合你的需求,而且代码层面统一管理,后续扩展也方便。

方案2:通过环境变量传递.env路径(简洁高效)

如果不想处理命令行参数,也可以通过环境变量来指定.env文件,改动更小:

  1. 在base.py中修改:
import environ
import os

env = environ.Env()
# 读取ENV_FILE环境变量指定的文件,默认 fallback 到.env.local
target_env_file = os.environ.get('ENV_FILE', '.env.local')
env.read_env(target_env_file)
  1. 启动时直接设置环境变量即可:
ENV_FILE=./.env.local python manage.py runserver

这个方式不需要修改命令行参数的处理逻辑,适合喜欢简洁配置的场景。

方案3:优化你的Shell脚本(无代码改动)

如果不想修改Django代码,也可以把你的现有脚本优化得更健壮,支持--env参数:

创建一个start.sh脚本:

#!/bin/bash

# 默认使用.env.local
ENV_FILE=".env.local"

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case "$1" in
        --env=*)
            ENV_FILE="${1#*=}"
            shift
            ;;
        *)
            # 保留其他参数(比如runserver的端口)
            break
            ;;
    esac
done

# 导出.env中的环境变量(跳过注释行)
export $(grep -v '^#' "$ENV_FILE" | xargs)

# 启动Django,传递剩余的参数
python manage.py runserver "$@"

给脚本加执行权限:

chmod +x start.sh

然后启动项目:

./start.sh --env=./.env.local

这个方案完全不需要改动Django代码,纯Shell层面解决问题。


额外注意事项

  • 所有.env文件都要加入.gitignore,避免把数据库密码、密钥等敏感信息提交到代码仓库。
  • 如果你的settings拆分是config/settings/base.py、local.py、production.py这种结构,启动不同环境的配置时可以结合--settings参数,比如生产环境:
ENV_FILE=./.env.prod python manage.py runserver --settings=config.settings.production

内容的提问来源于stack exchange,提问作者Скелетор Кольт 1911 9мм

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 09:52:29