我正在开发一个简单的FastAPI应用程序,我使用Pydantic来存储应用程序设置。
一些设置是由Ansible部署工具设置的环境变量填充的,但其他一些设置需要从单独的env文件中显式设置。
这里是config.py
class Settings(BaseSettings):
# Project wide settings
PROJECT_MODE: str = getenv("PROJECT_MODE", "sandbox")
VERSION: str
class Config:
env_file = "config.txt"
这里是config.txt
VERSION="0.0.1"
因此project_mode
env var是通过部署脚本设置的,version
是通过env文件设置的。这样做的原因是我们希望在所有项目中保持部署脚本相似,因此任何自定义变量都是从项目特定的env文件中填充的。
但问题是,当我运行应用程序时,它失败了:
pydantic.error_wrappers.ValidationError: 1 validation error for Settings
VERSION
field required (type=value_error.missing)
那么我如何从本地ENV文件填充Pydantic设置模型?
如果环境文件没有被拾取,大多数情况下是因为它没有放在当前工作目录中。在您的应用程序中,需要在运行应用程序的目录中(或者如果应用程序本身管理CWD,则需要在期望找到CWD的目录中)。
特别是在运行测试时,这可能会有点令人困惑,如果从IDE运行测试,则可能必须配置IDE以将CWD设置为项目根目录来运行测试。
env_file的路径是相对于当前工作目录的,这也让我很困惑。为了始终使用相对于配置模块的路径,我将其设置为:
env_file: f"{pathlib.Path(__file__).resolve().parent}/config.txt"