我正在编写一个用于从科学仪器获取数据的python小程序,并且试图找出管理我的设备“驱动程序”的最佳方法。在python中延迟加载模块
每个驱动程序都是我的程序包中的一个单独的python模块。它们每个都实现一些标准接口,但大多数是一个庞大的命令列表(和函数映射),它们是每个设备和总线所特有的。从长远来看,(我正在为我的实验室小组编写这个文件,并计划支持几十个设备),我想避免一次加载所有这些设备。相反,在运行时,我想将模块列表读入字典/列表中,然后仅在实际需要时加载它们。
当用户想要使用新设备时,他选择要使用的驱动程序,并将该名称传递给驱动程序子系统,然后检查驱动程序子系统是否在已加载模块列表中,如果不是,它调用__import__
函数并加载驱动程序,然后使用驱动程序实例化设备对象,并将其交给用户使用。
我的问题是:以相对方式获取所有模块列表的最佳方式是什么?我的意思是,如果我知道驱动程序位于..drivers
中,是否有办法在该子包中获取整洁的模块列表?举例说明:通常我只需拨打from ..drivers import driver_name
即可导入模块,但由于我不能保证在的的软件包目录中,不能只有我们os
才能得到模块名称列表。在任何情况下,任何想法(甚至可能是一个更好的方式来完成我想要的 - 可加载的“驱动程序”),将不胜感激。
我该如何去让驾驶员注册自己?用小脚本实现它们以查找我的软件并注册它们自己?或更聪明的东西? – crasic 2010-10-30 10:30:54
感谢您的好建议,我实现了一个简单的文本文件来保存驱动程序名称和元数据,可能不是最好的长期解决方案(当人们可能想要导入外部驱动程序时),但是现在确实可以像魅力一样工作。 – crasic 2010-10-30 22:10:38