我正在編寫一個用於從科學儀器獲取數據的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