重新加载模块时强制类重新加载

时间:2012-12-02 15:27:22

标签: python python-2.7 sage

在我的客户端代码中,我有:

import sys
import os
YAP_PATH = "/package/src/python"
if YAP_PATH not in sys.path:
    sys.path.append(YAP_PATH)

if 'yap' in sys.modules:  
    reload(yap)

import yap

print "working dir", os.getcwd()

(这是sage的开发环境,所以不要对hacky解决方案大吼大叫)

在我的模块中__init__.py

import Repository

__all__ = ['Repository']

print "yap loaded"

每次评估第一个代码块(在sage单元格中)时,都会打印“yap loaded”,因此每次都会重新加载模块。

我想在__init__.py中实现的目标是,每次重新加载模块时,同样重新加载类Repository

如何在不将代码放入sage单元格的情况下实现,而是放在__init__.py文件中?

1 个答案:

答案 0 :(得分:0)

让它工作,也许有人觉得它有用:

from Repository import Repository

__all__ = ['Repository']

def main(path):
    import sys
    _module_ = sys.modules[__name__]
    if hasattr(_module_, 'WORKING_PATH'):
        for m in __all__:
            if __name__ + "." + m in sys.modules:
                m = sys.modules[__name__ + "." + m]
                reload(m)
    else:
        _module_.WORKING_PATH = path

if __name__ == 'yap':
    print "yap loaded"

欢迎补丁