在python中合理化包结构

时间:2011-06-07 15:45:31

标签: python packaging

我正在开发一个具有以下结构的python库

/application
  /lib
  __init__.py
    /models
    __init__.py
    model1.py
    model2.py
    model3.py

在每个模型%.py文件中都有一个名为Model%的相应类。我喜欢将这些类保存在自己的文件中,但这意味着在我的应用程序中我需要从模型包中导入类,如此

from models.model1 import Model1
from models.model2 import Model2
from models.model3 import Model3

有没有办法做到这一点?

from models import Model1, Model2, Model3

感觉更直观,更像我正在做的事情。我有一个名为models的包,我希望它包含这些类,但我仍然希望每个类都有自己的文件,所以我只需添加一个文件即可添加新模型。

以前我把它放在我的/ application / lib / models / _ init _py文件中

from model1 import Model1
from model2 import Model2
from model3 import Model3

但我明白这是导入所有类,即使我只需要其中一个

3 个答案:

答案 0 :(得分:2)

您的最终解决方案是正确的。如果它导致严重的性能问题,你应该只担心加载太多的类,我非常怀疑。

答案 1 :(得分:1)

一种方法是在models目录中创建一个导入类的文件,然后从该文件导入。例如,您可以创建一个名为api.py的文件,其中包含

from model1 import Model1
from model2 import Model2
from model3 import Model3

然后你可以导入像这样的模型

from models.api import Model1, Model2, Model3

答案 2 :(得分:1)

为每个模块创建单独的包。将model1.py放入model1包中。在__init__.py包的model1文件中,输入

from model1 import Model1

然后,你将能够做到

from model1 import Model1

来自您的申请。