2011-07-24 30 views
1

在Python中的各個項目之間共享配置參數\ settings \常量的方法是什麼?在Python項目之間共享設置常量

使用數據庫看起來像一個矯枉過正。使用文件提出了哪些項目應該申辦文件中的源代碼管理的問題...

我開放的建議:)

UPDATE:
爲了澄清 - 呈現的各種項目在不同的系統上部署不同。在某些情況下,在不同的目錄中,在其他情況下,有些項目在那裏,有些則不在。

+0

我剛剛寫了所有四個答案,當時我寫這表明你沒有清楚地指出問題是什麼。 – msw

回答

3

創建一個Python包,並在各個項目導入...

5

我發現,在許多情況下,使用配置文件確實是值得的(未成年人)的麻煩。內置的ConfigParser模塊非常方便,尤其是它可以很容易地解析多個文件,並讓模塊將它們合併在一起,並且稍後解析的文件中的值將覆蓋先前解析的文件的值。這可以方便地使用全局文件(例如/etc/yoursoftware/main.ini)和每個用戶文件(〜/ .yoursoftware/main.ini)。

然後,您的每個項目都會打開配置文件並從中讀取值。

這裏是一個小的代碼示例:

basefile.ini:

[sect1] 
value1=1 
value2=2 

overridingfile.ini:

[sect1] 
value1=3 

configread.py:

#!/usr/bin/env python 

from ConfigParser import ConfigParser 

config = ConfigParser() 
config.read(["basefile.ini", "overridingfile.ini"]) 

print config.get("sect1", "value1") 
print config.get("sect1", "value2") 

運行,這將打印出來:

3 
2 
+0

ConfigParser是非常有用的,我實際上已經在使用它。然而,我試圖弄清楚如何在項目之間共享這些常量。 – Jonathan

3

你爲什麼不只是有一個constants.py文件命名,只是有常數=值

+0

查看最新的澄清。我沒有看到一個簡單的constants.py文件是如何工作的。我將不得不在每個項目中都維護它... – Jonathan

+0

如果它們是常數,表明它們是恆定的。如果'my/constant/user.py'還沒有和其他代碼一起部署,''如何在你的場景中導入my.constant.user'工作?一旦你回答了,'my.constant.initializer.py'或'my/constants.py'應該以相同的方式部署。 – msw

+0

製作一個包並將其安裝到python的庫目錄中(我不記得具體的目錄) – Pwnna

2

爲什麼是數據庫矯枉過正?您正在描述位於不同物理系統上的不同項目之間共享數據,這些項目具有到每個項目目錄的不同路徑哦,有時這些項目不在那裏。我無法想象傳達數據的更好方法。它只需要一個表格,如果它提供跨平臺,計算機甚至網絡所需的一致訪問權限,這一點也不過分。

+0

DB當然會解決這個問題。我可以使用一個可以放鬆耦合的屬性值模型。但是,在這個問題中,我試圖尋找下一個最佳選擇。 +1,因爲這當然會解決問題。 – Jonathan