Windows/Linux 自动适配 + Pydantic Settings 配置

config.py整个后端服务的"总配置中枢",所有路径、接口地址、并发控制、开关模式都在这里统一管理。

很多同学刚接触时会困惑:

  • 这些 Field 是干嘛的?
  • 为什么 Windows 和 Linux 路径不一样?
  • 这个配置到底给谁用、谁在调用?

一、文件整体作用

config.py = 项目全局配置管家

统一管理:

  • 服务启动地址、端口
  • 文件存储路径(自动适配 Windows/Linux)
  • 外部接口地址
  • 模板缓存目录
  • 接口超时、并发限制
  • 本地模拟数据开关(Mock 模式)
  • AI 绘图接口调用方式

一套代码,Windows 开发、Linux 部署自动切换,无需手动改路径。


二、完整代码 + 逐行说明

1. 导入依赖 + 系统判断工具

python 复制代码
import platform
from pathlib import Path
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field
  • platform:判断当前是 Windows 还是 Linux
  • Path:处理文件路径,兼容不同系统
  • BaseSettings:Pydantic 配置类,自动读 .env
  • Field:给配置项设置动态默认值、别名、说明

2. 判断是否为 Windows 系统

python 复制代码
def _is_windows() -> bool:
    return platform.system() == "Windows"

作用:返回 True = Windows,False = Linux/Mac


3. 动态默认值函数(核心:自动切换路径)

3.1 默认数据存储目录

python 复制代码
def _default_data_dir() -> str:
    if _is_windows():
        return "D:/AICreama/booth/data"  # 本地开发用
    return "/data"                      # Linux 服务器用
  • Windows:数据存在 D 盘
  • Linux:直接存在根目录 /data

3.2 外部访问地址

python 复制代码
def _default_public_base_url() -> str:
    if _is_windows():
        return "http://127.0.0.1:9002"
    return "http://127.0.0.1:9002"

本地开发/测试都用本地回环地址。

真实部署 Linux 时可改为容器内部服务名 http://pipeline:9002

3.3 平台接口地址

python 复制代码
def _default_platform_base_url() -> str:
    if _is_windows():
        return "http://127.0.0.1:8089"
    return "http://127.0.0.1:8089"

8089 是平台后端接口,9002 是当前图片服务。

3.4 模板缓存目录

python 复制代码
def _default_template_cache_dir() -> str:
    return str(Path(_default_data_dir()) / "_templates")

自动拼路径:

  • Windows:D:/AICreama/booth/data/_templates
  • Linux:/data/_templates

3.5 本地 Mock 数据目录

python 复制代码
def _default_platform_mock_dir() -> str:
    return str(Path(__file__).resolve().parent / "mocks")

存放模拟接口返回的 JSON 文件,用于离线开发、不连后端也能调试


三、Settings 配置类详解(核心重点)

python 复制代码
class Settings(BaseSettings):
    # 自动读取 .env 文件,忽略多余字段
    model_config = SettingsConfigDict(env_file=".env", extra="ignore")

3.1 服务启动配置

python 复制代码
PIPELINE_HOST: str = "0.0.0.0"       # 允许任何IP访问
PIPELINE_PORT: int = 9002            # 图片服务端口

3.2 数据目录(动态默认值)

python 复制代码
PIPELINE_DATA_DIR: str = Field(
    default_factory=_default_data_dir,  # 自动判断系统路径
    validation_alias="PIPELINE_DATA_DIR"
)

BOOTH_DATA_DIR: str = Field(
    default_factory=_default_data_dir,
    validation_alias="BOOTH_DATA_DIR"
)
  • default_factory动态生成默认值(不是写死)
  • validation_alias:允许从环境变量/ .env 覆盖配置

3.3 外部访问地址

python 复制代码
PUBLIC_BASE_URL: str = Field(
    default_factory=_default_public_base_url
)

给前端返回的图片访问域名。

3.4 并发控制

python 复制代码
MAX_SEGMENT_CONCURRENCY: int = 1   # 人像抠图最大并发
MAX_BG_CONCURRENCY: int = 1        # 背景处理最大并发

防止显卡/CPU 爆掉。

3.5 模板缓存目录

python 复制代码
TEMPLATE_CACHE_DIR: str = Field(
    default_factory=_default_template_cache_dir
)

