關(guān)于Python包導(dǎo)入報(bào)錯(cuò)的問題總結(jié)
Python包導(dǎo)入報(bào)錯(cuò)的問題
首先,一般來說,寫一個(gè)小demo可能一個(gè)文件就夠了,但是要是做一個(gè)小項(xiàng)目,可能需要拆分成很多零散的文件,放在不同的文件夾里面調(diào)用,這個(gè)就稱之為模塊(包)
Python的導(dǎo)包是一件令人頭疼的事情,當(dāng)文件多了之后,同樣的導(dǎo)入方式可能在不同的場合遇到解釋器拋出異常。
錯(cuò)誤記錄
1. ModuleNotFoundError: No module named ‘public’
ModuleNotFoundError:沒有名為“public”的模塊
模塊間的引用:
錯(cuò)誤的
正確的方式:
但是如果在里面運(yùn)行代碼,將會(huì)收到
2. ImportError: attempted relative import with no known parent package
ImportError:嘗試在沒有已知父包的情況下進(jìn)行相對(duì)導(dǎo)入
(適合相鄰文件的導(dǎo)入)
如果真想用里面的方法做測試,嘗試
from public import print_date or import public
同樣使用此也會(huì)拋出ImportError
異常 from utils.public import print_date
->
ModuleNotFoundError: No module named 'utils'
但是如果在包外調(diào)用包內(nèi)的方法,又會(huì)報(bào)錯(cuò)
這里又需要把
from public import print_date
改回
from .public import print_date
其中 import .public
是不支持的,編輯器也會(huì)智能顯示錯(cuò)誤波浪線
導(dǎo)入之前捕獲異常 ImportError
3. ImportError: attempted relative import beyond top-level package
ImportError:嘗試相對(duì)導(dǎo)入超出頂級(jí)包 (包內(nèi)導(dǎo)包外) - 需要在這個(gè)層級(jí)之上再建立一個(gè)文件夾來管理,把現(xiàn)有的文件夾當(dāng)作子文件夾管理
······
目錄結(jié)構(gòu)(部分文件內(nèi)容被刪掉了):
關(guān)于 __init__.py
文件的作用,當(dāng)在包外面使用 from xxx imprt *
這中方式導(dǎo)入時(shí),會(huì)導(dǎo)入 __all__ = ['app']
里面的,如果沒有,就不能像下面一樣使用
正常是
# from utils import * from utils import app def putfile(): print('test putfile') if __name__ == '__main__': app.main_run()
很明顯,這樣不行
4. ImportError: cannot import name ‘print_date’ from partially initialized module ‘utils.public’ (most likely due to a circular import) (D:\xxx\xxx\public.py)
ImportError:無法從部分初始化的模塊“utils.public”導(dǎo)入名稱“print_date”(很可能是由于循環(huán)導(dǎo)入)(D:\xxx\xxx\public.py)
這種情況把真正不依賴當(dāng)前項(xiàng)目本身(公有變量等)的方法,再提取出來寫到一個(gè)文件里面
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python之pyqt5通過按鈕改變Label的背景顏色方法
今天小編就為大家分享一篇python之pyqt5通過按鈕改變Label的背景顏色方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06python3.4下django集成使用xadmin后臺(tái)的方法
本篇文章主要介紹了python3.4下django集成使用xadmin后臺(tái)的方法,具有一定的參加價(jià)值,有興趣的可以了解一下2017-08-08使用python和opencv的mask實(shí)現(xiàn)摳圖疊加
這篇文章主要介紹了使用python和opencv的mask實(shí)現(xiàn)摳圖疊加操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04python 動(dòng)態(tài)加載的實(shí)現(xiàn)方法
腳本語言都有一個(gè)優(yōu)點(diǎn),就是動(dòng)態(tài)加載,python也有這個(gè)特性。這篇文章主要介紹了python 動(dòng)態(tài)加載的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-12-12Python函數(shù)之iterrows(),iteritems(),itertuples()的區(qū)別說明
這篇文章主要介紹了Python函數(shù)之iterrows(),iteritems(),itertuples()的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Django Model中字段(field)的各種選項(xiàng)說明
這篇文章主要介紹了Django Model中字段(field)的各種選項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05數(shù)組保存為txt, npy, csv 文件, 數(shù)組遍歷enumerate的方法
今天小編就為大家分享一篇數(shù)組保存為txt, npy, csv 文件, 數(shù)組遍歷enumerate的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07Python functools.lru_cache裝飾器性能提升利器深入探究
本文將詳細(xì)介紹functools.lru_cache裝飾器的原理、用法以及適當(dāng)?shù)膱鼍?以幫助你更好地利用這一功能,它可以用來緩存函數(shù)的輸出,以避免重復(fù)計(jì)算,從而顯著提高程序的執(zhí)行速度2024-01-01Python中使用Opencv開發(fā)停車位計(jì)數(shù)器功能
這篇文章主要介紹了Python中使用Opencv開發(fā)停車位計(jì)數(shù)器,本教程最好的一點(diǎn)就是我們將使用基本的圖像處理技術(shù)來解決這個(gè)問題,沒有使用機(jī)器學(xué)習(xí)、深度學(xué)習(xí)進(jìn)行訓(xùn)練來識(shí)別,感興趣的朋友跟隨小編一起看看吧2022-04-04