在我的应用程序中,我在包中使用名为examplemod
的模块example
我的应用:
from example import examplemod
examplemod.do_stuff()
它像这样导入example
内的另一个模块。
examplemod.py:
from example import config
# uses config
# then does stuff
config
使用常量。
config.py:
CONSTANT = "Unfortunate value"
我想在应用程序中使用 examplemod
时覆盖此常量(将其设置为 CONSTANT = "Better value"
),并且我不想修改底层模块,这样我就不必维护自己的包。我该怎么做?
是的,但它只能通过模块的完全限定访问路径按预期工作:
import example
example.examplemod.config.CONSTANT = "Better value"
example.examplemod.do_stuff()
谢谢大家的回答。他们为我指出了正确的方向,尽管他们都没有像写的那样工作。我最终做了以下事情:
import example.config
example.config.CONSTANT = "Better value"
from example import examplemod
examplemod.do_stuff()
# desired result!
(另外,我正在向模块维护者提交补丁以使 CONSTANT 成为可配置的选项,所以我不必这样做,但需要同时安装库存模块。
这被称为猴子补丁,这是相当常见的,但如果有另一种方法可以完成同样的事情,则不是首选:
examplemod.config.CONSTANT = "Better value"
问题是您依赖于examplemod
的内部结构,并且config
保持不变,因此如果任何一个模块发生变化,这可能会中断。
我不确定这是否足够,但你试过吗:
from example import config
config.CONSTANT = "A desirable value"
请确保在导入examplemod
之前执行此操作。这应该有效,因为 python 缓存导入,因此您修改的config
将与examplemod
获取的相同。