Python隐式Imp

2024-04-23 15:10:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望用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 *。在


Tags: 文件方法fromimport命令echo动态am
1条回答
网友
1楼 · 发布于 2024-04-23 15:10:49

虽然通常不推荐,但对于您的用例,也可以创建某种特定于域的语言。

在导入模块之前,只需将命令内置到变量中:

__builtin__.ShellCommand = ShellCommand
__builtin__.ShellCommand2 = ShellCommand2

从现在开始,^{cd1>}和^{cd2>}在运行的程序中随处可见。

相关问题 更多 >