我有一些代码可以加载默认配置文件,然后允许用户提供自己的 Python 文件作为额外的补充配置或覆盖默认值:
# foo.py
def load(cfg_path=None):
# load default configuration
exec(default_config)
# load user-specific configuration
if cfg_path:
execfile(cfg_path)
但是有一个问题:execfile()
在 指定的文件中执行指令,cfg_path
就好像它在 的工作目录中foo.py
,而不是它自己的工作目录。因此,如果文件确实如此,指令可能import
会失败,例如,与.cfg_path
from m import x
m
cfg_path
我如何execfile()
从其参数的工作目录中,或以其他方式获得等效的结果?另外,有人告诉我,execfile
它在 Python 3 中已弃用,我应该使用exec
,所以如果有更好的方法我应该这样做,我会全力以赴。
注意:我不认为仅仅改变工作目录的解决方案是正确的。据我所知,这不会将这些模块放在解释器的模块查找路径中。