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从入门到精通(DAY 3)
Dec 20 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
django使用LDAP验证的方法示例
Dec 10 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
Jul 04 Python
Python流程控制 while循环实现解析
Sep 02 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
Pyinstaller加密打包应用的示例代码
Jun 11 Python
基于matplotlib中ion()和ioff()的使用详解
Jun 16 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
接口自动化多层嵌套json数据处理代码实例
Nov 20 Python
python基础之错误和异常处理
Oct 24 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
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
使用python接入微信聊天机器人
2020/03/31 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
审计工作个人的自我评价
2013/12/25 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
女娲补天教学反思
2014/02/05 职场文书
《在家里》教后反思
2014/03/01 职场文书
一年级学生评语
2014/04/23 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
小学运动会报道稿
2015/07/22 职场文书
Python访问Redis的详细操作
2021/06/26 Python
带你了解CSS基础知识,样式
2021/07/21 HTML / CSS