【发布时间】:2010-12-21 06:15:46
【问题描述】:
我有一些代码可以加载默认配置文件,然后允许用户提供自己的 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,所以如果有更好的方法我应该这样做,我会全力以赴。
注意:我不认为仅仅改变工作目录的解决方案是正确的。据我所知,这不会将这些模块放在解释器的模块查找路径中。
【问题讨论】:
标签: python working-directory execfile