2016-11-05 173 views
1

我正在從R切換到Python以用於新機器學習項目。用於機器學習的Python導入

我發現一個代碼架構看起來沒問題(下面的圖片),但是如果我想讓我的代碼保持乾爽,我在實現時遇到問題。

enter image description here

所以基本上我有一段代碼,我想在不同的模塊(位於下src模塊即datafeaturesmodel S)共享(功能)。 這種情況下的代碼包含加載和保存數據的函數。

的問題是,我無法導入功能從上部模塊(例如,如果我有functions.py直屬src文件夾)

我可以添加獨立functions.py每個模塊(datafeaturesmodels)內,但會打敗我試圖創建結構良好的項目的目的。

我假設我不是唯一有這個問題的人。

這是如何處理的?

如何創建可以被所有最深嵌套模塊使用的共享模塊? (我想在同一個模塊導入make_dataset.pybuild_features.pypredict_model.pytrain_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

回答

1

你需要將項目添加到您的系統路徑,以便Python可以找到該模塊。

這可以蟒之內完成:

​​

然後,你將能夠與

import general_functions 
+0

我也忘了提及我使用virtualenv和全球空間不應該被污染。這在這種情況下工作嗎? – veich

+0

是的。這隻會暫時影響路徑,它不影響其他正在運行的python程序,並在關閉程序時被刪除。 – Maaaaa

+1

正確,但如果將這兩行放在文件的開頭,那麼每次運行該程序時都很好。 – blacksite