0
我正在嘗試爲Python 3(toga)的UI庫編寫靜態文檔生成器。如何檢查模塊的屬性而不導入它
在項目中有子目錄:
iOS
setup.py
toga_iOS
__init__.py
app.py
mac
setup.py
toga_mac
__init__.py
app.py
我想通過目錄遍歷並獲得toga_x
模塊中的__all__
屬性的值。我遇到的問題是每個模塊都被設計成安裝在該平臺上,例如, Windows的一個需要一個Python包,在Windows,Mac的安裝在Mac等
如果我使用導入庫或__import__
它失敗,因爲在每一個__init__.py
文件將導入特定於平臺的軟件包,例如
PLATFORM_LIST = {
'android': 'Android',
'cocoa': 'Mac OS cocoa',
'gtk': 'GTK +'
}
for module, label in PLATFORM_LIST.items():
print(module)
sys.path.append(os.path.join('../src',
module))
module = importlib.import_module('toga_'+module)
sys.modules[module] = module
_all = getattr(module, '__all__')
因「ImportError:No module named'android'」失敗。
有很多選項,ast,pylint,compile,inspectlib。這將是獲得__all__
的價值而不必安裝所有相關模塊的最佳方法?
以及如果'__all__'是動態創建的呢?(不一定它會在不同的平臺上有所不同,但可能來自多個單獨的賦值語句) –
它在每個包中都被靜態聲明,作爲記錄它支持哪些API的一種方式。 –