【发布时间】:2010-07-30 18:59:31
【问题描述】:
每次我对 python 脚本进行更改时,我都必须重新加载 python 并重新导入模块。请告知我如何修改我的脚本并运行,而无需在终端中重新启动 python。
谢谢。
【问题讨论】:
-
是的!至少python有一个重新加载。 PHP 只是因为“无法重新声明函数”等等而吓坏了。
标签: python
每次我对 python 脚本进行更改时,我都必须重新加载 python 并重新导入模块。请告知我如何修改我的脚本并运行,而无需在终端中重新启动 python。
谢谢。
【问题讨论】:
标签: python
根据您描述工作流程的评论,我有一个建议:
首先,我在终端中运行 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。
这样做的好处是,当您对代码进行更改时,通常只需按向上箭头并回车即可重新运行模块。无需繁琐的重新加载。
【讨论】:
如果只是某个模块发生了变化,您可以在脚本中调用reload(module)。
【讨论】:
您的意思是直接在交互式 python 中输入脚本,还是通过运行 python myscript.py 之类的东西从终端执行 .py 文件?
【讨论】:
python3.1 myscript.py 放在与您的脚本相同的文件夹中,它将运行。这样您就不必每次都输入命令。你在运行什么操作系统,windows?
我在网上找到了一个旁路。存在魔术命令。它对我来说就像一个魅力。重新加载选项对我不起作用。从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
【讨论】:
您可以使用reload 重新导入模块。我在使用交互模式调试代码时经常使用它。
但是,从更高的层次来看,我会犹豫在程序的生产版本中使用它。除非您对子模块的更改方式有非常严格的控制,否则重新加载的模块以某种方式更改会破坏您的程序并不难。除非您的程序确实需要 100% 的正常运行时间,否则在发生某种版本更改时停止它并重新启动它是有意义的。
【讨论】:
imp,因此您必须先移至 import imp,然后再移至 imp.reload(mod)