Python中的相对导入语法

Python中支持相对导入语法,即可以相对于某一个package进行导入,具体语法如下:

# 导入"./dir2/spam.py", .表示当前目录
from .dir2 import spam

# 导入"./../dir3/spam.py", .表示当前目录, ..表示上一级目录
from ..dir3 import spam   

 

要使用相对导入语法,必须满足以下3个条件:

1 该语法只能在package中使用(即使用该语法的文件位于可以位于一个普通的package中<包含__init__.py>,也可以位于一个namespace package中),否则导入失败;

2 只有from有相对导入语法,import没有

3 要使用相对导入语法,目录前面必须有.或者..,否则,对于Python 2.X和Python 3.X来说行为还有少许差别,下面提到。

 

绝对导入与相对导入

所谓绝对导入,就是只在sys.path的路径进行搜寻导入的package或者module文件;

所谓相对导入,就是只在当前package下进行搜寻导入的package或者module文件;

 

需要记住的是,只要使用了相对导入的语法,无论是在Python 2.X,还是Python 3.X中,都只会在当前目录进行搜寻。如果不使用相对导入语法,那么:

1 对于Python 3.X来说,import和from语法只进行绝对导入的搜寻;

2 对于Python 2.X来说,import和from语法先进行相对导入的搜寻,如果没有搜索到,再进行绝对导入的搜寻

 

那如果Python 2.X也想达到和Python 3.X一样的效果,即如果使用了相对导入,就只在当前package下进行搜寻,否则,就使用绝对导入的搜寻,该怎么办呢?如果真要这样,可以在module文件的第一行,加入如下语句:

from __future__ import absolute_import

那么,对于Python 2.X,无论是import还是ffrom,只要没使用相对导入,都只进行绝对导入的搜寻。

 

posted @   chaoguo1234  阅读(467)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2013-07-22 javascript中的this
点击右上角即可分享
微信分享提示