Python 从动态文件名导入

2024-04-11

我处于以下情况:我有一个 python 脚本main.py,根据配置文件运行一些操作。配置文件本身就是一个 python 脚本/类。我希望能够从命令行传递不同的配置文件作为参数并将其导入主脚本中。

python 中是否可以动态加载类?如果是这样,我该如何完成这项任务?

请参阅以下最小示例以进行说明。

这是我的脚本main.py:

import argparse

def get_arguments():
    parser = argparse.ArgumentParser(description="foo")
    parser.add_argument("--configfile", required=True)
    return parser.parse_args()

def main():
    args = get_arguments()

    from args.configfile import MyConfig # <-- how is that possible?

    if MyConfig.SETTING1:
        do_something()

if __name__ == '__main__':
    main()

这是一个例子config.py:

class MyConfig(BaseConfig):
    SETTING1 = True
    SETTING2 = 1 

这是另一个例子config-special.py:

class MyConfig(BaseConfig):
    SETTING1 = False
    SETTING2 = 42 

我这样称呼它:

$ python3 main.py --configfile config.py
$ python3 main.py --configfile config-special.py

Use import_module动态导入模块,详细解释见代码。

仍然使用你的下一个命令来调用它们。

$ python3 main.py --configfile config.py
$ python3 main.py --configfile config-special.py

main.py

import argparse
# import sys
from importlib import import_module

def get_arguments():
    parser = argparse.ArgumentParser(description="foo")
    parser.add_argument("--configfile", required=True)
    return parser.parse_args()

def main():
    args = get_arguments()
    module_name = args.configfile[:-3] # here, the result is the file name, e.g. config or config-special

    # Not use __import__, use import_module instead according to @bruno desthuilliers's suggestion
    # __import__(module_name) # here, dynamic load the config module
    # MyConfig = sys.modules[module_name].MyConfig # here, get the MyConfig class
    MyConfig = import_module(module_name).MyConfig

    # from args.configfile import MyConfig # <-- how is that possible?

    if MyConfig.SETTING1:
        #do_something()
        print("do_something")

if __name__ == '__main__':
    main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 从动态文件名导入 的相关文章

