pytest 在使用 __pycache__ 时隐藏警告
pytest hides warnings when __pycache__ is used
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 的工作方式一致——无效的转义序列警告仅在编译源代码时被忽略(之后,pyc 文件可用并且不参考源代码)
你可以设置PYTHONDONTWRITEBYTECODE=1
环境变量来防止pyc写,但是这样你就得应付反复编译代码启动慢的代价
我建议使用 linter 来检测此问题(例如 flake8 在默认情况下通过 pycodestyle 检测此问题)and/or 一个自动修复程序来修复此问题(例如 pyupgrade fixes this)
免责声明:我是 pytest 的核心开发人员,我是 flake8 的当前维护者,我是 pycodestyle 的维护者,我创建了 pyupgrade
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 的工作方式一致——无效的转义序列警告仅在编译源代码时被忽略(之后,pyc 文件可用并且不参考源代码)
你可以设置PYTHONDONTWRITEBYTECODE=1
环境变量来防止pyc写,但是这样你就得应付反复编译代码启动慢的代价
我建议使用 linter 来检测此问题(例如 flake8 在默认情况下通过 pycodestyle 检测此问题)and/or 一个自动修复程序来修复此问题(例如 pyupgrade fixes this)
免责声明:我是 pytest 的核心开发人员,我是 flake8 的当前维护者,我是 pycodestyle 的维护者,我创建了 pyupgrade