【问题标题】:Python Implicit ImportPython 隐式导入
【发布时间】: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


    【解决方案1】:

    虽然通常不推荐,但它可能适合您的用例,即创建某种特定领域的语言。

    只需在导入模块之前将您的命令设置为内置变量:

    __builtin__.ShellCommand = ShellCommand
    __builtin__.ShellCommand2 = ShellCommand2
    

    从现在开始,ShellCommandShellCommand2 在您正在运行的程序中随处可用。

    【讨论】:

    • 是的,我认为这应该满足我的需求。谢谢!
    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 2018-07-20
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2017-04-07
    • 2019-01-31
    相关资源
    最近更新 更多