随机推荐

  • JSONObject 不是字符串错误

    query count 1 created 2015 07 28T05 19 01Z lang en US results quote symbol GITANJALI NS Ask null AverageDailyVolume null
  • Javascript-从 JSON 对象中检索特定键值

    我想从 Json 对象中仅检索某些键值对 在以唯一 id 作为键的用户列表下方 var user 987654321 displayName Wayne profilepic https test1 com fullName Bruce W
  • 如果启用 SSL 代理,为什么 https 请求在 Charles 代理上失败

    我已经在我的 Mac 上安装并配置了 Charles 代理 我可以浏览所有 http 站点并查看 Charles 中的请求 但无法浏览无法连接的 https 站点 Safari 无法打开该页面 因为它无法建立安全 联系 我已经安装了 Cha
  • 使用最短路径计算连接概率

    我想知道 igraph 中是否有一个函数可以计算加权图中顶点之间的连接概率 其中边的权重是相邻顶点的连接概率 我基于这样的邻接矩阵构建了一个图 其中相邻连接概率形成权重 这是针对河流网络 因此图的每个节点仅连接到单个下游节点 我本来希望使用
  • 检查 iOS 互联网连接是否缓慢

    我添加了苹果提供的可达性类 它可以很好地检查互联网连接 如果互联网关闭 我的应用程序会显示消息 但如果互联网很慢 它就会继续加载 我正在使用 wi fi 当 iPhone 通知栏中只有一个可见的点表示 wifi 信号时 我遇到了这个问题 所
  • 我如何知道主屏幕是否已对焦?

    我有一个在 Android 上运行的服务 我需要知道是否有任何应用程序处于焦点状态 或者 桌面 主屏幕 是否处于焦点状态 我不知道这个词是否适合指手机的主屏幕 我如何知道这是焦点还是其他应用程序 在服务内部 我有以下代码来获取正在运行的任务
  • 我可以在播种时将我的所有产品更新给特定用户吗?

    如何更新所有产品以为其分配特定用户 admin User create name gt Admin password gt password walmart Store create name gt Walmart address gt S
  • 用于存储过程的 SQL 表和列解析器

    是否有一个应用程序可以解析一组给定的存储过程 SQL Server 2000 并获取其中使用的所有表和关联列 存储过程可以包含来自不同数据库的表 输出应该是这样的 表AU 列A 列B 列S 表 列 列 列 我用Database Editio
  • 从给定的 WSDL 创建 PHP SOAP 服务

    这可能会被认为是一个非常懒惰的问题 但我向你保证事实并非如此 我已经尝试了好几天让它工作但我就是做不到 我已经获得了一个 WSDL 文件 我需要用 PHP 为其创建一个 SOAP 服务 谁能告诉我正确的做法是什么 服务的接收者期望在调用 g
  • socket.io 和express 4 个会话

    我想在我的 socket io 应用程序中访问 express 4 会话 我对 Node 不太熟悉 在实现此功能时遇到了一些麻烦 我找到了一个允许访问express 4会话的npm模块 https www npmjs org package
  • 使用 gldrawpixels 进行 opengl 旋转

    我的团队目前仅限于在 opengl 1 4 平台上绘制图像 这意味着我们无法使用任何漂亮的纹理映射来绘制图像 是的 我们仅限于使用 intel 集成图形平台 这非常烦人 到目前为止 我们能够绘制 缩放和翻转图像 但是制作图形的人声称在使用
  • React 应用程序之间可以通信吗?

    我的项目是三个 React 应用程序的旅程 我想使用从应用程序 1 到应用程序 2 以及从应用程序 2 到应用程序 3 的一些数据 如果要传递的数据很小 我会将其传递到第二个应用程序的 url 中的查询参数中 如果数据很大或私密 我计划将其
  • PHPMailer ,通过电子邮件内容与不同的接收者保持 1 个 SMTP 连接

    phpMailer New PHPMailer phpMailer gt isSMTP phpMailer gt SMTPKeepAlive true for Send your emails right away phpMailer gt
  • 如何使用 Moq 模拟 SoapException 来对错误处理进行单元测试

    我继承了一个小型控制台应用程序 用于调用 SOAP Web 服务 这是一个以各种方式记录异常的嵌套 try catch 的悲剧性混乱 我想围绕抛出 SoapException 时它的行为进行一些测试覆盖 问题 当我无法模拟接口并且无法将属性
  • 如何通过Hibernate获取数据库版本?

    有没有办法通过Hibernate 3 2 API获取底层数据库版本的一些信息 我未能在这里和 javadoc 中找到相关位 获取数据库引擎的版本是特定于实现的 这意味着没有获取版本的共享方法 因此 Hibernate 无法真正提供 API
  • 淡入时的 ScrollTop 引导框模式

    我使用 bootbox js 制作模态 但是当模态淡入并且内容太长时 滚动条会到达底部按钮的级别 当模态出现时 我需要滚动条保持在顶部 我已经解决了添加 off shown bs modal 在 bootbox dialog 之后 boot
  • 使用 webview 显示来自 sdcard 的图像不起作用

    我已经在 sdcard 根目录中下载了 map750 png 文件 但是当我尝试在带有一些文本的 Web 视图中显示它时 只显示文本 你能帮我找出代码中的错误吗 谢谢 setContentView R layout webview mWeb
  • AVPlayer audioSessionGotInterrupted 从后台唤醒时的通知

    我使用 AVAudioPlayer 来播放音频 我启用了背景音频并且音频会话配置正确 我实施了audioSessionGotInterrupted音频会话中断时收到通知的方法 这是我当前的代码 objc private func audio
  • 是否可以从 qt QColumnView 中删除预览小部件?

    我需要在 qt 视图中显示一组分层数据 我正在使用 QColumnView 来显示模型 但是 有一个功能可以使视图中的最后一列被降级为预览小部件 有可能隐藏这一点吗 例如 类似于 view setPreviewWidget NULL 尽管这
  • Python 从动态文件名导入

    我处于以下情况 我有一个 python 脚本main py 根据配置文件运行一些操作 配置文件本身就是一个 python 脚本 类 我希望能够从命令行传递不同的配置文件作为参数并将其导入主脚本中 python 中是否可以动态加载类 如果是这