在重新加载“leafmost”子模块后,您需要重复导入。例如,给定:
$ mkdir myModule
$ touch myModule/__init__.py
$ cat >myModule/subModule.py
class MyClass(object): kind='first'
然后
>>> from myModule.subModule import MyClass
>>> MyClass.kind
'first'
在另一个终端中
$ cat >myModule/subModule.py
class MyClass(object): kind='second'
then...:
>>> import sys
>>> reload(sys.modules['myModule.subModule'])
<module 'myModule.subModule' from 'myModule/subModule.py'>
>>> from myModule.subModule import MyClass
>>> MyClass.kind
'second'
由于您没有子模块的引用,因此需要通过 sys.modules
进行操作,并且需要重复使用 from
。请注意保留 HTML 标签。
当然,如果您始终导入一个模块而不是模块内部的内容,那么生活将会更加简单 - 例如,Python 会话将如下所示(在重新加载之前更改子模块):
>>> from myModule import subModule as sm
>>> sm.MyClass.kind
'first'
>>> reload(sm)
<module 'myModule.subModule' from 'myModule/subModule.py'>
>>> sm.MyClass.kind
'second'
如果你养成使用限定名称(例如sm.MyClass
)而不是仅使用裸名字(MyClass
)的习惯,那么在许多方面你的生活将更加简单(更容易重新加载只是其中之一;-)。