首頁 > 軟體

Python 同級目錄(兄弟目錄)呼叫方式

2022-02-11 13:01:12

同級目錄(兄弟目錄)呼叫

看書看得好好的,一寫程式碼就出錯!!!

這個問題是大家初學Python的時候會遇到的一個很常見的問題,然後我們去搜網上的教學,自己試一試還是都是BUG,常見的就是這兩個命令:

ModuleNotFoundError: No module named 'XXXXXXX'

ImportError: attempted relative import with no known parent package

教學一般都是很詳細的給你分析,然後給你井不同檔案的呼叫,其實整那麼多沒事的幹嘛是不是,我們要的只是解決辦法。

詳細解釋

注意

1、我只說兄弟的資料夾下面的呼叫,父子啥的__init__.py 搜一搜就可以了

2、不要用Vscode ,Vscode的環境變數你是整不明白的

3、我沒太多的時間花費在部落格上,所以遇到啥才會去擴充啥,大家也可以在下面留言遇到的問題和解決的辦法

4、可能我說的也會有錯誤,但我主要的是解決我自己遇到的問題

開始上程式碼

目錄結構

a1.py

def a1_print():
    print("a1_print  OK")

b1.py

from ..a.a1 import a1_print
a1_print()

執行b1.py,報錯

ImportError: attempted relative import with no known parent package

原因

資料夾被python直譯器視作package需要滿足兩個條件:

  • 資料夾中必須有__init__.py檔案,該檔案可以為空,但必須存在。不能作為頂層模組來執行該資料夾中的py檔案,即使用…的資料夾外邊還需要有包含__init__.py的資料夾 (即不能作為主函數的入口)
  • 主就是 不能作為主函數的入口,兄弟參照不能作為入口,意思是你不能直接執行b1.py,你可以在c1.py 這樣弄,b1.py 不可以 不可以 不可以

我非要咋解決

修改b1.py

import sys# 加了這了
sys.path.append("..")  ## 這個
from a.a1 import a1_print  #改了這個
a1_print()

輸出

BUG

Pycharm

我覺得還是不管它吧,能執行就不錯了,沒有啥影響。

不要用Vscode 不要用Vscode 不要用Vscode 

import同級目錄報錯

pycharm不會將當前檔案目錄自動加入自己的sourse_path。右鍵make_directory as-->Sources Root將當前工作的資料夾加入source_path就可以了。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com