2016-04-07 141 views
0

我有從另一文件導入類作爲這樣的主文件:Python模塊更新

from pybrain.rl.environments.HoldemTask import HoldemTask. 

當我改變HoldemTask.py中,更改不會反映在主文件中。我發現的唯一解決方法是運行Pybrain的

python setup.py install 

我可以重新加載模塊或其他東西嗎?重新加載()似乎不起作用。

回答

1

第一關:python setup.py install通常使得在安裝該代碼的副本,因此,如果你發現你需要運行修改生效之前,有機會,發展你應該調整你的PYTHONPATHsys.path所以您的相關導入直接來自源樹,而不是來自Python站點包庫。您可以快速檢查哪些文件,你的代碼是通過把這個主文件的頂部導入,當你運行它:

from pybrain.rl.environments import HoldemTask # module object, not class 
print(HoldemTask.__file__) 

其次,在總體上遠不如修改代碼何時重啓Python進程確保它們生效。如果您確實需要更改才能在沒有重新啓動的情況下顯示,請繼續閱讀。

在Python中重新加載模塊只會影響將來的導入。要使重新加載在進程中工作,必須在重新加載後替換導入的類對象。例如,在「主文件」執行你列出的進口的背景下(類方法或函數內部是罰款):

# we need a module object to reload(), not the class inside it 
from import pybrain.rl.environments import HoldemTask as HoldemTask_module 
reload(HoldemTask_module) 
# we then need to replace the old class object with the reloaded one 
# in the main file's module-wide (aka "global") namespace 
global HoldemTask 
HoldemTask = HoldemTask_module.HoldemTask 

這裏最後一個需要注意的是,任何現有的HoldemTask對象將繼續使用舊代碼,因爲它們自己嵌入了對重新加載前類對象的引用。進行重新加載的唯一方法是完成代碼是專門編寫的,以便丟棄基於原始模塊創建的任何實例。

+0

謝謝!我只是改變了我的PYTHONPATH並將這些文件放在一個新的文件夾中。 –