【问题标题】:pytest hides warnings when __pycache__ is usedpytest 在使用 __pycache__ 时隐藏警告
【发布时间】:2021-04-02 21:33:33
【问题描述】:

第一次和后续运行的 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 pytest warnings


    【解决方案1】:

    对于这个特定的警告,这与 python 的工作方式是一致的——无效的转义序列警告仅在编译源时被忽略(之后,pyc 文件可用且不参考源)

    你可以设置PYTHONDONTWRITEBYTECODE=1环境变量来防止pyc写入,但是你将不得不处理重复编译代码的缓慢启动成本

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


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

    【讨论】:

    • 甚至更好 - 将所有这些工具捆绑在 .pre-commit-config.yml 中,然后让 pre-commit --all-files 完成艰苦的工作 :-) pre-commit 的另一个追随者在这里!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    相关资源
    最近更新 更多