当前位置:  开发笔记 > 编程语言 > 正文

通过sys.modules提供虚拟包

如何解决《通过sys.modules提供虚拟包》经验,为你挑选了1个好方法。

说我有一个包"mylibrary".

我想让"mylibrary.config"可用于导入,可以是动态创建的模块,也可以是从完全不同的地方导入的模块,然后基本上"挂载"在"mylibrary"命名空间内.

即,我做:

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

给定设置:

>>> import mylibrary.config    # -> works

>>> from mylibrary import config
: cannot import name config

更奇怪的是:

>>> import mylibrary.config as X
: cannot import name config

因此,似乎使用直接导入工作,其他形式则不然.是否有可能使这些工作?



1> Martin v. Lö..:

您需要将模块不仅修补到sys.modules,还修复到其父模块:

>>> 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

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有