У меня есть ряд тестов pytest
, развернутых с использованием tox
, которые устанавливают старую версию модуля, затем импортируют ее, а затем устанавливают более новую версию того же модуля. Тесты проверяют, что обновление уже загруженного модуля вызывает предупреждение (чтобы сообщить пользователю о перезапуске сеанса/интерпретатора).
Моя проблема в том, что успех тестов зависит от того, установлена ли старая версия модуля в хост-среде (например, pip install --user random_module && tox
или pip uninstall random_module && tox
). Я был очень удивлен, обнаружив, что тесты чувствительны к тому, что я установил в своем пользователе. Что происходит и как избежать этого взаимодействия, чтобы тесты выполнялись одинаково, независимо от того, что установлено в site-packages
моего пользователя?
Подробнее о проекте
Я пишу пакет-оболочку для pip, позволяющий устанавливать пакеты из REPL/консоли/скрипта. Одно из осложнений, которое возникает при этом, заключается в том, что кто-то мог уже загрузить модуль, а затем установить обновление, но старая версия останется в памяти. В этих случаях мне нужно предупредить пользователя, что ему необходимо перезапустить сеанс, чтобы новая установка вступила в силу.
pip install "pytest<5" && tox -e py37
, затемpip install "pytest>=5" && tox -e py37
, но результаты тестов были идентичными. Как я могу воспроизвести проблему? - person hoefling   schedule 07.08.2019#3-origin
выполнитеgit pull
, затемtox
должно пройти все, кроме одного, ноpython3 -m pip install --user progress==1.4 && tox
должно завершиться ошибкой на 3. Тесты зависят от пакетаprogress
, который на данный момент является своего рода хаком. В конце концов, я положу пакеты с игрушками в свою тестовую папку, чтобы поиграть с ними. - person reynoldsnlp   schedule 07.08.2019tox
запускает тесты в собственной изолированной среде. Я думаю, что это как-то связано с тем, что тесты не очищают установкуprogress
- попробуйте запустить, например..tox/py36/bin/pytest tests/functional/test_install.py::test_progress_already_loaded_warning
результат теста будет чередоваться между отказом и прохождением, в зависимости от того, что осталось установленным после предыдущего выполнения. - person hoefling   schedule 07.08.2019.tox/py36/bin/pytest tests/functional/test_install.py::test_progress_already_loaded_warning; .tox/py36/bin/pip show progress | grep Version
, чтобы увидеть, что я имею в виду. - person hoefling   schedule 07.08.2019--recreate
, чтобы заставить его работать заново. Спасибо за помощь, @hoefling! Если вы хотите превратить ваши комментарии в ответ, я с радостью приму его. - person reynoldsnlp   schedule 08.08.2019