python系统动态加载变量和模块

时间:2017-02-26 01:17:05

标签: python python-2.7 dynamic module

我正在尝试构建一个基础结构,该基础结构使用文本文件来动态设置应运行代码的环境。文本文件将包含要加载的python模块的路径和我的代码的其他部分将需要的变量。因此,我试图使用一种机制来加载模块和变量(而不仅仅是模块的virtualenv和变量的另一种方案)

我的代码看起来像:

my_script_which_uses_env.py:

import envcontrol_module
import some_other_module_whose_path_is_unknown_at_run_time

def main():
     my_envcontrol = envcontrol_module.EnvControlClass()
     my_variable = my_envcontrol.get_value("SOME_VARIABLE")

那些使用我的基础设施的人需要“导入envcontrol_module”作为他们代码中的第一行。在导入完成之后,syspath已经被修改为包含要加载的模块的路径,即当导入envcontrol_module返回时,sys路径具有some_other_module_whose_path_is_unknown_at_run_time的路径。

在高层,我认为需要以下内容: 1.需要“import envcontrol_module”来读取我的配置文本文件。这将创建一个带有变量名称和值的字典。在这里我可以修改sys.path 2.以某种方式保持这个dict,以便在创建EnvControlClass的实例时,该类能够访问dict

envcontrol_module.py

def main():
    config_dict = read_config_file()
    modify_sys_path(config_dict)

class EnvControl():
    self.config_dict = config_dict

我如何以python友好的方式完成上述操作: 1. config dict不是envcontrol_module的全局 2.保持对程序员透明的必要性,他们只需先“导入envcontrol_module”然后再进行后续导入

我知道我可以执行以下操作,但是程序员会在他们的main()而不是文件顶部进行导入,这将是不同的/不是很好/不是python-esque:

my_script_which_uses_env.py:

import envcontrol_module

def main():
    my_envcontrol = envcontrol_module.EnvControlClass()
    import some_other_module_whose_path_is_unknown_at_run_time
    my_variable = my_envcontrol.get_value("SOME_VARIABLE")

envcontrol_module.py

class EnvControl():
    def __init__(self):
    self.config_dict = read_config_file()
    modify_sys_path(config_dict)

不确定我是否解释得很好。如果我没有,请告诉我,我可以澄清更多。

谢谢!

0 个答案:

没有答案