此处absolute
和之间的区别与relative
我们谈论绝对和相对文件路径甚至URL的方式非常相似。
绝对的{import,path,URL}通常会通过指定每个部分来 告诉您如何获得所需的东西:
import os, sys
from datetime import datetime
from my_package.module import some_function
相对的{imports,paths,URLs}就是它们所说的:它们是 对于当前位置的。也就是说,如果目录结构更改或文件移动,它们可能会中断(因为它们不再意味着同一件事)。
from .module_in_same_dir import some_function
from ..module_in_parent_dir import other_function
因此,绝对导入是首选的共享代码。
有人在评论中要求我提供一个示例,说明from __future__ import absolute_import
如何与之关联以及如何使用它。在尝试阐述此示例时,我意识到我也无法完全解释其行为,因此我提出了一个新问题。此答案给出了一个代码示例,该示例显示正确工作的实现from __future__ import absolute_import
,在其中实际上解决了歧义。
公认的答案将更详细地说明其工作原理,包括讨论Python 2.5 changelog的措辞混乱。从本质上讲,此指令的范围(以及通过扩展在Python中绝对导入和相对导入之间的区别)非常狭窄。如果发现自己需要这些区别来使代码正常工作,则最好重命名本地模块。