日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

關于Python包導入報錯的問題總結_python

作者:大大毛丶aj ? 更新時間: 2023-05-18 編程語言

Python包導入報錯的問題

首先,一般來說,寫一個小demo可能一個文件就夠了,但是要是做一個小項目,可能需要拆分成很多零散的文件,放在不同的文件夾里面調用,這個就稱之為模塊(包)

Python的導包是一件令人頭疼的事情,當文件多了之后,同樣的導入方式可能在不同的場合遇到解釋器拋出異常。

錯誤記錄

1. ModuleNotFoundError: No module named ‘public’

ModuleNotFoundError:沒有名為“public”的模塊

模塊間的引用:

錯誤的

正確的方式:

但是如果在里面運行代碼,將會收到

2. ImportError: attempted relative import with no known parent package

ImportError:嘗試在沒有已知父包的情況下進行相對導入

(適合相鄰文件的導入)

如果真想用里面的方法做測試,嘗試

from public import print_date
or
import public

同樣使用此也會拋出ImportError異常 from utils.public import print_date -> ModuleNotFoundError: No module named 'utils'

但是如果在包外調用包內的方法,又會報錯

這里又需要把

from public import print_date

改回

from .public import print_date

其中 import .public 是不支持的,編輯器也會智能顯示錯誤波浪線

導入之前捕獲異常 ImportError

3. ImportError: attempted relative import beyond top-level package

ImportError:嘗試相對導入超出頂級包 (包內導包外) - 需要在這個層級之上再建立一個文件夾來管理,把現有的文件夾當作子文件夾管理

······

目錄結構(部分文件內容被刪掉了):

關于 __init__.py 文件的作用,當在包外面使用 from xxx imprt * 這中方式導入時,會導入 __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”導入名稱“print_date”(很可能是由于循環導入)(D:\xxx\xxx\public.py)

這種情況把真正不依賴當前項目本身(公有變量等)的方法,再提取出來寫到一個文件里面

總結

原文鏈接:https://blog.csdn.net/qq_34580627/article/details/125234401

欄目分類
最近更新