我知道這裏有很多類似的問題,但我無法弄清楚哪些項目最適合我。這是通過以下方式組織了一個小型的數據研究項目:在中小型數據科學項目中輸入絕對路徑
project-name/
docs/
src/
__init__.py
config.yml
Makefile
data/
data_management/
__init__.py
process1.py
process2/
analysis/
__init__.py
analysis1.py
analysis2/
library/
__init__.py
config.py
Makefile文件的根目錄隨後執行一些腳本坐在data_management
(準備原始數據)和analysis
,或分別在其子目錄(自有些過程有時是相當廣泛的)。
這些模塊中的每一個都是自包含的 - 除了它們都從library
dir導入(並因此共享)函數/類(我認爲應該避免違反自包含模塊的原則,但我不知道如何解決它而不必複製functinos)。一個例子是在config.py
我的配置類(管理數據庫信息,路徑相關的子目錄,不同的用戶規格等)
問題:我最好的找到它,如果我能在這些腳本的絕對導入路徑,即如果我可以在項目的任何地方寫import library.config
。但感覺不對有
# project-name/src/data_management/process1/data_to_sql.py
import os
import sys
sys.path.insert(0, os.path.abspath('..'))
import library.config
config = library.config.Configuration()
在此之上或任何其他腳本(因爲要訪問我的「路徑管理系統」,我碰上指定路徑的問題)。
問題:如何避免必須在任何文件中使用sys.path.insert
?我應該避免編輯PYTHONPATH
?如果沒有,我怎樣才能在makefile中自動執行這個設置(因爲最終我想與其他人分享這個代碼)?
謝謝。
編輯:我使用Python 2.7.11。
雖然它可能是多餘的,但我爲此創建了一個類,例如,我想要進行幾次「一致性檢查」以確保指定了所有必需的信息。 – Jhonny
「from src.config import Configuration」應該可以在config.py中創建Configuration類時使用。然而,我會建議將'src'重命名爲更多與項目相關的項目,我們只需再次使用項目名稱即可。它使您的導入更加明確,並最終減少歧義。我也建議你按照Nils Werner的指導原則創建一個setup.py。 https://docs.python.org/2/distutils/setupscript.html –