在Python 中,命名空間包是分發相關模組的便捷方法。它們使多個 Python 產品能夠在同一命名空間中定義模組,從而允許最終用戶無縫導入它們。
從Python 3.3開始,引入了隱式命名空間包的概念。這消除了命名空間包目錄中明確 __init__.py 檔案的需要。導入系統會自動在 sys.path 中搜尋沒有 __init__.py 檔案的目錄,並將它們初始化為命名空間包。
對於3.3 之前的Python 版本,pkgutil.extend_path () 方法可用來定義明確命名空間套件:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
此行將搜尋路徑中找到的任何常規套件新增至命名空間套件的 path 屬性。
在常規包和命名空間包共存的情況下,前面提到的extend_path()方法已擴展為包含隱式命名空間包。這允許以下目錄結構:
├── path1 │ └── package │ ├── __init__.py │ └── foo.py ├── path2 │ └── package │ └── bar.py └── path3 └── package ├── __init__.py └── baz.py
使用extend_path()的__init__.py文件,導入package.foo、導入package.bar和導入package.baz都會如預期運作。
與 pkgutil.extend_path() 相比,pkg_resources.declare_namespace() 函數尚未更新為支援隱式命名空間包。因此,建議使用 pkgutil 解。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3