【发布时间】:2018-01-30 23:04:41
【问题描述】:
我希望在 python 中构建一个简单的构建系统。受 gradle 启发,我的目标是让几个文件存储有关任务的信息(类似于 build.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 *。
【问题讨论】:
标签: python python-3.x import implicit