Python 3中execfile的替代方案?

时间:2011-06-15 12:02:54

标签: python python-3.x import execfile

Python 2有内置函数execfile,它已在Python 3.0中删除。 This question讨论了Python 3.0的替代方案,但有些considerable changes已经制作since Python 3.0

对于Python 3.2 execfilefuture Python 3.x versions,{/ 3}}的最佳替代方法是什么?

4 个答案:

答案 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

注意:

  • 使用二进制读取来避免编码问题
  • Garenteed关闭文件(Python3.x警告此事)
  • 定义__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是另一种选择。