Python 从动态生成的模块导入时运行代码
我曾经动态生成一个模块Python 从动态生成的模块导入时运行代码,python,Python,我曾经动态生成一个模块x,并在sys.modules中注册它。我希望在这个模块上调用导入时自动运行一段代码。例如,我想打印“您刚刚导入了模块x”。所以它的行为就像: >>> import x you just imported module x 如何获得这种行为?要扩展所选答案中给出的示例,您可以这样做 print "You just imported module {}".format(foo.Foo.__module__) 导入模块时,将执行任何“孤立”代码(不是在类或
x
,并在sys.modules
中注册它。我希望在这个模块上调用导入时自动运行一段代码。例如,我想打印“您刚刚导入了模块x”。所以它的行为就像:
>>> import x
you just imported module x
如何获得这种行为?要扩展所选答案中给出的示例,您可以这样做
print "You just imported module {}".format(foo.Foo.__module__)
导入模块时,将执行任何“孤立”代码(不是在类或函数中编写的代码,或者不是在
中编写的代码,如果
块中编写的代码)。为什么不将其放在模块本身中?i、 e就在类Foo:
之前,在示例中,是否每次导入模块时都会发生这种情况?如果是,,要做到这一点,您可能需要弄乱导入挂钩。Padraic不能提供所需的行为,因为打印代码是在调用exec
时执行的,而不是在导入模块时执行的。如果您这样做,然后在foo中运行示例exec foo\u code中的行。\uu dict\uu
,则只要调用,打印就会发生exec
这不会使打印在导入的模块中的import foo
上运行。我的理解是,这段代码将放在模块中进行导入。