我正在從R切換到Python以用於新機器學習項目。用於機器學習的Python導入
我發現一個代碼架構看起來沒問題(下面的圖片),但是如果我想讓我的代碼保持乾爽,我在實現時遇到問題。
所以基本上我有一段代碼,我想在不同的模塊(位於下src
模塊即data
,features
和model
S)共享(功能)。 這種情況下的代碼包含加載和保存數據的函數。
的問題是,我無法導入功能從上部模塊(例如,如果我有functions.py
直屬src
文件夾)
我可以添加獨立functions.py
每個模塊(data
,features
,models
)內,但會打敗我試圖創建結構良好的項目的目的。
我假設我不是唯一有這個問題的人。
這是如何處理的?
如何創建可以被所有最深嵌套模塊使用的共享模塊? (我想在同一個模塊導入make_dataset.py
,build_features.py
,predict_model.py
,train_model.py
)
編輯:
我也忘了提我使用的virtualenv和全球空間不應該被污染。
SOLUTION:
所以我落得這樣做我下面的代碼添加到我的頂包__init__.py
文件: import sys, os fullPathToProjectFolder = os.path.dirname(os.path.realpath(__file__)) sys.path.insert(0, fullPathToProjectFolder) print('__init__ project packege linked: ' + fullPathToProjectFolder)
所以每當你使用任何來自主包裝或分裝它會自動鏈接(因爲當你導入主包時,__init__.py
文件被自動調用)。並且每個模塊都可以使其相對於頂層包的進口。
E.g:如果train_model.py
要進口build_features.py
它會做它像這樣:
from features import build_features
我也忘了提及我使用virtualenv和全球空間不應該被污染。這在這種情況下工作嗎? – veich
是的。這隻會暫時影響路徑,它不影響其他正在運行的python程序,並在關閉程序時被刪除。 – Maaaaa
正確,但如果將這兩行放在文件的開頭,那麼每次運行該程序時都很好。 – blacksite