在路径中使用带有两个以上点的模块是否可以?就像在这个例子中一样:
# 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:更改了示例。我知道,这将在实践中发挥作用。但这是一种常见的导入方法吗?
答案 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