2016-08-17 40 views
-3

假設我正在從setup.py安裝python應用程序,並且在virtualenv中這樣做。另外,假設我需要提供諸如API密鑰/ URI之類的應用程序敏感配置。在虛擬環境中處理配置文件安裝的Pythonic方法?

我的virtualenv可能是一個路徑,例如:

/opt/appname/venv 

我相信,我希望能夠安裝默認的配置文件的應用程序成功執行之前修改的用戶。

默認的例子可能被安裝到:

/etc/appname/config.sample 

是,如果我在一個virtualenv中,setup.py/setuptools的真的不處理安裝到一個全球性的路徑(據我的問題知道)。

什麼是最好的pythonic方式來處理這種相當常見的情況?

+0

你的問題有點含糊。你在說什麼全球路徑。一個具體的例子會非常有用。請[編輯]你的問題並提供這些信息。 – martineau

+0

我不認爲它是模糊的。一個具體的例子是不可能的,因爲它是pythonic風格的問題。 –

+0

您是否考慮過替代安裝的選項? https://docs.python.org/3/install/index.html#alternate-installation – creativeChips

回答

1

假定配置文件改變虛擬環境變量,這就是爲什麼它要推出的虛擬環境中之前被修改,那麼你可以修改位於./venv/bin完成這一任務的activate bash腳本。所以,如果你想從一個配置文件中添加一個全球性的路徑,然後在activate最後一行可能是:

MY_GLOBAL_PATH=<program that looks into config file and returns path> 

那麼虛擬環境可以被激活,因爲它通常會:

source ./venv/bin/activate 
+0

不能解決問題。 –

+0

我喜歡讓我的Python應用程序儘可能地保持原有的文件系統(包括配置文件),並使用環境變量。當使用虛擬envs並使用'os.getenv'方法時,我發現這是一個非常乾淨的範例。我通過使用由pyvenv創建的'VIRTUAL_ENV'變量來實現此目的,以通過項目目錄查找文件,或者通過額外的bash變量腳本來獲取包含項目目錄之外的配置文件的位置。如果你想使用更少的bash和更多的python,你可以使用'os'模塊來設置和獲取環境變量。 –

+0

cfm允許乾淨地以集中管理的方式部署配置文件。特別有用的是像加密的數據庫/保險庫這樣的實用程序,用於動態/安全地記錄API密鑰等。環境變量可能很危險,因爲命名空間衝突更容易。恕我直言。 –

-1

有你嘗試使用Python的site-specific configuration選項?在我看來,像.pth文件和sitecustomize.py文件可能會有所幫助。
另請參閱:Accepted answer on "Using .pth files"

如果沒有更具體的「全球路徑」例子的更具體的例子 - 即使這在一定程度上這是一個一般性的問題,給出更精確的細節可能很難做到。

相關問題