项目下环境变量设置及.env的使用

前言

项目下的某些配置除了可以用专门的配置文件管理,也可以使用.env中设置。

.env格式示例

.env

1
2
3
# 基本键值对:KEY=VALUE
DEBUG=true
PORT=8000

加载示例

Python

安装 python-dotenv

1
pip install python-dotenv

创建 .env 文件

1
2
3
4
5
6
# .env
DATABASE_URL=postgresql://user:pass@localhost/mydb
API_KEY=your_secret_api_key_here
DEBUG=true
PORT=8000
MODEL_SERVICE_URL=http://localhost:8001

自动加载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from dotenv import load_dotenv
import os

# 加载 .env 文件(默认从当前目录找)
load_dotenv()

# 读取环境变量
db_url = os.getenv("DATABASE_URL")
api_key = os.getenv("API_KEY")
debug = os.getenv("DEBUG", "false").lower() == "true"
port = int(os.getenv("PORT", "5000"))

print(f"DB: {db_url}")
print(f"Debug mode: {debug}")

注意

load_dotenv() 会:

  • 自动查找当前工作目录下的 .env
  • 将其中的变量加载到 os.environ
  • 后续用 os.getenv() 即可读取

以下两种写法等效

1
2
3
4
# 便捷函数
os.getenv("GPU_NUM", "1")
# 等效
os.environ.get("GPU_NUM", "1")

SH脚本

Shell 脚本手动加载 .env

Bash (.sh):

方式1

1
2
# 导出 .env 中的变量
export $(grep -v '^#' .env | xargs)

方式2

使用 source/source 命令(需要 .env 文件格式正确)

1
2
3
set -a
source .env
set +a

在启动脚本中设置

run_model.sh:

1
2
3
# 直接在脚本中设置
export ALLREDUCE_STREAM_WITH_COMPUTE=1
export WEB_PORT=8002

使用

1
2
3
echo $WEB_PORT   # 输出: 8002
# 或者
echo ${WEB_PORT}

没有取默认值

1
WEB_PORT=${WEB_PORT:-3000}

语法

1
${VAR:-default}

如果 VAR 未设置为空字符串,则使用 default

BAT脚本

Windows Batch (.bat):

1
2
3
@echo off
REM 手动读取 .env 并设置环境变量
for /f "tokens=1,2 delims==" %%a in (.env) do set %%a=%%b

在启动脚本中设置

run_web.bat:

1
2
set MODEL_SERVICE_URL=http://localhost:8001
set WEB_SERVER_PORT=8888

Docker Compose

Docker Compose 会自动读取 .env 文件,可以在 docker-compose.yml 中直接引用:

1
2
3
4
services:
vllm_085:
environment:
- MODEL_SERVICE_URL=${MODEL_SERVICE_URL:-http://localhost:8001}

语法解释

1
${VARIABLE_NAME:-default_value}
  • 如果环境变量 VARIABLE_NAME 已定义且非空 → 使用它的值;
  • 如果未定义或为空 → 使用 default_value(即冒号后面的默认值)。

NodeJS

安装依赖

1
npm install dotenv

使用

1
2
require('dotenv').config();
console.log(process.env.DB_HOST);

注意

几乎所有 Node.js 项目(Express, NestJS, Next.js 等)都默认支持。

Go

安装

1
go get github.com/joho/godotenv

使用

1
2
godotenv.Load()
dbHost := os.Getenv("DB_HOST")

C# (.NET)

安装

1
dotnet add package DotNetEnv

使用

1
2
DotNetEnv.Env.Load();
var dbHost = Environment.GetEnvironmentVariable("DB_HOST");