我正在尝试构建一个基础结构,该基础结构使用文本文件来动态设置应运行代码的环境。文本文件将包含要加载的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)
不确定我是否解释得很好。如果我没有,请告诉我,我可以澄清更多。
谢谢!