Python相对导入有两个以上的点

时间:2015-09-04 10:33:47

标签: python coding-style python-3.4 python-import

在路径中使用带有两个以上点的模块是否可以?就像在这个例子中一样:

# Project structure:
# sound
#     __init__.py
#     codecs
#         __init__.py
#     echo
#         __init__.py
#         nix
#             __init__.py
#             way1.py
#             way2.py

# way2.py source code
from .way1 import echo_way1
from ...codecs import cool_codec

# Do something with echo_way1 and cool_codec.

UPD:更改了示例。我知道,这将在实践中发挥作用。但这是一种常见的导入方法吗?

2 个答案:

答案 0 :(得分:2)

来自PEP8

  

建议使用绝对导入,因为如果导入系统配置不正确(例如,包中的目录最终在sys上),它们通常更具可读性,并且往往表现更好(或至少提供更好的错误消息)。路径):

import mypkg.sibling
from mypkg import sibling
from mypkg.sibling import example
  

但是,显式相对导入是绝对导入的可接受替代方法,尤其是在处理复杂的包布局时,使用绝对导入会不必要地冗长:

from . import sibling
from .sibling import example
  

标准库代码应避免使用复杂的包布局,并始终使用绝对导入。

答案 1 :(得分:1)

更新2020年11月24日

如果您想更深入地了解python的相对导入,我强烈建议您使用answer


可以使用在路径中引用两个以上点的模块吗?

是的。您可以在相对导入路径中使用多个点,但这仅在使用from xxx import yyy语法而不是import xxx语法时才可行。此外,单点,两个点和三个点分别表示当前目录,父目录和祖父母目录,等等。

我知道,这将在实践中起作用。但这是常见的导入方法吗?

这取决于。如果您的项目具有复杂的目录结构,则使用绝对导入将“令人作呕”。例如,

from sub1.sub2.sub3.sub4.sub5 import yourmethod

。在这种情况下,使用相对导入将使您的代码干净整洁。也许像

from ...sub5 import yourmethod