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

如何通过命令行将.env文件传入FastAPI应用?

实现启动时传入自定义.env文件路径的方案

Uvicorn本身没有内置--env参数来指定.env文件,但可以通过以下两种方式结合Pydantic实现需求:

方法一:通过环境变量传递路径

修改你的Settings类,让env_file优先读取环境变量的值,同时保留原路径作为默认 fallback:

from pydantic import BaseSettings, HttpUrl
import os

class Settings(BaseSettings):
    url: HttpUrl

    class Config:
        env_file = os.getenv("ENV_FILE", "config.env")  # 环境变量存在则用它,否则用默认的config.env

settings = Settings()

启动时通过环境变量指定自定义.env文件:

  • Linux/macOS:
    ENV_FILE=custom.env python -m uvicorn main:app --reload
    
  • Windows(CMD):
    set ENV_FILE=custom.env && python -m uvicorn main:app --reload
    
  • Windows(PowerShell):
    $env:ENV_FILE="custom.env"; python -m uvicorn main:app --reload
    

方法二:通过命令行参数直接传递

使用argparse解析自定义的--env参数,同时忽略Uvicorn自带的未知参数,再传给Pydantic的Settings:

from pydantic import BaseSettings, HttpUrl
import argparse

# 解析命令行参数,跳过Uvicorn的专属参数
parser = argparse.ArgumentParser()
parser.add_argument("--env", default="config.env", help="指定.env文件路径")
args, _ = parser.parse_known_args()

class Settings(BaseSettings):
    url: HttpUrl

# 实例化时直接指定_env_file参数,覆盖类内的默认配置
settings = Settings(_env_file=args.env)

启动时直接用--env参数指定路径:

python -m uvicorn main:app --reload --env custom.env

补充说明

Pydantic的BaseSettings支持在实例化时通过_env_file参数覆盖类Config中的配置,这种动态指定的方式比硬编码更灵活,适合需要切换不同配置文件的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:05:26