如何在 Python 3 中建立 Python 名稱空間包?
使用名稱空間包,您可以將一個包的子包和模組分佈到許多獨立的釋出包中(在本文件中稱為釋出,以避免歧義)。
在 Python 中,名稱空間包允許您將 Python 程式碼分散到多個專案中。當您希望將相關的庫作為單獨的下載釋出時,這很有用。
建立名稱空間包
目前,有三種方法可以開發名稱空間包。這些方法如下所述。
使用包作為原生名稱空間。此類名稱空間包的 PEP 420 規範指出,Python 3.3 及更高版本支援它。如果您的名稱空間中的包只需要支援 Python 3 和 pip 安裝,那麼建議這樣做。
在 pkgutil 樣式中使用名稱空間包。對於需要支援 Python 2 和 3 以及透過 pip 和 python setup.py install 進行安裝的新包,建議使用此方法。
以 pkg 資源的方式使用名稱空間包。如果您的包需要是 zip 安全的,或者您需要它與已經使用它的其他包一起工作,則建議使用此方法。
示例 1
例如,在 PYTHONPATH 中使用目錄 Package-1 和 Package-2,終端使用者可以匯入 namespace.module1 和匯入 namespace.module2。以下程式碼顯示了每個包中的名稱空間。
Package-1/namespace/__init__.py Package-1/namespace/module1/__init__.py Package-2/namespace/__init__.py Package-2/namespace/module2/__init__.py
示例 2
此示例可用於理解當子包是 Python 中包的一部分時名稱空間是如何存在的。
mynamespace/ __init__.py subpackage_a/ __init__.py ... subpackage_b/ __init__.py ... module_b.py Setup.p
原生名稱空間包
來自 PEP 420 的隱式名稱空間包已新增到 Python 3.3 中。您只需要從包含名稱空間包的目錄中刪除 __init__.py 即可建立一個原生名稱空間包。一個檔案結構模型
setup.py mynamespace/ # No __init__.py here. subpackage_a/ # Sub-packages have __init__.py. __init__.py module.py
pkgutil 樣式的名稱空間包
示例
pkgutil 模組和 pkgutil.extend_path() 函式最初是在 Python 2.3 中提供的。這可以用來宣告必須與 Python 2.3 及更高版本以及 Python 3 一起工作的名稱空間包。對於最高級別的相容性,這是最佳做法。您必須為名稱空間包包含一個 __init__.py 檔案才能以 pkgutil 樣式構建名稱空間包 -
setup.py mynamespace/ __init__.py # Namespace package __init__.py subpackage_a/ __init__.py # Sub-package __init__.py module.py
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP