在Python 3中,execfile的替代方法是什么?

450

看起来他们在Python 3中取消了所有快速加载脚本的简单方式,通过移除execfile()

我是否遗漏了一些明显的替代方案?


2
reload已经回归,作为3.2版本之后的imp.reload - Danica
20
如果您正在交互式地使用Python,请考虑使用IPython:%run script_name适用于所有版本的Python。 - Michael
3
自3.4版本起,imp模块被替换为必须先导入的importlib模块。使用importlib.reload(mod_name)可以重新导入并执行mod_name模块。 - P. Wormer
3
runfile("filename.py") 有什么问题? - mousomer
1
谢谢 @mousomer!! 我正需要 runfile() 的功能,因为我需要运行一个在其自己的命名空间中执行的 Python 脚本(与在 调用 命名空间中执行相反)。 我的应用程序:使用 __file__ 属性将被调用脚本的目录添加到系统路径 (sys.path) 中:如果我们使用 execfile() 或其 Python 3 中的等效方法 (exec(open('file.py').read())),则包含的脚本将在调用命名空间中运行,因此 __file__ 解析为 调用 文件名。 - mastropi
@TarmoPikaro 撤销了您的编辑,修改 sys.argv 真的超出了此函数的范围,并且有一些(在我看来)不可接受的缺点,因为调用者可能在其他地方使用 sys.argv。这可能会被暂时覆盖(这不是线程安全的)...但在某些情况下仍然可以接受。无论如何 - 这不是原始 execfile 支持的,如果您想要可选地传递环境、argv、工作目录等,则可以提供一个单独的答案。 - ideasman42
12个回答

4
此外,虽然不是纯Python解决方案,但如果您正在使用IPython(通常应该使用),您可以执行以下操作:
%run /path/to/filename.py

同样很容易。

2

我只是一个新手,也许是纯粹的运气让我找到了这个:

在尝试使用解释器提示符 >>> 命令运行脚本后

    execfile('filename.py')

我得到一个“NameError:未定义名称'execfile'”的错误,我尝试了一个非常基本的方法。
    import filename

它运行得很好 :-)

我希望这可以有所帮助,感谢大家提供的伟大提示、示例和所有那些精心注释的代码片段,这对新手来说是一个巨大的启发!

我使用的是Ubuntu 16.014 LTS x64。 Python 3.5.2(默认值,2016年11月17日,17:05:23) [GCC 5.4.0 20160609]在Linux上


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接