Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:与tox一起使用.env(dotenv)文件_Python_Pytest_Tox_Pydantic - Fatal编程技术网

Python:与tox一起使用.env(dotenv)文件

Python:与tox一起使用.env(dotenv)文件,python,pytest,tox,pydantic,Python,Pytest,Tox,Pydantic,在我的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 pro

在我的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
也可以在中看到

最新答案 这似乎根本不是毒性问题

我刚刚用
pydantic
dotenv
创建了一个简单的项目,它在
tox
中就像一个符咒

伊氏弓形虫 环境署署长 main.py test_main.py
.env
中的变量不是真正的环境变量,也就是说,我无法通过os.getenv(“env_STATE”)获取它们。那么,我如何在tox.ini中定义它们呢
passenv=ENV_STATE
可能不会这样做。如何从
.ENV
文件中读取变量?e、 g.在生产或开发中?我正在使用
pydantic
BaseSettings
读取
.env
()中的变量。嗨,安迪,坏消息。。。这似乎根本不是毒性问题。我刚刚用pydantic和dotenv创建了一个简单的项目,它在
tox
中工作得很好。这是回购协议-您可以查看它和/或克隆它并运行它。如果你的代码是公开的,我可以看一看,否则我就不知道你为什么会有问题。如果我输入了我的环境名称或其他任何内容,pydantic会抛出一个错误。你能给我们看看你的.env和你的设置类吗?这是工作代码:我将更新我的答案-这与
tox
无关。
[tox]
envlist = py39
skipsdist = True

[testenv]
deps = pydantic[dotenv]
commands = pytest {posargs}
ENVIRONMENT="production"
from pydantic import BaseSettings


class Settings(BaseSettings):
    environment: str

    class Config:
        env_file = ".env"
        env_file_encoding = "utf-8"
from main import Settings


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