gpt4 book ai didi

python - 来自包内的 imp.load_source

转载 作者:行者123 更新时间:2023-12-01 04:55:07 26 4
gpt4 key购买 nike

对于某些Python项目,我在config模块中定义了默认配置。可以通过使用 rc 文件来进行定制

config = imp.load_source('config', 'some_rc_file')

rc 文件可能仅重新定义配置变量的子集,甚至根本不重新定义,并且我希望未重新定义的变量仍将作为 config 模块的属性存在,其属性如下:默认值。如果从 __main__ 调用 load_source,一切都会顺利进行。但是,如果在包中使用它,则模块中唯一“留下”的变量是 rc 文件中的变量。

有一个 MWE heredirect.py 按预期工作,但 indirect.py

不工作
.
|-- run.sh # runs python {,in}direct.py
|-- altconfig.py # the rc file, redefines (only) BAR
|-- config.py -> testimp/config.py # symlink to use by direct.py
|-- direct.py # calls load_source directly
|-- indirect.py # calls load_source via uses_config.py
`-- testimp
|-- __init__.py
|-- config.py # default config, defines FOO and BAR
`-- uses_config.py

我缺少什么导入逻辑?

最佳答案

如果添加 print(config)在您的测试代码中,您将看到 import config 导入的模块名为config ,但是 from . import config 导入的模块在 testimp 中称为 testimp.configload_source 的第一个参数是要重用的模块的名称。既然您正在寻找 config ,找不到现有的导入,并且您会得到一个新的模块对象。

最简单的解决方案是不对模块的名称进行硬编码。将您的 imp 行更改为此,它将在任何地方工作:

config = imp.load_source(config.__name__, 'altconfig.py')

关于python - 来自包内的 imp.load_source,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com