每次对脚本进行更改时,都需要在终端中重新启动python

时间:2010-07-30 18:59:31

标签: python

每次我对python脚本进行更改时,都必须重新加载python并重新导入模块。请告诉我如何修改我的脚本然后运行,而无需在终端重新启动python。

感谢。

5 个答案:

答案 0 :(得分:4)

根据您对工作流程的评论,我有一个建议:

  

首先,我在终端秒运行python3.1,我做“导入模块”然后,我从模块运行一个方法,每次都说“module.method(arg)”,我尝试调试代码,我必须做这整个序列,即使变化很小。这是非常低效的

不要启动交互式Python shell,而是让模块本身可执行。最简单的方法是在模块底部添加一个块,如下所示:

if __name__ == '__main__':
    method(arg) # matches what you run manually in the Python shell

然后,不是运行python3.1,而是导入模块,然后调用方法,你可以这样做:

python3.1 modulename.py

并且Python将运行if __name__ == '__main__'块中的任何代码。但是,如果模块由另一个Python模块导入,则不会运行该代码。有关这种常见Python习语的更多信息可以在in the Python tutorial找到。

这样做的好处是,当您对代码进行更改时,通常可以通过按向上箭头并按Enter键重新运行模块。没有必要重新加载。

答案 1 :(得分:2)

如果只是某个模块正在更改,您可以在脚本中调用reload(module)

答案 2 :(得分:1)

你的意思是你直接在交互式python中输入脚本,或者你是通过运行像python myscript.py之类的东西从终端执行你的.py文件的吗?

答案 3 :(得分:0)

您可以使用reload重新导入模块。我在使用交互模式调试代码时经常使用它。

但是,从更高的层面来看,我会犹豫是否在程序的生产版本中使用它。除非您对子模块的更改方式有非常严格的控制,否则重新加载的模块会以某种方式更改会破坏您的程序并不困难。除非您的程序确实需要100%的正常运行时间,否则在有某种版本更改时停止并再次启动它是有意义的。

答案 4 :(得分:0)

我在网上找到了绕道。魔术命令存在。它对我来说就像一个魅力。重新加载选项对我不起作用。从here和此链接的第3点得到。

基本上您只需要执行以下操作:保存后,您所做的更改会自动反映出来。

In [1]: %load_ext autoreload

In [2]: %autoreload 2

In [3]: Import MODULE

In [4]: my_class = Module.class()
        my_class.printham()
Out[4]: ham

In [5]: #make changes to printham and save
In [6]: my_class.printham() 
Out[6]: hamlet