似乎他们取消了在Python 3中通过删除execfile()快速加载脚本的所有简单方法

我是否错过了一个明显的选择?


当前回答

如果你想要加载的脚本和你运行的脚本在同一个目录中,也许“import”就可以了?

如果你需要动态导入代码,内置函数__ import__和模块imp值得一看。

>>> import sys
>>> sys.path = ['/path/to/script'] + sys.path
>>> __import__('test')
<module 'test' from '/path/to/script/test.pyc'>
>>> __import__('test').run()
'Hello world!'

test.py:

def run():
        return "Hello world!"

如果您使用的是Python 3.1或更高版本,还应该看一看importlib。

其他回答

如果你想要加载的脚本和你运行的脚本在同一个目录中,也许“import”就可以了?

如果你需要动态导入代码,内置函数__ import__和模块imp值得一看。

>>> import sys
>>> sys.path = ['/path/to/script'] + sys.path
>>> __import__('test')
<module 'test' from '/path/to/script/test.pyc'>
>>> __import__('test').run()
'Hello world!'

test.py:

def run():
        return "Hello world!"

如果您使用的是Python 3.1或更高版本,还应该看一看importlib。

根据文档,而不是

execfile("./filename") 

Use

exec(open("./filename").read())

See:

Python 3.0有什么新特性

你可以写自己的函数:

def xfile(afile, globalz=None, localz=None):
    with open(afile, "r") as fh:
        exec(fh.read(), globalz, localz)

如果你真的需要…

这是我所拥有的(在两个例子中,file已经被分配到带有源代码的文件的路径):

execfile(file)

下面是我用它替换的:

exec(compile(open(file).read(), file, 'exec'))

我最喜欢的部分是:第二个版本在Python 2和3中都工作得很好,这意味着不需要添加版本相关的逻辑。

我在这里只是个新手,所以如果我发现这个,可能纯粹是运气:

尝试运行脚本后,从解释器提示>>>与命令

    execfile('filename.py')

为此我得到了一个“NameError: name 'execfile' is not defined”,我尝试了一个非常基本的

    import filename

它工作得很好:-)

我希望这能对你有所帮助,感谢大家提供的提示、示例和所有那些对新手有很大启发的注释代码!

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