python相對匯入注意事項

weixin_33785972發表於2018-04-24

最簡單直接的辦法就是:

  • 直接把要匯入的 package 複製到 site-package資料夾下!

  • 或者把 package 所在的路徑加到 python 的搜尋路徑裡面!

上面兩種應該是最好的辦法

pycharm 中執行指令碼時,相對匯入可以直接使用

但是如果系統直接執行python指令碼
from .. import XXX (上一級目錄的package)
from . import XXX (當前工作目錄的package)
可能會有
ValueError: attempted relative import beyond top-level package
SystemError: Parent module '' not loaded, cannot perform relative import
這樣的錯誤

產生錯誤的原因:

  • 沒有 __init__.py 檔案:相對匯入時,package 所對應的資料夾必須被 python直譯器 視作 package,
    而不是普通資料夾,也就是說資料夾中必須要有 __init__.py 檔案

  • 當前級別的目錄中執行了py指令碼:該資料夾不能作為主函式的入口(頂層模組)來執行該資料夾中的py檔案,想執行的話可以把主函式放在該資料夾的上一級目錄中(不過這樣似乎不利於指令碼的分類整理,如果想把一類的指令碼放到一個資料夾下的話,這個資料夾就又成了主函式的入口?所以建議直接用開頭的兩個方法完成匯入)

在"from YY import XX"這樣的程式碼中,無論是XX還是YY,只要被python直譯器視作package,就會首先呼叫該package的init.py檔案。如果都是package,則呼叫順序是YY,XX

相關文章