在导入之前/期间注入变量

时间:2012-10-17 23:12:27

标签: python python-2.7 python-2.x

基本上,我想强制变量,让我称之为jim插入我作为全局加载的插件,插件加载,例如:

load_plugin('blah', variables={'jim':1}) #For instance

然后在blah.py内:

print jim #prints 1

有没有简单的方法可以做到这一点?如果它不在标准库中,那就没什么大不了的了。

2 个答案:

答案 0 :(得分:1)

不 - 在首先导入插件之前没有办法 - 所以,如果你的变量在模块体中使用,那你就不走运了。 / p>

如果变量在模块的函数或方法(而不是类体)中用作全局变量,则可以在导入模块后立即更改它:

import module
module.jim = 5
你可能知道的。 (而且我知道这不是你所要求的)。

因此,实现这一目标的唯一方法是解析模块的源代码,并在那里更改变量赋值,保存源代码并导入它。好的,有一些方法可以用内存中的源代码模拟导入,但是这种方法非常不合理,我们不应该详细说明。

如果您可以通过这种方式控制模块的源代码,我的建议是使用配置文件,模块将从中选择变量名称。

然后生成配置文件,执行导入(注意它尚未导入到sys.modules中)并且完成了。

答案 1 :(得分:-1)

您可以使用__import__功能。它允许你覆盖全局变量。
例如:

__import__('blah', dict(jim=1, **globals()))