编写一个Python模块,可以判断它何时被Spyder的UMD(用户模块删除器)击中

时间:2013-11-29 18:44:35

标签: python import module reload spyder

Spyder的UMD对我来说通常很棒,但在编写一个我不想删除和重新加载的模块时,我会定期绊倒自己。我知道我可以通过Tools > Preferences > Console > Advanced settings > User Module Deleter控制UMD。但我也希望能够在模块本身的代码中将我编写的某些模块标记为非UMD友好。

在一个完美的世界里,我会写一些类似

的东西
assert_no_umd()

如果模块被UMD命中,会抛出异常。如果通过任何重新加载模块来触发代码,无论是通过UMD还是其他方式,都可以。

请注意,这与Method that gets called on module deletion in Python不同,因为该问题是关于清理数据库连接,只需要执行一次,因此可以使用atexit完成。

1 个答案:

答案 0 :(得分:1)

Spyder dev here )如果我理解正确,那将是我的assert_no_umd函数:

import os

def assert_no_umd():
    mod = __file__
    if os.environ.get("UMD_ENABLED", "").lower() == "true":
        namelist = os.environ.get("UMD_NAMELIST", None)
        if namelist is not None:
            namelist = namelist.split(',')
            if mod not in namelist:
                 raise ValueError('UMD active!!')