關(guān)于Python包導(dǎo)入報(bào)錯(cuò)的問(wèn)題總結(jié)
Python包導(dǎo)入報(bào)錯(cuò)的問(wèn)題
首先,一般來(lái)說(shuō),寫一個(gè)小demo可能一個(gè)文件就夠了,但是要是做一個(gè)小項(xiàng)目,可能需要拆分成很多零散的文件,放在不同的文件夾里面調(diào)用,這個(gè)就稱之為模塊(包)
Python的導(dǎo)包是一件令人頭疼的事情,當(dāng)文件多了之后,同樣的導(dǎo)入方式可能在不同的場(chǎng)合遇到解釋器拋出異常。
錯(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)入)

如果真想用里面的方法做測(cè)試,嘗試
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è)文件夾來(lái)管理,把現(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:無(wú)法從部分初始化的模塊“utils.public”導(dǎo)入名稱“print_date”(很可能是由于循環(huán)導(dǎo)入)(D:\xxx\xxx\public.py)
這種情況把真正不依賴當(dāng)前項(xiàng)目本身(公有變量等)的方法,再提取出來(lái)寫到一個(gè)文件里面
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python:pycharm中虛擬環(huán)境venv的使用及說(shuō)明
文章介紹了虛擬環(huán)境的必要性和實(shí)踐方法,虛擬環(huán)境可以幫助用戶管理不同項(xiàng)目所需的Python版本和第三方模塊,避免版本沖突和模塊沖突,文章詳細(xì)介紹了如何使用Python自帶的`venv`模塊創(chuàng)建和管理虛擬環(huán)境,并通過(guò)命令行和PyCharm兩種方式構(gòu)建虛擬環(huán)境2025-01-01
YOLOv5改進(jìn)系列之增加小目標(biāo)檢測(cè)層
yolov5出來(lái)已經(jīng)很長(zhǎng)時(shí)間了,所以有關(guān)yolov5的一些詳細(xì)介紹在這里就不一一介紹了,下面這篇文章主要給大家介紹了關(guān)于YOLOv5改進(jìn)系列之增加小目標(biāo)檢測(cè)層的相關(guān)資料,需要的朋友可以參考下2022-09-09
Python實(shí)現(xiàn)測(cè)試磁盤性能的方法
這篇文章主要介紹了Python實(shí)現(xiàn)測(cè)試磁盤性能的方法,涉及Python對(duì)硬件的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
python 中os模塊os.path.exists()的用法說(shuō)明
這篇文章主要介紹了python 中os模塊os.path.exists()的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Python調(diào)用服務(wù)接口的實(shí)例
今天小編就為大家分享一篇Python調(diào)用服務(wù)接口的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Django在視圖中使用表單并和數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交互的實(shí)現(xiàn)
本文主要介紹了Django在視圖中使用表單并和數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交互,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Python實(shí)現(xiàn)決策樹C4.5算法的示例
本篇文章主要介紹了Python實(shí)現(xiàn)決策樹C4.5算法的示例,詳解的介紹了決策樹C4.5算法的原理和實(shí)現(xiàn)代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-05-05
手把手教你如何使python變?yōu)榭蓤?zhí)行文件
對(duì)于exe可執(zhí)行文件,相信大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于如何使python變?yōu)榭蓤?zhí)行文件的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02

