Как очистить токсичную среду после запуска?

У меня есть следующий 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, содержащую папку для каждой среды, указанной в разделе [tox] файла tox.ini.

Я хотел бы получить автоматическое чтение этих конкретных папок после успешного выполнения теста при запуске tox без необходимости вручную запускать rm -rf .tox/NAME_OF_THE_ENV. Я просмотрел документацию tox, но ничего не нашел.

Возможно ли это сделать? Если да, то как?


person vinzee    schedule 02.01.2020    source источник


Ответы (3)


Я знаю, что это не совсем то, о чем вы просили, но стоит упомянуть, что флаг -r / --recreate для tox будет принудительное воссоздание виртуальных сред

person Matthew Hegarty    schedule 26.04.2020

Нет пути в tox. Причина в том, что tox сохраняет эти среды как кеш: при следующем запуске tox среды будут повторно использованы, что сэкономит время.

Вы можете удалить их сразу после запуска tox с rm -rf .tox.

person phd    schedule 02.01.2020

Я нашел способ, создав токсичный крючок. Этот хук запускает команду shutil.rmtree после того, как тесты были запущены внутри env.

В файле 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"]},
person vinzee    schedule 07.01.2020