Relative Imports——python模块相对路径导入

在看<Flask Web Development>的时候,在引入blueprint之后看到了类似
from ...foo import bar
这样的代码段,这种导入包的方式前所未见,甚至让我产生了这是一个blueprint的封装过的导入方式的错觉,但是总觉得哪哪都不对劲。翻遍了整个书,没有看到对这种“新花样”的解释——甚至专门买来中文版,来看看我有没有什么漏掉的东西,结果一无所获。

然后便以Flask import 类似的词语Google还是没有什么结果,期间读到了一份很好的python网页教程,最终终于意识到python知识还很缺乏,这应该是某种导入包的“新”的黑魔法。

断断续续在一些blog上看到了关于相对路径导入的信息,在PEP8这个页面看到了推荐使用绝对路径,而相对路径是可接受的,理由是

Absolute imports are recommended, as they are usually more readable and tend to be better behaved
这理由我就简洁的不能信服了,虽然是python官方的说法。

晚上回来调DEV-CPP还是不乖,大概是这辈子遇到的最心塞的事了,就像喜欢一个妹子,不断满足她的下限,到现在已经到了再也不能下的下限了,她还不满意,此时我只想说,

你TMD赶紧听话,不然我哭给你看。。。


打开python页面搜索relative imports最终还是搜到了想要的内容

Guido's Decision

Guido has Pronounced [1] that relative imports will use leading dots. A single leading dot indicates a relative import,
starting with the current package. Two or more leading dots give a
relative import to the parent(s) of the current package, one level per
dot after the first. Here's a sample package layout:

 package/
     __init__.py
     subpackage1/
         __init__.py
         moduleX.py
         moduleY.py
     subpackage2/
         __init__.py
         moduleZ.py

moduleA.py Assuming that the current file is either moduleX.py or subpackage1/__init__.py , following are correct usages of the new
syntax:

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 Note that while that
last case is legal, it is certainly discouraged ("insane" was the word
Guido used).

Relative imports must always use from <> import ; import <> is always

  1. Of course, absolute imports can use from <> import by
  2. the leading dots. The reason import .foo is prohibited is

because after

import XXX.YYY.ZZZ then

XXX.YYY.ZZZ is usable in an expression. But

.moduleY is not usable in an expression.

很清楚了,一个点代表同级目录,多一个点往上一级,上到最高就等于整个PATH环境了。
而且,relative import 只支持 from <> import <> 这种结构。

Gudio's decision,很吊的样子,想起来了I write python的梗。

喜欢有一点点约束的最佳实践。

人生苦短,我用python,晚安。

添加新评论