[英]Is there a way to get all modules 'under' a specific module in the hierarchy?
有沒有一種方法可以直接在層次結構中的指定模型下列出所有python模塊?
我有一個慢慢增長的Django網絡應用程序,我根據這篇文章重新組織了它:
http://paltman.com/2008/01/29/breaking-apart-models-in-django/
但是,我試圖通過在模塊初始化文件(__ init __.py)中使用內省來改進他的技術,以便在下級作業中自動檢測Django模型類的所有實例。 我已經得到了這種功能,但它仍然需要在它上面的樹中的靜態模塊列表才能工作。
如果人們感興趣,這就是我的解決方案:
from django.db.models.base import ModelBase
from sys import modules
moduleList = ['TechTree', 'PilotAbilities']
__all__ = []
for moduleName in moduleList:
fullyQualifiedModuleName = '%s.%s' % (__name__, moduleName)
moduleObj = __import__(fullyQualifiedModuleName)
__all__ += [item for item in dir(moduleObj) if isinstance(getattr(moduleObj, item), ModelBase)]
好吧,你可以獲得os.path.dirname(parent.__file__)
,然后是glob.glob()
或os.walk()
並查找其他init .py文件。
這只是一次嘗試,但似乎有效。 我正在運行python 2.7.1和dir(somemodule)給了我所有相關的模塊。 使用openpyxl和os模塊進行測試。
def import_all(name):
__import__(name)
for i in dir(name):
try:
if type(i) == type(name):
import_all(name+'.'+i)
except:
pass
注意:這可能是非常不敏感和氣餒,但似乎有效。
注2:那是因為我不小心有'openpyxl'(我正在使用的測試)而不是list子模塊。 抱歉
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.