Предупреждения Pytest различаются между первым и последующим запуском.
janbet@ub/home/janbet $ cat test_x.py
def test_1():
a = '\d'
janbet@ub/home/janbet $ pytest test_x.py | tail -1
========================= 1 passed, 1 warning in 0.00s =========================
janbet@ub/home/janbet $ pytest test_x.py | tail -1
============================== 1 passed in 0.00s ===============================
Предупреждение снова появляется после rm -r __pycache__
или touch test_x.py
или что-то в этом роде.
Я предполагаю, что эти предупреждения создаются, когда файлы .py
читаются, а когда __pycache__
доступны и обновлены, они вообще не читаются. Это верно?
Есть ли простой способ заставить pytest
вообще никогда не использовать __pycache__
? Возможно, это не очень важно, но я терпеть не могу ситуации, когда результат моего тестового прогона зависит от каких-то внутренних файлов, созданных или не созданных во время предыдущих прогонов.
для этого конкретного предупреждения это согласуется с тем, как работает python - предупреждения о недопустимой escape-последовательности опускаются только при компиляции источника (после этого файлы pyc доступны, а источник не консультируется)
вы можете установить переменную среды PYTHONDONTWRITEBYTECODE=1
, чтобы предотвратить запись pyc, но тогда вам придется иметь дело с медленными затратами на запуск многократной компиляции кода
Я бы рекомендовал вместо этого использовать линтер, чтобы обнаружить это (например, flake8 обнаруживает это через pycodestyle в случае по умолчанию) и/или автофиксер, чтобы исправить это (например, pyupgrade исправляет это)
отказ от ответственности: я основной разработчик pytest, я текущий сопровождающий flake8, я сопровождаю pycodestyle, я создал pyupgrade
Еще лучше - объедините все эти инструменты в
.pre-commit-config.yml
и позвольтеpre-commit --all-files
делать тяжелую работу :-) еще одна поклонницаpre-commit
здесь!