Python 使用_pycache__时,pytest隐藏警告

Python 使用_pycache__时,pytest隐藏警告,python,pytest,warnings,Python,Pytest,Warnings,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 $ py

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\uuuu pycache\uuuu
touch test\u x.py
或类似内容之后再次出现

我猜这些警告是在读取
.py
文件时创建的,当
\uuuuupycache\uuuuuuu
可用且最新时,根本不会读取它们。这是正确的吗


有没有简单的方法可以强制
pytest
永远不要使用
\uuuuupycache\uuuuuuu
?这可能不是很重要,但我非常不喜欢测试运行结果依赖于某些内部文件的情况。

对于这个特定的警告,这与python的工作方式一致——编译源代码时只会忽略无效的转义序列警告(之后,pyc文件可用,不查阅来源)

您可以设置
pythondotwritebytecode=1
环境变量以防止pyc写入,但随后您必须处理重复编译代码的缓慢启动成本

我建议使用一个linter来检测(例如,在默认情况下,flake8通过pycodestyle来检测)和/或一个自动修复程序来修复(例如,pyupgrade)



免责声明:我是pytest的核心开发人员,我是flake8的当前维护者,我是pycodestyle的维护者,我创建了pyupgrade

甚至更好-将所有这些工具捆绑在
.pre-commit config.yml
中,让
pre-commit--所有文件
做艰苦的工作:-)这里是
pre-commit
的另一组!