0

我想在 "setting.py" 中获取所有已安装应用程序的绝对路径。

app_list = [ app for app in Myproject.settings.INSTALLED_APPS ]

我列出了应用程序,但我如何才能获得所有这些应用程序的绝对路径。

谢谢你。

4

2 回答 2

0

真的不可能做你想做的事。我的意思是你几乎可以到达那里,但没有真正的功能,特别是,Python 不区分类、方法和变量。它们都算作模块的属性。

首先,INSTALLED_APPS是一个字符串元组。因此,为了获得任何有用的信息,您需要将它们作为模块加载:

for app in settings.INSTALLED_APPS:
    module = __import__(app)

然后,一旦你有了实际的模块,你就可以调用dir它来获取它的属性列表:

for app in settings.INSTALLED_APPS:
    module = __import__(app)
    print dir(module)

而且,这就是你能做到的。它将输出模块中设置的所有内容,而不仅仅是类。从这里开始,除了类之外,我能想到的唯一办法就是假设遵循命名约定并查找以大写字母开头的项目。这并不完全科学,但这就是你所得到的。

于 2012-08-07T19:28:58.627 回答
0

今天我解决了我的问题。我写了这段代码,它只是工作。对于有限名称类,我找到“models.Model”固有的类名称。您可以更改它并享受它。此代码还可以在模块的深度 1 中查找文件。它可以改变。

app_list = [app for app in training.settings.INSTALLED_APPS if "task" in app]
for module in app_list:
    module1 = __import__(module)
    temp = module1.__path__
    files_path = [temp[0] + os.sep + files_name for files_name in os.listdir(temp[0]) if
                  os.path.splitext(files_name)[1] == ".py"]

    p = re.compile(r'class\s*\w*\s*\(models.Model\):')
    for file in files_path:
        infile = open(file)
        text = infile.read()
        all_class = p.findall(text)
        print [class_name[6:][:-15] for class_name in all_class]
于 2012-08-08T07:30:15.917 回答