您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何从Python中的代码对象生成模块对象

如何从Python中的代码对象生成模块对象

正如评论已经表明的那样,在当今的Python中,实例化没有内置名称的类型的首选方法调用通过标准库中的类型模块获得的类型

>>> import types
>>> m = types.ModuleType('m', 'The m module')

请注意,这并 自动插入新的模块sys.modules

>>> import sys
>>> sys.modules['m']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'm'

这是您必须手动执行的任务:

>>> sys.modules['m'] = m
>>> sys.modules['m']
<module 'm' (built-in)>

这很重要,因为模块的代码对象通常会 添加到模块 执行sys.modules-例如,完全正确地引用此类代码,如果您忘记了此步骤sys.modules[__name__],将失败(KeyError)。完成 此步骤并进行m.__file__修改后,

>>> code = compile("a=23", "m.py", "exec")
>>> exec code in m.__dict__
>>> m.a
23

exec当然,如果您使用的是Python 3,则为Python 3的等效函数;-)当然是正确的(当然,通常您会通过精巧的方法而不是编译字符串来获取代码对象,但是这对您的问题并不重要;-)。

在旧版本的Python中,您一开始会使用new模块而不是types模块来创建新的模块对象,但new自Python 2.6起已弃用该模块,并在Python 3中将其删除

python 2022/1/1 18:36:31 有235人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