Python 筆記:Package Import, Absolute & Relative
一直被 import 搞的頭暈眼花不是辦法,筆記一下:
Import 分成 absolute path, relative path 兩種
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
留言
張貼留言