如何在 运行 之后清理有毒环境?

How to clean a tox environment after running?

我有以下 tox.ini 文件:

[tox]
envlist = flake8,py{35,36,37,38}{,-keyring}

[testenv]
usedevelop = True
install_command = pip install -U {opts} {packages}
deps =
    .[test]
    keyring: .[keyring]
setenv =
    COVERAGE_FILE = .coverage.{envname}
commands=
    pytest {toxinidir}/tests -n 4 {posargs}

[testenv:flake8]
basepython = python3
deps = flake8
commands=
    flake8 src tests

[flake8]
ignore: F401,E402,E501,W605,W503

当我 运行 tox 命令时,它会创建一个 .tox 文件夹,其中包含 [=12= 的 [tox] 部分中指定的每个环境的文件夹].

我想在 运行ning tox 测试成功后自动读取这些特定文件夹,而无需手动 运行 rm -rf .tox/NAME_OF_THE_ENV。我搜索了 tox 文档,但一无所获。

可以吗?如果是,如何?

tox没有办法。原因是 tox 将这些环境保存为缓存:下次您 运行 tox 环境将被重用,从而节省时间。

您可以在 运行 宁 toxrm -rf .tox 之后立即删除它们。

我找到了创建毒钩子的方法。此钩子 运行s shutil.rmtree 命令在测试 运行 进入环境后

tox_clean_env.py 文件中:

import shutil
from tox import hookimpl

@hookimpl
def tox_runtest_post(venv):
    try:
        shutil.rmtree(venv.path)
    except Exception as e:
        print("An exception occurred while removing '{}':".format(venv.path))
        print(e)

我围绕这段代码创建了一个包,我只需要使用 pip.

安装它

在我的 setup.py 中,在 setup 函数中:

    entry_points={"tox": ["clean_env = tox_clean_env"]},

我知道这不是你想要的,但值得一提的是 -r / --recreate tox 标志将 force recreation of virtual environments