python是如何分配__module__的?
我们的代码里有一个日志装饰器,它会打印调用函数的 __module__
。最近,有人添加了一个单元测试来验证记录的参数,这个测试显示,当我们通过 poetry
运行测试时,__module__
的值是一个样子,而当我们直接通过 python -m unittest
运行时,值又变成了另一个样子。
具体来说:
在 $REPO_ROOT/tests/unit/foo/bar/baz/test_module.py
这个文件里,有一个定义好的测试函数。
- 当在我们的持续集成环境中(通过
poetry
)运行时,这个函数的__module__
被识别为tests.unit.foo.bar.baz.test_module
。 - 而当通过
python -m unittest
运行时,它的值是unit.foo.bar.baz.test_module
。
我个人认为,我们应该取消那个检查特定模块名称的测试,因为这只是人能看见的文本,差别并不重要,但这让我想知道:
Python 是怎么设置这个 __module__
字段的呢?
1 个回答
1
poetry
的配置让它把 test
当成一个包来处理,而不是把它当成一个目录,这个目录里可以找到 unit
包。因此,unit
被视为 test
包中的一个子包,而不是一个独立的顶级包。