如果写的是工具类程序,比如说写的是三方包,发布给别人安装。那么在加入了from __future__ import absolute_import 之后还是可以在相对导入的时候使用from package.submodule import b 。那么这么做不是from __future__ import absolute_import 所说的特性没有了么。其实不然。因为我们编写的程序是需要安装在系统环境路径里面的,所以这种绝对导入的方式是可以相对导入的,这个时候搜索包名的时候是在系统环境路径里面搜索,但是因为你的包就在这些路径的某一个路径里面,所以可以搜得到from package.submodule import b 里面的b(模块,函数,变量,类)。这种编写工具包以绝对导入进行相对导入的方法还避免了from ..submodule import b 最好导入不超过两层的这一建议. 特别适合在开发大型工具的时候。比如著名的深度学习框架tensorflow就是用的这种特性.
下面是截取tensorflow.contrib.__init__.py里面的代码
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
# Add projects here, they will show up under tf.contrib.from tensorflow.contrib import bayesflow
from tensorflow.contrib import copy_graph
from tensorflow.contrib import crf
from tensorflow.contrib import cudnn_rnn
from tensorflow.contrib import distributions
from tensorflow.contrib import factorization
from tensorflow.contrib import framework
from tensorflow.contrib import graph_editor
from tensorflow.contrib import grid_rnn