3.6 平台接口配置

python 复制代码
PLATFORM_BASE_URL: str = Field(
    default_factory=_default_platform_base_url
)

PLATFORM_TIMEOUT_MS: int = Field(default=5000)  # 接口超时5秒

3.7 本地 Mock 开关(超级常用)

python 复制代码
PLATFORM_MOCK_ENABLED: bool = Field(
    default=False,
    description="True=使用本地假数据,False=调用真实平台接口"
)
PLATFORM_MOCK_DIR: str = Field(default_factory=_default_platform_mock_dir)
PLATFORM_MOCK_FILE: str = Field(default="platform_resolve_mock.json")

开发神器

  • 后端没联通 → 开 Mock → 直接读本地 JSON
  • 后端通了 → 关 Mock → 正常调用接口

3.8 AI 绘图 HTTP 客户端

python 复制代码
WAN26_HTTP_CLIENT: str = Field(
    default="httpx",
    description="选择 httpx 或 requests 发请求"
)

四、最终创建全局配置实例

python 复制代码
settings = Settings()

这一行是全项目入口

其他所有文件都这么用:

python 复制代码
from config import settings

# 读取路径
settings.PIPELINE_DATA_DIR

# 读取接口地址
settings.PLATFORM_BASE_URL

# 判断是否开启Mock
if settings.PLATFORM_MOCK_ENABLED:
    ...

五、Windows 与 Linux 区别对照表

配置项 Windows 默认值 Linux 默认值
数据目录 D:/AICreama/booth/data /data
模板缓存 D:/AICreama/booth/data/_templates /data/_templates
图片服务地址 http://127.0.0.1:9002 http://127.0.0.1:9002
平台接口地址 http://127.0.0.1:8089 http://127.0.0.1:8089
Mock 目录 项目下 mocks 文件夹 项目下 mocks 文件夹

六、谁在调用 config.py

下面这些模块全都依赖 config

  1. FastAPI 启动服务 → 读 HOST、PORT
  2. 图片上传/保存 → 读 DATA_DIR
  3. 证件照模板加载 → 读 TEMPLATE_CACHE_DIR
  4. 调用平台接口 → 读 PLATFORM_BASE_URL
  5. 本地离线调试 → 读 PLATFORM_MOCK_ENABLED
  6. AI 绘图增强 → 读 WAN26_HTTP_CLIENT

config 是整个后端的"神经系统"。


七、为什么这么设计?

  1. 统一配置,一改全改
  2. 自动适配 Windows/Linux,不用手动改路径
  3. 支持 .env 环境变量,安全不泄露
  4. Mock 模式支持离线开发
  5. 类型安全,避免写错路径、端口

八、总结

  • config.py = 项目全局配置中心
  • Field(default_factory=...) = 动态默认值,自动切系统
  • settings = Settings() = 全项目唯一配置实例
  • 所有路径、地址、开关、并发都在这里管
  • Windows 开发、Linux 部署一套代码通用
相关推荐
叶帆8 小时前
【YFIOs】Docker方式部署
运维·docker·容器
小猿姐8 小时前
Clickhouse Kubernetes Operator 实测:哪种方案更适合生产?
运维·数据库·kubernetes
彩色的黑'''9 小时前
[root@localhost ~]#,Linux系统的命令提示符为啥现在变成-bash-4.2#了,哪里设置的
linux·运维·bash
树下水月9 小时前
文件分片上传接口(Easyswoole)被nginx拦截,并返回状态码400和408的抓包排查过程
运维·nginx
源远流长jerry9 小时前
Linux 网络发送机制深度解析:从应用到网线
linux·服务器·网络·网络协议·tcp/ip
南境十里·墨染春水10 小时前
linux学习进展 shell编程
linux·运维·学习
goyeer10 小时前
【ITIL4】32服务实践 - 问题管理(Problem Management)
linux·运维·服务器·企业数字化·it管理·itil·it治理
怀旧,11 小时前
【Linux网络编程】8. 网络层协议 IP
linux·网络·tcp/ip
RH23121111 小时前
2026.5.12 Linux
java·linux·数据结构
cen__y11 小时前
Linux11(网络编程)
linux·运维·服务器·c语言·网络·网络协议·tcp/ip