使用本地ENV文件的basessettings模型的Pydantic验证错误



我正在开发一个简单的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_modeenv 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"

相关内容

  • 没有找到相关文章