Python中import导入上一级目录模块及循环import问题的解决


Posted in Python onJune 04, 2016

import上一级目录的模块
python中,import module会去sys.path搜索,sys.path是个列表,并且我们可以动态修改。
要import某个目录的module,我们sys.path.insert(0,somedir)来加入搜索路径,就可以import了。
既然这样,要import上一级目录的module,可以sys.path.insert(0,parentdir)。
不过这种写绝对路径的方式,如果文件放到其它地方,就不行了。
所以用动态方法来获取上一级目录。

import os,sys 
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
sys.path.insert(0,parentdir)

为什么用sys.path.insert(0,parentdir) 而不是用sys.path.append(parentdir)呢
因为是遍历搜索路径的,所以如果在其它路径里也有个同名的module,会import错。用sys.path.insert(0,parentdir)可以确保先搜索这个路径。

解决循环import的问题
在python中常常会遇到循环import即circular import的问题。
现实中经常出现这种滑稽的情况,
安装无线网卡的时候,需要上网下载网卡驱动..
安装压缩软件的时候,从网上下载的压缩软件安装程序居然是被压缩了的..
循环依赖就类似于这种情况。
举个栗子,
在models.py中,

from server import db 
class User(db.Model): 
  pass

在server.py中,

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 
app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' 
db = SQLAlchemy(app) 
from models import User

这样就产生了循环import的问题。
解决循环import的方法主要有几种。
1.延迟导入(lazy import)
即把import语句写在方法或函数里面,将它的作用域限制在局部。
这种方法的缺点就是会有性能问题。
2.将from xxx import yyy改成import xxx;xxx.yyy来访问的形式
3.组织代码
出现循环import的问题往往意味着代码的布局有问题。
可以合并或者分离竞争资源。
合并的话就是都写到一个文件里面去。
分离的话就是把需要import的资源提取到一个第三方文件去。
总之就是将循环变成单向。

Python 相关文章推荐
python with statement 进行文件操作指南
Aug 22 Python
python中dir函数用法分析
Apr 17 Python
python利用正则表达式排除集合中字符的功能示例
Oct 10 Python
python分析作业提交情况
Nov 22 Python
如何利用python查找电脑文件
Apr 27 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
Django 开发环境配置过程详解
Jul 18 Python
Tensorflow实现部分参数梯度更新操作
Jan 23 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
Jun 29 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 Python
Python输出汉字字库及将文字转换为图片的方法
Jun 04 #Python
使用Python的Flask框架来搭建第一个Web应用程序
Jun 04 #Python
Python的Django中将文件上传至七牛云存储的代码分享
Jun 03 #Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 #Python
详解字典树Trie结构及其Python代码实现
Jun 03 #Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 #Python
Python中的descriptor描述器简明使用指南
Jun 02 #Python
You might like
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
2020/04/09 Javascript
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
python实战串口助手_解决8串口多个发送的问题
2019/06/12 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
python字符串判断密码强弱
2020/03/18 Python
结束运行python的方法
2020/06/16 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
环境建设实施方案
2014/03/14 职场文书
寒假家长评语大全
2014/04/16 职场文书
十佳少年事迹材料
2014/12/25 职场文书
党员个人总结自评
2015/02/14 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript