我希望用python构建一个简单的构建系统。受gradle的启发,我的目标是让几个文件存储有关任务的信息(类似于生成.gradle文件)。例如,单个生成文件可能如下所示:
from commands import *
tasks = {
"Project1": {
"dependencies": [
"Project2"
],
"commands": [
ShellCommand("echo I am building Project1")
]
},
"Project2": {
"commands": [
ShellCommand("echo I am building Project2")
]
}
}
我可以通过importlib.import_module(module_name)
动态加载一组类似格式的文件,以创建所有任务的主列表,并在此基础上进行处理。在
我遇到的困难是找到一种干净的方法来支持这些任务文件中的命令(例如ShellCommand
)。我可以为所有命令编写包装器,将它们放在一个commands.py
文件中,然后导入它。但是,import语句很混乱,任务编写器不需要它。在
显而易见的(我也希望是天真的)解决方案是读取每个任务文件,并在不存在的情况下预先准备导入。有没有更干净的方法?在
TL;DR:我想在动态加载文件时用隐式导入替换显式from commands import *
。在
虽然通常不推荐,但对于您的用例,也可以创建某种特定于域的语言。
在导入模块之前,只需将命令内置到变量中:
从现在开始,^{cd1>}和^{cd2>}在运行的程序中随处可见。
相关问题 更多 >
编程相关推荐