微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:将 .env (dotenv) 文件与 tox 结合使用 tox.ini.envmain.pytest_main.py

如何解决Python:将 .env (dotenv) 文件与 tox 结合使用 tox.ini.envmain.pytest_main.py

在我的 Python 项目中,我正在从 .env 文件中读取环境变量。我实际上是在使用 pydantic 来读取/验证环境变量。

使用 tox 时,.env 文件将被完全忽略。我想知道如何让 tox 承认 .env 的存在?

这是我的tox.ini

[tox]
envlist = py39

[testenv]
deps = -r requirements-dev.txt
commands = pytest {posargs}

我的 .env 文件

ENV_STATE="prod"  # dev or prod

解决方法

起初,我想可能 pydantic.env 文件的内容加载为环境变量,这就是为什么我写这个作为我的第一个答案:

原答案

tox 做了一些隔离工作,因此您的构建/测试更具可重现性。

这意味着例如环境变量被过滤掉,除非你将它们列入白名单。

您可能需要设置

passenv = YOUR_ENVIRONMENT_VARIABLE

另见tox documentation

更新答案

这似乎根本不是 tox 问题。

我刚刚用 pydanticdotenv 创建了一个简单的项目,它与 tox 一起工作就像一个魅力。

tox.ini

[tox]
envlist = py39
skipsdist = True

[testenv]
deps = pydantic[dotenv]
commands = pytest {posargs}

.env

ENVIRONMENT="production"

main.py

from pydantic import BaseSettings


class Settings(BaseSettings):
    environment: str

    class Config:
        env_file = ".env"
        env_file_encoding = "utf-8"

test_main.py

from main import Settings


def test_settings():
    settings = Settings(_env_file=".env")
    assert settings.environment == "production"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。