python是如何分配__module__的?

2 投票
1 回答
32 浏览
提问于 2025-04-14 16:33

我们的代码里有一个日志装饰器,它会打印调用函数的 __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 包中的一个子包,而不是一个独立的顶级包。

撰写回答