2016-04-07 98 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并将这些文件放在一个新的文件夹中。 –