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

为何pytest(pytest-django)无法通过decouple读取Django项目的.env变量?

解决方案:复用Django项目级.env变量,无需重新定义

你的问题根源是pytest运行时未自动加载项目的.env文件,导致decouple无法读取环境变量。完全可以复用现有.env变量,无需重复定义,以下是几种可行方案:

方法1:在pytest配置文件中指定.env路径

修改pytest.ini,添加.env文件加载配置,让decouple能找到目标文件:

[pytest]
DJANGO_SETTINGS_MODULE = bapi_django.settings
env_files = .env

若.env文件不在项目根目录(比如和settings同级),可填写相对路径,例如env_files = bapi_django/.env。

方法2:用pytest钩子手动加载.env

在项目根目录创建conftest.py文件,添加以下代码,在pytest启动时加载.env变量:

from decouple import Config, RepositoryEnv
import os

def pytest_configure():
    # 定位项目根目录的.env文件
    env_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '.env')
    config = Config(RepositoryEnv(env_path))
    # 批量加载所有.env变量到当前环境
    for key in config:
        os.environ[key] = config(key)

这种方式灵活性更高,适合需要自定义加载逻辑的场景。

方法3:命令行临时加载.env(临时方案)

运行pytest前手动加载.env变量,适合临时测试:

# Linux/macOS
source .env && pytest

# Windows(PowerShell)
Get-Content .env | ForEach-Object { if ($_ -match '^[^#]') { $var = $_.Split('=',2); [Environment]::SetEnvironmentVariable($var[0].Trim(), $var[1].Trim()) } } && pytest

验证方式

修改后重新运行pytest,若不再抛出UndefinedValueError,说明.env变量已成功复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:03:12