Python 2有内置函数execfile
,它已在Python 3.0中删除。 This question讨论了Python 3.0的替代方案,但有些considerable changes已经制作since Python 3.0。
对于Python 3.2 execfile
和future Python 3.x versions,{/ 3}}的最佳替代方法是什么?
答案 0 :(得分:57)
2to3
脚本(也是Python 3.2中的脚本)取代了
execfile(filename, globals, locals)
通过
exec(compile(open(filename, "rb").read(), filename, 'exec'), globals, locals)
这似乎是官方的建议。
答案 1 :(得分:46)
execfile(filename)
可以替换为
exec(open(filename).read())
适用于所有版本的Python
答案 2 :(得分:7)
在Python3.x中,这是我可以直接执行文件的最接近的事情,它匹配正在运行的python /path/to/somefile.py
。
注意:
__main__
,一些脚本依赖于此来检查它们是否作为模块加载,例如。 if __name__ == "__main__"
__file__
对于异常消息更好,而某些脚本使用__file__
来获取与其相关的其他文件的路径。def exec_full(filepath):
import os
global_namespace = {
"__file__": filepath,
"__name__": "__main__",
}
with open(filepath, 'rb') as file:
exec(compile(file.read(), filepath, 'exec'), global_namespace)
# execute the file
exec_full("/path/to/somefile.py")
答案 3 :(得分:2)
标准runpy.run_path是另一种选择。