定義跨專案模組共享的命名空間包
在Python中,命名空間包提供了一種跨多個專案構建相關程式碼的方法。若要定義命名空間包,必須避免將 __init__.py 檔案放置在命名空間包目錄中。
命名空間包的演進
在 Python 3.3 之前,需要命名空間包使用 pkgutil.extend_path() 或 pkg_resources.declare_namespace() 明確宣告。然而,從Python 3.3開始,引入了隱式命名空間包,無需任何聲明即可無縫創建它們。
與常規包交互
命名空間包可以與常規包共存,允許分層結構。當在命名空間包中導入模組時,Python 在父包的 path 中搜索,將搜尋擴展到標準 sys.path 之外。
pkgutil.extend_path() 與pkg_resources.declare_namespace()
同時pkgutil.extend_path() 和. pkg_resources.declare_namespace(),先前用於定義命名空間包建議使用前者,因為它與隱式命名空間包具有面向未來的兼容性。
範例結構
考慮以下目錄結構:
Package-1/namespace/ Package-2/namespace/ ├── path1 │ └── package │ ├── __init__.py │ └── foo.py ├── path2 │ └── package │ └── bar.py └── path3 └── package ├── __init__.py └── baz.py
在 __init__.py 檔案中加入必要的extend_path 聲明,諸如namespace.foo、namespace.bar 和namespace.baz 之類的匯入都會成功。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3