加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:19:38 所属栏目:Python 来源:网络整理
导读:说我有一个包“mylibrary”. 我想使“mylibrary.config”可用于导入,无论是作为动态创建的模块,还是从完全不同的地方导入的模块,然后将基本上“安装”在“mylibrary”命名空间内. 即,我做: import sys,typessys.modules['mylibrary.config'] = types.Module
说我有一个包“mylibrary”.

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

即,我做:

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

给定设置:

>>> import mylibrary.config    # -> works

>>> from mylibrary import config
<type 'exceptions.ImportError'>: cannot import name config

甚至陌生人:

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

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

解决方法

您需要将模块的猴子修补程序不仅限于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
<module 'xml.config' (built-in)>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读