详解Python中的from..import绝对导入语句
2018-04-04 09:34
429 查看
相对或者绝对import
更多的复杂部分已经从python2.5以来实现:导入一个模块可以指定使用绝对或者包相对的导入。这个计划将移动到使绝对的导入成为默认的细节在其他版本的python中。
我们假设你有一个包目录,像下面这样:
上面定义了一个包称为 pkg 包含 pkg.main 和pkg.string 两个子模块。考虑在‘main.py'中的代码,什么事情会发生如果我们执行语句 import string 在python2.4或者更早的版本?他将会查询包的目录执行一个相对的import,找到pkg/string.py ,导入文件的内容作为pkg.string模块,这个模块的边界的名字是'string'在pkg.main模块中的名称空间。
如果pkg.string是你想要的这个非常不错。但是如果你仅仅想要的是python的基本的string模块?
没有清楚的方法忽略pkg.string以及寻找基本的模块;一般情况下你不得不去查看sys.modules中的内容,那有一点稍微的不清楚。Holger Krekel的py.std包提供了一个整齐的方法执行从基本库中导入的方法,improt py;py.std.string.jion(),但是那个包在python的安装过程是是不可用的。
阅读代码在相对导入方面也是不够清晰的,因为读者可能混淆string和pkg.string模块使用。Python用户可以马上知道那是不同的名称在基本库和自己的包模块之间,但是你不能保护你自己的子模块名字在一个新版本的python中。
从python2.5,你可以打开 import的行为直接去绝对导入使用一个 from __future__ import absolute_import 。这个绝对导入行为将成为一个默认的细节在将来的python中。一旦绝对导入被默认,import string 将总是寻找基本库。建议用户尽可能多的使用绝对导入,因此在你的代码中使用from pkg improt string是适宜的。在python2.*版本中需要:
示例1:
例如:在模块A.B.C中的代码:
.代表当前目录,..代表上一层目录,...代表上上层目录。
示例2:
目录结构:
在subpackage1/moduleX.py 或者 subpackage1/__init__.py中可以这样导入module:
注意,from ...sys import path是合法的,但是不建议。直接from sys import path就行了。
更多的复杂部分已经从python2.5以来实现:导入一个模块可以指定使用绝对或者包相对的导入。这个计划将移动到使绝对的导入成为默认的细节在其他版本的python中。
我们假设你有一个包目录,像下面这样:
如果pkg.string是你想要的这个非常不错。但是如果你仅仅想要的是python的基本的string模块?
没有清楚的方法忽略pkg.string以及寻找基本的模块;一般情况下你不得不去查看sys.modules中的内容,那有一点稍微的不清楚。Holger Krekel的py.std包提供了一个整齐的方法执行从基本库中导入的方法,improt py;py.std.string.jion(),但是那个包在python的安装过程是是不可用的。
阅读代码在相对导入方面也是不够清晰的,因为读者可能混淆string和pkg.string模块使用。Python用户可以马上知道那是不同的名称在基本库和自己的包模块之间,但是你不能保护你自己的子模块名字在一个新版本的python中。
从python2.5,你可以打开 import的行为直接去绝对导入使用一个 from __future__ import absolute_import 。这个绝对导入行为将成为一个默认的细节在将来的python中。一旦绝对导入被默认,import string 将总是寻找基本库。建议用户尽可能多的使用绝对导入,因此在你的代码中使用from pkg improt string是适宜的。在python2.*版本中需要:
例如:在模块A.B.C中的代码:
示例2:
目录结构:
相关文章推荐
- 详解Python中的from..import绝对导入语句
- 详解Python中的from..import绝对导入语句
- python中模块导入语句 from ..import ..与from import as的区别
- python中的绝对导入与相对导入,from __future__ import absolute_import的区别
- 详解Python中的相对导入和绝对导入
- from....import 导入的总结 分类: python基础学习 2014-01-06 14:20 192人阅读 评论(0) 收藏
- 全网最详细的跑python2.7时出现from mysql import connector ImportError: No module named mysql的问题解决办法(图文详解)
- from ....import导入其他路径的模块 分类: python基础学习 2013-10-11 15:13 315人阅读 评论(0) 收藏
- Python 中 一个模块文件导入操作:import 和 from ,以及reload调用
- Python中关于导入(import)语句的使用说明
- 从Python的两种导入模块(from import和import)方式谈命名空间与作用域
- python3的import导入语句的书写方式
- python 环境变量和import模块导入方法(详解)
- 在python用import或者from...import来导入相应的模块
- Python import语句导入模块语法[转]
- Python-学习-import语句导入模块
- Python import语句导入模块语法
- python3.4中yield from语句详解
- python的package import 以及相对导入和绝对导入
- 详解Python中的相对导入和绝对导入