from . import echo # 從當前目錄導入echo模塊
from .. import formats # 從上級目錄導入formats模塊
from ..filters import equalizer # 從上級目錄的filters目錄導入equalizer模塊
關鍵是最后一句話(此處為五毛翻譯):
相對導入是基於當前模塊的name屬性的。當被執行模塊作為python應用的主模塊時,因為其name屬性為'__main__',所以在調用其他模塊時應使用絕對導入。
以下為個人理解:
例如a.py和b.py在同一目錄下
當a.py作為執行文件時,在a中調用b:import b就可以了,使用from <父目錄> import b,文本編輯器會報錯,但是執行順利。使用任何from . import xxx和from .. import xxx均會報錯:ModuleNotFoundError: No module named '__main__.d'; '__main__' is not a package
當a作為模塊被調用時:import b會在sys.path的目錄中尋找b模塊,from同理。而from . import xxx和from .. import xxx順利執行。