2014-12-02 119 views
1

對於我的碩士論文,我試圖利用Python作爲腳本語言的本質,以便允許運行時更改源代碼。源代碼本身使用特殊的用戶界面建模並在保存時生成。開始時,生成的代碼被髮送到引擎並導入。此過程可正常工作,直到源代碼更改而不在兩次運行之間重新啓動引擎(但重新啓動不可選)時爲止。Python 2.7運行時代碼更改

問題是即使文件已被更改,引擎仍然保留對舊源代碼的引用。

我花了相當一段時間尋找解決方案,發現作爲一個選項重新加載()ref)。不幸的是,這不起作用。下面是相關部分的當前版本(被執行,則每次接收到的源代碼更改):

package = __import__("tmp", fromlist=["tmp"]) 
reload(package) # this seems to have no effect 
clsmembers = inspect.getmembers(package, lambda member: inspect.isclass(member) and member.__module__ == package.__name__) 
beclass = clsmembers[0][1] 
be = beclass() 

我使用Python 2.7的工作(我要,我知道以後的Python版本提供此功能的更好的支持)。它不一定是reload(),我只是需要任何方式來重新導入代碼的變化。

任何幫助表示讚賞! :)

回答

2

我終於自己解決了這個問題。儘管我已經多次閱讀過無法刪除導入的模塊,但下面的解決方案似乎非常簡單並且顯而易見。

del(sys.modules["tmp"]) 

這可以確保我有一個乾淨的復位我的下一個執行,可以導入源代碼文件,就好像是我第一次:

執行的代碼後,我用去掉進口參考做到這一點。