源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-09-16 06:56 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Python中import导入上一级目录模块及循环import问题的解决
[b]import上一级目录的模块 [/b]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)可以确保先搜索这个路径。 [b]解决循环import的问题 [/b]在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的资源提取到一个第三方文件去。 总之就是将循环变成单向。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部