Python setuptools/pkg_资源停用分发

Python setuptools/pkg_资源停用分发,python,setuptools,egg,pkg-resources,Python,Setuptools,Egg,Pkg Resources,我一直在使用setuptools pkg_资源模块通过入口点加载插件函数。似乎一旦加载了入口点,用于获取该入口点的特定发行版现在“处于活动状态”(因此保存在pkg\u resources.working\u set、sys.path和一些其他位置) 我的问题:是否有“停用”发行版的标准方法?我不太了解在幕后进行的模块加载的内部细节,但我已经将以下功能整合在一起,似乎可以正常工作: 如果没有我错过的标准方式,上述功能是否会像我有限的测试所示那样工作?或者,它是否缺少一些系统路径或pkg_资源的内部

我一直在使用setuptools pkg_资源模块通过入口点加载插件函数。似乎一旦加载了入口点,用于获取该入口点的特定发行版现在“处于活动状态”(因此保存在
pkg\u resources.working\u set
sys.path
和一些其他位置)

我的问题:是否有“停用”发行版的标准方法?我不太了解在幕后进行的模块加载的内部细节,但我已经将以下功能整合在一起,似乎可以正常工作:

如果没有我错过的标准方式,上述功能是否会像我有限的测试所示那样工作?或者,它是否缺少一些系统路径或pkg_资源的内部工作,这将导致今后出现奇怪的bug

背景 我试图使用入口点和鸡蛋来允许用户自行决定动态加载不同版本的模块。只有当您希望允许用户在不重新启动主脚本的情况下切换版本时,停用才会成为问题,因为加载第一个版本后,您只能使用该版本

def deactivate(dist):
    from pkg_resources import working_set
    from sys import path, modules, path_importer_cache
    distpath = working_set.by_key.pop(dist).location
    working_set.entry_keys.pop(distpath)
    working_set.entries.remove(distpath)
    path.remove(distpath)
    for name, mod in modules.items():
        try:
            if mod.__file__.startswith(distpath):
                modules.pop(name)
        except:
            pass