--- tags: 相對路徑, 絕對路徑, python --- # [python] Package and Module 相對路徑、絕對路徑 Reference: https://www.learncodewithmike.com/2020/01/python-module-and-package.html Q: Why I can't call parent file as relative path? A: 在 Python 中,相對路徑的使用是很嚴格的,首先必須搞懂 Package (套件) and Module (模組) 之間的差異。因為一個主執行程式,只能用絕對路徑來 import package,而只有 package 中 Module 與 Module 之間的 import 才有絕對路徑與相對路徑的選擇。相對路徑是檔案之間的相對位置沒錯,但是轉為執行程序 (process) 的時候,只能有一個絕對、唯一的參照點,也就是一個固定的根目錄 (即 package 的最上層位置)。我們任一個欲執行的 python 主程式 (下以 main.py 代稱),main.py 需使用絕對位置導入 package,因為 main.py 本身並不是一個 package,只有身為 package 才能使用相對路徑來任意執行底下的 module。 import package 可以想成把 package 掛到 (mount) 至 main.py。 若要執行任何一個用相對路徑定義的 module,則必須固定執行的路徑於 package 的最頂位置,你不可能站在任意 module 的位置去執行 module,因為只有 package 才能用相對路徑進行內部 import,而 module 不是 package。 故直接執行 child-module(其使用相對路徑導入其他 module) 是不可能間接執行 parents or grandparents。