首頁 >後端開發 >Python教學 >Python 3.3 中的套件需要 `__init__.py` 檔案嗎?

Python 3.3 中的套件需要 `__init__.py` 檔案嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-03 08:30:11334瀏覽

Do I Need `__init__.py` Files for Packages in Python 3.3 ?

Python 3.3 中的命名空間套件

問題:

在Python 3.3 中,是否需要有__init__ 。導入時的py檔案包嗎?

答:

不一定。 Python 3.3 引入了「隱式命名空間包」的概念,允許在沒有 __init__.py 檔案的情況下建立套件。這些被稱為命名空間包,與具有 __init__.py 檔案的常規包相反。

隱式命名空間包用例:

命名空間包是專門使用的當多個庫駐留在不同位置並且需要將子包貢獻給同一個父包時。例如,考慮以下結構:

如果沒有命名空間包,導入「google_pubsub」和「google_storage」都會失敗,因為 Python 將常規包視為獨立實體。透過從「google」和「google/cloud」目錄中刪除 __init__.py 文件,它們將被解釋為命名空間包,從而允許 Python 解釋器查找並向「google」包貢獻模組和子包。

常規套件與命名空間套件:

在大多數情況下,建議透過使用空來堅持使用常規套件__init__.py 檔案。這是因為:

  • 常規套件更可預測且更易於維護。
  • 許多 Python 工具和函式庫都希望常規套件能夠正常運作。

結論:

雖然命名空間包在特定場景中可能有用,但它們應該謹慎使用。對於大多數開發人員和用例,建議使用帶有 __init__.py 檔案的常規套件。僅當確實需要在包含子包的多個目錄之間共享命名空間時才考慮命名空間包。

參考文獻:

  • [PEP 420 - 隱式命名空間套件](https://www.python.org/dev/peps/pep -0420/)
  • [Python 文件 -常規套件](https://docs.python.org/3/reference/ import.html#packages)
  • [Python 文件- 命名空間套件](https://docs.python.org/3 /reference/import.html#namespace-packages)
  • [Python導入系統中粗心的陷阱](https://www.python. org/doc/essays/import-traps/)

以上是Python 3.3 中的套件需要 `__init__.py` 檔案嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn