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

  1. # 导入"./dir2/spam.py", .表示当前目录
  2. from .dir2 import spam
  3.  
  4. # 导入"./../dir3/spam.py", .表示当前目录, ..表示上一级目录
  5. 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文件的第一行,加入如下语句:

  1. from __future__ import absolute_import

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

Python中的相对导入语法的更多相关文章

  1. Python中package的导入语法

    在Python中,一个目录被称为一个package.import和from语法除了导入module文件之外,还可以导入package,语法如下: # import语法 import dir1.dir2 ...

  2. python中根据字符串导入模块module

    python中根据字符串导入模块module 需要导入importlib,使用其中的import_module方法 import importlib modname = 'datetime' date ...

  3. 导模块的细节:(跨文件导入模块 &模块的两种执行方式) | 包的概念与使用 | 包中的相对导入语法

    今日内容 包: 1. 导入模块的细节 2. 包的概念与使用 3. 包中的相对导入语法 跨文件夹导入模块 1. 假设有一个文件夹a ,a 的下面有一个ma 的模块,如果a文件夹所在目录在环境变量,a文件 ...

  4. 简单探讨python中的语句和语法

    python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了,对象需要靠表达式建立处理,而表达式往往存在于语句 ...

  5. Python中import的as语法

    在Python中,如果import的语句比较长,导致后续引用不方便,可以使用as语法,比如: import dir1.dir2.mod # 那么,后续对mod的引用,都必须是dir1.dir2.mod ...

  6. Python中一些糟糕的语法!你遇到过吗?还知道那些?

    Python是一门语法优雅,功能强大,开发效率高,应用领域广泛的解释性语言. 其有非常多的优点,但是也并不是完美的,除了大家都知道的执行速度不够快,Python2和Python3的兼容问题,以及GIL ...

  7. 详解Python中的相对导入和绝对导入

    Python 相对导入与绝对导入,这两个概念是相对于包内导入而言的.包内导入即是包内的模块导入包内部的模块. Python import 的搜索路径 在当前目录下搜索该模块 在环境变量 PYTHONP ...

  8. python中的绝对导入与相对导入,from __future__ import absolute_import的区别

    相对导入:在不指明 package 名的情况下导入自己这个 package 的模块,比如一个 package 下有 a.py 和 b.py 两个文件,在 a.py 里 from . import b ...

  9. 简单介绍下python中函数的基础语法

    python 函数 定义 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 特性 减少代码重复 使程序变得可扩展 使程序变得易于维护 函数的创建 pyt ...

随机推荐

  1. ubnutu 安装protocol buffer

    工作中需要使用protocol buffer,需要编译出protocol buffer的动态链接库,然后在别的makefile中链接它, 我的环境是ubnutu16.04,64bit,使用的proto ...

  2. keepalived+haproxy 安装配置

    1.安装配置keepalived 修改配置文件/etc/keepalived/keepalived.conf ! Configuration File for keepalived global_de ...

  3. SQL Server公用表达式CET递归查询所有上级数据

    with cte as( select bianma,fjbm from #tree where chkDisabled='true' union all select t.bianma,t.fjbm ...

  4. Dubbo 改造普通单体项目

    一.新建普通maven项目 1.首先,新建3个普通maven商城项目,模拟以往常见的Java单体应用开发,mall-interface是存放接口和公共代码部分,order-service-consum ...

  5. 【读书笔记 - Effective Java】01. 考虑用静态工厂方法代替构造器

    获取类的实例有两种方法: 1. 提供一个公有的构造器(最常用). 2. 提供一个公有的静态工厂方法(static factory method). // 静态工厂方法示例 public static ...

  6. Spring异常重试框架Spring Retry

    Spring Retry支持集成到Spring或者Spring Boot项目中,而它支持AOP的切面注入写法,所以在引入时必须引入aspectjweaver.jar包. 快速集成的代码样例: @Con ...

  7. operator.attrgetter() 进行对象排序

    ## 使用operator.attrgetter() 进行对象排序 from operator import attrgetter class Student: def __init__(self, ...

  8. mysql 多主多从配置,自增id解决方案

    MySQL两主(多主)多从架构配置 一.角色划分 1.MySQL数据库规划 我现在的环境是:zhdy04和zhdy05已经做好了主主架构配置,现在需要的是把两台或者多台从服务器与主一一同步. 主机名 ...

  9. 一图看懂mybatis执行过程

    一图看懂mybatis执行过程,不再懵B了

  10. 关于C链表的实现

    学习了数据结构后,自己学习写了一个链表的程序.初步功能是实现了.但是不知道会不会有一些隐含的问题.所以希望大佬指导指导 /******************/ /*一个小的链表程序*/ /***** ...