我得到了一些关于这个问题的答案。根据PEP 328 [1],Guido已经宣布说“相对导入将使用前导点。单个前导点表示相对导入,从当前包开始。两个或更多前导点给出相对导入到当前包的父级,每个点表示一级”[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 是一个与Python编程语言相关的网站,其中涉及PEP-0328标准和Guido的决定。
[2]
https://mail.python.org/pipermail/python-dev/2004-March/043739.html 是一封与Python开发相关的邮件列表,日期为2004年3月。
[3]
https://github.com/timothycrosley/isort 是一个名为isort的Python包,用于自动排序Python导入语句。
[4]
https://github.com/timothycrosley/isort/wiki/Projects-Using-isort 是isort包的一个wiki页面,列出了使用isort的项目。