setuptools / pkg_resources停用分发

时间:2014-04-21 21:31:49

标签: python setuptools egg pkg-resources

我一直在玩setuptools pkg_resources模块,通过入口点加载插件功能。似乎一旦加载了入口点,用于获得该入口点的特定分布现在是“活跃的”#34; (因此保存在pkg_resources.working_setsys.path和其他一些位置。

我的问题:是否有任何标准方法可以停用"停用"分发?我不太了解幕后发生的模块加载的大部分内部细节,但我已经将似乎的以下功能一起攻击了:

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

如果没有我错过的标准方法,上述功能是否会像我的有限测试所示?或者它是否缺少系统路径或pkg_resources的一些内部工作方式,这将导致奇怪的错误?

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

0 个答案:

没有答案