如何使用python tox取消环境变量设置?

2024-04-20 10:39:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我非常了解passenvsetenv在毒素但我面临的情况是,我想取消一些变量的定义,使它们不包括在通配符passenv中。你知道吗

示例

[testenv]
passenv = ANSIBLE_*

# I how do I assure that ANSIBLE_INVENTORY is not passed?

Tags: 示例that定义is情况ansibledohow
2条回答

引用文档:

tox will take care of environment isolation for you: it will strip away all operating system environment variables not specified via passenv.

也就是说,您只是没有提到不希望传递的变量。你知道吗

对于passenv,文档说:

You can override these variables with the setenv option.

由于一个未设置的shell变量看起来像一个空字符串,您可以尝试setenv''所有您不想传递的变量。它可能工作,也可能不工作,这取决于代码如何使用这些变量,因为空env变量和未设置的env变量之间存在差异。你知道吗

我看不出有任何方法可以选择性地取消tox文档中的变量。我建议使用一些比ANSIBLE_*弱的通配符,这样它们就不会让您想要保持未设置的变量进入。你知道吗

另一种解决方案是在运行tox的shell中取消设置变量,以便tox进程无法访问和传递它们:

#!/bin/sh
unset ANSIBLE_KEYS_TO_KINGDOM
tox "$@"

到目前为止,似乎不可能执行这样的unset,所以我在https://github.com/tox-dev/tox/issues/1387将其作为一个特性请求提出

有一个解决办法,但非常不便,我甚至不知道是否值得一提:

command = bash -c "unset ANSIBLE_INVENTORY; <original command>"

如您所见,这种方法根本不可扩展,并且可以维护毒素一个真正的负担。你知道吗

相关问题 更多 >