」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在Python中為共享模組創建命名空間包?

如何在Python中為共享模組創建命名空間包?

發佈於2024-11-08
瀏覽:165

How to Create Namespace Packages in Python for Shared Modules?

在Python 中創建命名空間包以進行共享模組分發

簡介

在Python 中,命名空間包是分發相關模組的便捷方法。它們使多個 Python 產品能夠在同一命名空間中定義模組,從而允許最終用戶無縫導入它們。

實作命名空間包

Python 3.3 中的隱式命名空間包

從Python 3.3開始,引入了隱式命名空間包的概念。這消除了命名空間包目錄中明確 __init__.py 檔案的需要。導入系統會自動在 sys.path 中搜尋沒有 __init__.py 檔案的目錄,並將它們初始化為命名空間包。

Python 3.3 先前的解決方案

對於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都會如預期運作。

pkg_resources .declare_namespace()

與 pkgutil.extend_path() 相比,pkg_resources.declare_namespace() 函數尚未更新為支援隱式命名空間包。因此,建議使用 pkgutil 解。

版本聲明 本文轉載於:1729575676如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3