在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
或者不是他们中的任何一个?
答案 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