cra*_*sic 5 python module packages
我正在编写一个用于从科学仪器获取数据的python applet,我正试图找出管理设备"驱动程序"的最佳方法.
每个驱动程序都由程序包中的一个单独的python模块表示.它们每个都实现了一些标准接口,但主要是它是一个巨大的命令列表(和函数映射),它们特定于每个设备和总线.从长远来看,(我正在为我的实验室小组写这篇文章并计划支持几十台设备)我想避免立即加载所有这些设备.相反,在运行时,我想将模块列表读入字典/列表,然后仅在实际需要时才加载它们.
当用户想要使用新设备时,他选择要使用的驱动程序,并将名称传递给驱动子系统,然后驱动子系统检查该驱动程序是否在加载模块列表中,如果不是,则调用__import__函数和加载驱动程序然后使用驱动程序实例化设备对象并将其交还给用户使用.
我的问题是:以相对方式获取所有模块列表的最佳方法是什么?我的意思是,如果我知道驱动程序所在的位置,..drivers是否有办法在该子潜艇中获得整齐的模块列表?为了说明:通常我只是调用from ..drivers import driver_name导入模块,但由于我不能保证在包目录中,不能只是我们os获取模块名称列表.
在任何情况下,任何想法(甚至可能是一个更好的方式来实现我想要的 - 可加载的"驱动程序")将不胜感激.
如果驱动程序包的位置已知,则可以使用驱动程序文件夹的绝对路径。
我认为更可靠的方法是为您的程序提供所有已知驱动程序的列表,也许还有一些元数据,以便用户可以更轻松地选择它们。您可以让司机自行注册,或者如果您知道可能的位置,也可以自行注册。让驱动程序自行注册的优点之一是,驱动程序包目录中可能有除驱动程序之外的 python 文件。
编辑
对于“注册自身”的驱动程序,您可以执行以下操作:
if __name__ == "__main__":
import mamapackage
mamapackage.register("thisdriver",
os.path.abspath(__file__),
"A description of this driver")
Run Code Online (Sandbox Code Playgroud)
然后在您自己的包中,提供一个“注册”函数,用于更新驱动程序列表及其位置和描述(对于初学者来说,应该使用一个简单的文本文件)。
| 归档时间: |
|
| 查看次数: |
904 次 |
| 最近记录: |