簡體   English   中英

每次對腳本進行更改時,都需要在終端中重新啟動python

[英]Need to restart python in Terminal every time a change is made to script

每次我對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習慣用法的更多信息可以在Python教程中找到。

這樣做的好處是,當您對代碼進行更改時,通常可以通過按向上箭頭並按Enter鍵重新運行模塊。 不需要雜亂的重裝。

如果它只是一些正在改變的模塊,你可以在腳本中調用reload(module)

你的意思是你直接在交互式python中輸入腳本,或者你是通過運行python myscript.py類的東西從終端執行.py文件的?

您可以使用reload來重新導入模塊。 我在使用交互模式調試代碼時經常使用它。

但是,從更高的層面來看,我會猶豫是否在程序的生產版本中使用它。 除非您對子模塊的更改方式有非常嚴格的控制,否則重新加載的模塊會以某種方式更改會破壞您的程序並不困難。 除非您的程序確實需要100%的正常運行時間,否則在有某種版本更改時停止並再次啟動它是有意義的。

我在網上找到了繞道。 魔術命令存在。 它對我來說就像一個魅力。 重新加載選項對我不起作用。 這里得到它和這個鏈接的第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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM