2
假設您正在創建一個包含四個子包的python包,並且有一個模塊generic_stuff.py
,這正好是其中兩個所需的模塊。爲了使其具有實際意義,可能generic_stuff.py
包含一些用於讀取和寫入數據庫的自定義函數,並且子包1和2包含用於要單獨部署的Web服務器的代碼。在子包之間共享Python模塊的最佳做法是什麼?
的問題是:
什麼是正確的方式使
generic_stuff.py
提供給子包1和2?
我能想到的三種方式來做到這一點,但他們都覺得像黑客:
- 請自行封裝
generic_stuff.py
一部分並進行安裝。這是不令人滿意的,因爲它污染了整個系統的命名空間(更不用說子包3和4)。 - 將子目錄(包含
generic_stuff.py
和四個子包)添加到系統路徑中,然後再導入到子包1和子包2中。這並不令人滿意,因爲它將父目錄中的所有內容添加到子包1和2的名稱空間中。通過將generic_stuff.py
放在其自己的目錄中並將其添加到系統路徑中可以避免,但即使如此,如果在子包1和2中有多個模塊正在使用多個通用模塊,這種方法的擴展性也不會很好(假設嘗試重構該項目)。 - 維護
generic_stuff.py
的兩個副本:分包1和分包2中的一個。我是否需要解釋爲什麼這是一個壞主意?
我想什麼,我心裏有一些類型的配置,也許這將走在父目錄的__init__.py
或東西,這將使模塊X提供給分裝Y.是否像這樣的東西存在嗎?