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

时间:2019-07-31 14:44:38

标签: python tox

我非常了解passenvsetenv在tox.ini文件上的用法,但是我正面临一种情况,我想取消定义一些变量,以便它们不包含在通配符passenv中。

示例

[testenv]
passenv = ANSIBLE_*

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

2 个答案:

答案 0 :(得分:1)

引用文档:

  

tox将为您解决环境隔离问题:它将删除未通过passenv指定的所有操作系统环境变量。

也就是说,您只是不提及不想传递的变量。

对于passenv,文档说:

  

您可以使用setenv选项覆盖这些变量。

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

我看不到有任何方法可以有选择地在tox文档中取消设置变量。我建议使用一些比ANSIBLE_*弱的通配符,以免它们不让您希望保持不变的变量进入。

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

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

答案 1 :(得分:0)

到目前为止,似乎无法执行这样的取消设置,所以我在https://github.com/tox-dev/tox/issues/1387

提出了将其作为功能请求提出的条件。

有一个解决方法,但是它很不方便,我什至不知道是否值得一提:

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

如您所见,这种方法根本无法扩展,并且可能使tox.ini的维护成为真正的负担。