国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中import導入上一級目錄模塊及循環import問題的解決

2019-11-25 16:45:35
字體:
來源:轉載
供稿:網友

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的資源提取到一個第三方文件去。
總之就是將循環變成單向。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南康市| 饶河县| 临朐县| 赤峰市| 阜阳市| 江西省| 马公市| 北宁市| 延庆县| 新安县| 万盛区| 丰城市| 常山县| 蛟河市| 治县。| 团风县| 南京市| 绥德县| 长岭县| 新巴尔虎右旗| 襄垣县| 论坛| 老河口市| 秀山| 抚远县| 高唐县| 武宁县| 瑞安市| 白城市| 通州市| 丰都县| 如东县| 扶余县| 伊吾县| 城固县| 衡水市| 凌云县| 海晏县| 海安县| 浦城县| 宜昌市|