簡體   English   中英

有沒有辦法讓所有模塊都在層次結構中的特定模塊下?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM