relative import and absolute import

理解relative import 和 absolute import 两个概念在使用python的package的时候非常重要。

package是module的集合,为了使项目更加有序,人们把协同实现某个功能多个module放在一个文件夹下,然后在这个文件夹下添加一个__init__.py文件,这样这个文件夹就是python的一个package了。下图中,pkg文件夹就是python的一个package了。

由于package下的module联系紧密,其中某些module需要多次使用其他module来完成某个功能,这时候就需要import其他的module。在package下import其他module有两种方式,一种是absolute import 还有一种是relative import。下面结合一个具体的文件树来说明两种方法的不同。

 如果我们想在spam.py中使用package1中的string.py, 典型错误的用法如下。

# module string.py
print('string'*8)

# module spam.py
import string
print(string)

在project下执行python

我们发现spam import 并不是package1中的string。这是因为python3中import module_name 属于absolute import, 搜索的是sys.path, 一般情况下,package1不在sys.path中。所以,python3 在自带lib中找到了string.py import 进来。

如果要使用package1中的string module, 我们采用relative import,即把 import string 改为 from . import string。这样可以使得python在当前package目录下搜索string module。再次运行的结果显示我们正确地import了string module.

猜你喜欢

转载自www.cnblogs.com/IamHC/p/12305202.html