排序亲戚进口的顺序?

时间:2018-01-02 14:10:38

标签: python python-import pep

在python中对相对导入进行排序的权利或PEP方式是什么?

core/
    __init__.py
    forms.py
    models.py
    tests/
        __init__.py
        form_tests/
             __init__.py
            test_xpto.py
        login.py

如果我正在使用test_xpto.py并想要导入其他文件,那么正确的方法是什么:

from core.models import Person
from ..login import DefaultLogin
from ...forms import CustomerForm

from ...forms import CustomerForm
from ..login import DefaultLogin
from core.models import Person

或者不是他们中的任何一个?

1 个答案:

答案 0 :(得分:0)

我得到了一些问题的答案。根据PEP 328 [1],Guido宣称“相对进口将使用前导点。单个前导点表示相对导入,从当前包开始。两个或多个前导点给父母相对导入( s)当前包,在第一个“[2]之后每个点一个级别。这是一个示例包布局:

from .moduleY import spam
from .moduleY import spam as ham
from . import moduleY
from ..subpackage1 import moduleY
from ..subpackage2.moduleZ import eggs
from ..moduleA import foo
from ...package import bar
from ...sys import path

另一个好主意是isort(一个Python实用程序/库按字母顺序对输入进行排序,并自动分成几个部分)[3],对导入进行排序后遵循另一种模式,Django等大型项目使用这种模式[4] ]:

from __future__ import absolute_import

import os
import sys

from my_lib import Object, Object2, Object3
from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8, lib9,
                         lib10, lib11, lib12, lib13, lib14, lib15)

from . import moduleY
from ...sys import path
from ..subpackage1 import moduleY
from ..subpackage2.moduleZ import eggs
from .moduleY import spam as ham 

[1] https://www.python.org/dev/peps/pep-0328/#guido-s-decision

[2] https://mail.python.org/pipermail/python-dev/2004-March/043739.html

[3] https://github.com/timothycrosley/isort

[4] https://github.com/timothycrosley/isort/wiki/Projects-Using-isort