如何在导入的Python模块中覆盖常量?

Dav*_*gac 16 python module python-import

在我的应用程序中,我在包中使用模块example调用examplemod.

我的应用:

from example import examplemod
examplemod.do_stuff()
Run Code Online (Sandbox Code Playgroud)

它会example像这样导入另一个模块.

examplemod.py:

from example import config
# uses config
# then does stuff
Run Code Online (Sandbox Code Playgroud)

config 使用常数.

config.py:

CONSTANT = "Unfortunate value"
Run Code Online (Sandbox Code Playgroud)

当我examplemod在我的应用程序中使用它时CONSTANT = "Better value",我想覆盖这个常量(设置它),我不想修改底层模块,所以我不必维护自己的包.我怎样才能做到这一点?

var*_*tec 18

是的,但它只能按预期使用模块的完全限定访问路径:

import example
example.examplemod.config.CONSTANT = "Better value"
example.examplemod.do_stuff()
Run Code Online (Sandbox Code Playgroud)


Dav*_*gac 9

谢谢大家的答案.他们指出了正确的方向,尽管他们都没有像书面那样工作.我最后做了以下事情:

import example.config
example.config.CONSTANT = "Better value"

from example import examplemod
examplemod.do_stuff()
# desired result!
Run Code Online (Sandbox Code Playgroud)

(另外,我正在向模块维护者提交补丁,使CONSTANT成为可配置选项,所以我不必这样做,但需要同时安装库存模块.)