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,只要没使用相对导入,都只进行绝对导入的搜寻。
Python中的相对导入语法的更多相关文章
- Python中package的导入语法
在Python中,一个目录被称为一个package.import和from语法除了导入module文件之外,还可以导入package,语法如下: # import语法 import dir1.dir2 ...
- python中根据字符串导入模块module
python中根据字符串导入模块module 需要导入importlib,使用其中的import_module方法 import importlib modname = 'datetime' date ...
- 导模块的细节:(跨文件导入模块 &模块的两种执行方式) | 包的概念与使用 | 包中的相对导入语法
今日内容 包: 1. 导入模块的细节 2. 包的概念与使用 3. 包中的相对导入语法 跨文件夹导入模块 1. 假设有一个文件夹a ,a 的下面有一个ma 的模块,如果a文件夹所在目录在环境变量,a文件 ...
- 简单探讨python中的语句和语法
python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了,对象需要靠表达式建立处理,而表达式往往存在于语句 ...
- Python中import的as语法
在Python中,如果import的语句比较长,导致后续引用不方便,可以使用as语法,比如: import dir1.dir2.mod # 那么,后续对mod的引用,都必须是dir1.dir2.mod ...
- Python中一些糟糕的语法!你遇到过吗?还知道那些?
Python是一门语法优雅,功能强大,开发效率高,应用领域广泛的解释性语言. 其有非常多的优点,但是也并不是完美的,除了大家都知道的执行速度不够快,Python2和Python3的兼容问题,以及GIL ...
- 详解Python中的相对导入和绝对导入
Python 相对导入与绝对导入,这两个概念是相对于包内导入而言的.包内导入即是包内的模块导入包内部的模块. Python import 的搜索路径 在当前目录下搜索该模块 在环境变量 PYTHONP ...
- python中的绝对导入与相对导入,from __future__ import absolute_import的区别
相对导入:在不指明 package 名的情况下导入自己这个 package 的模块,比如一个 package 下有 a.py 和 b.py 两个文件,在 a.py 里 from . import b ...
- 简单介绍下python中函数的基础语法
python 函数 定义 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 特性 减少代码重复 使程序变得可扩展 使程序变得易于维护 函数的创建 pyt ...
随机推荐
- 深入理解bit_or和bit_and,bit_count
bit_or:二进制数按位或,bit_and:二进制数按位与,bit_count:统计二进制数1个个数 下面以一个例子来说明用法:示例要实现的功能就是计算每月有几天有访问,先把示例摘录在这里.1234 ...
- Jmeter的实例应用
目标: 获取城市的天气数据: 第一步: 发送request 获取城市的城市代号http://toy1.weather.com.cn/search?cityname=上海 从这个请求的response ...
- AJAX 动态加载后台数据 绑定select
<select id="select"> <!--下拉框数据动态加载--> </select> js:(使用jquery) $(document ...
- [转载zz] Python3 输入和输出之序列化与反序列化
http://www.runoob.com/python3/python3-inputoutput.html pickle 模块 python的pickle模块实现了基本的数据序列和反序列化. 通过p ...
- linux mint系统 cinnamon桌面 发大镜功能
让我来告诉迷途中的你cinnamon桌面一个好用的功能. 选择设置 选择窗口 -> 选择行为 看那个窗口移动和调整大小的特殊键 Alt 好了按住alt在滑动滑轮 世界不一样了 对于小屏幕高分辨率 ...
- Cmake3.6.1 下载
下载地址:https://github.com/Kitware/CMake/releases?after=v3.6.2
- Prism for WPF 搭建一个简单的模块化开发框架(二)
原文:Prism for WPF 搭建一个简单的模块化开发框架(二) 今天又有时间了,再改改,加了一些控件全局的样式 样式代码 <ResourceDictionary xmlns="h ...
- c++动态库封装及调用(1、动态库介绍)
1.一个程序从源文件编译生成可执行文件的步骤: 预编译 --> 编译 --> 汇编 --> 链接 (1)预编译,即预处理,主要处理在源代码文件中以“#”开始的预编译指令,如宏展开 ...
- 一分钟了解spark的调优
Tuning Spark 数据序列化 内存调优 内存管理概述 确定内存消耗 调整数据结构 序列化 RDD 存储 垃圾收集调整 其他注意事项 并行度水平 减少任务的内存使用 广播大的变量 数据本地化 概 ...
- jQuery个人总结
选择 1. end()的使用 $('div') .find('h3') .eq(2) .html('Hello') .end() //退回到选中所有的h3元素的那一步 .eq(0) //选中第一个h3 ...