Python 筆記:Package Import, Absolute & Relative
一直被 import 搞的頭暈眼花不是辦法,筆記一下: Import 分成 absolute path, relative path 兩種 absolute path 如同 Java package,使用 fully-qualified name 指定,搜尋時從 sys.path 尋找完整的套件名稱 relative path 如同檔案、URI 相對路徑,由 "." 或是 ".." 起始,搜尋相對於目前模組位置的套件 PEP-8 過去曾反對使用相對路徑,因為當時版本效能不好,目前已修正,承認相對路徑在專案開發時,有許多的好處,也是可以接受的作法 Import 的搜尋路徑 import 指令搜尋路徑,最簡單的想法是搜尋 sys.path sys.path 會包含 command line 指令中,腳本所在目錄: 例如:working_dir$ /path/to/script/filename.py,那就包含 working_dir/path/to/script 但是不會包含 working_dir sys.path 也會包含 PYTHON_PATH 這環境變數 有些 IDE,如:Eclipse,會將專案根目錄,加到 PYTHON_PATH 中,或是修改腳本啟動的工作目錄,要注意 個人短評 套件內部使用相對路徑匯入模組,很大的好處是套件可以在專案中任意搬動 但是匯入其他外部套件、模組時,如果也是使用相對路徑,自己的套件搬動就會遇到大問題 或許比較好的方式是:相同套件模組用相對路徑,其他套件模組用一個絕對路徑引用、重新命名(import ... as ...),再從該套件引用模組 可以利用 __init__.py,將套件內部實作抽象化,避免直接引用外部套件的絕對路徑 參考 https://stackoverflow.com/a/5811548/1825443 https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html#summary--key-points