python – 通过sys.modules提供虚拟软件包

前端之家收集整理的这篇文章主要介绍了python – 通过sys.modules提供虚拟软件包前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
说我有一个包“mylibrary”.

我想使“mylibrary.config”可用于导入,无论是作为动态创建的模块,还是从完全不同的地方导入的模块,然后将基本上“安装”在“mylibrary”命名空间内.

即,我做:

@H_301_6@import sys,types sys.modules['mylibrary.config'] = types.ModuleType('config')

给定设置:

@H_301_6@>>> import mylibrary.config # -> works >>> from mylibrary import config <type 'exceptions.ImportError'>: cannot import name config

甚至陌生人:

@H_301_6@>>> import mylibrary.config as X <type 'exceptions.ImportError'>: cannot import name config

所以似乎使用直接导入工作,其他形式不行.是否有可能使这些工作呢?

解决方法

您需要将模块的猴子修补程序不仅限于sys.modules,还可以进入其父模块: @H_301_6@>>> import sys,types,xml >>> xml.config = sys.modules['xml.config'] = types.ModuleType('xml.config') >>> import xml.config >>> from xml import config >>> from xml import config as x >>> x <module 'xml.config' (built-in)>

猜你在找的Python相关文章