Table of Contents
簡介
在撰寫程式時,有些比較敏感的資訊是不適合直接放在程式碼中的。
為了解決這個問題,很多的語言和框架都採用了 .env
設定檔的解決方案,將敏感的帳密、主機位址或連線金鑰集中放在這個檔案中, 並在 .gitignore
中加入 .env 這筆資料,避免這個檔案被 comit 到專案中 ,然後我們會再加入 .env.example
這個檔案以供使用者參考填入設定值。
Python 對於這個解決方案的實作就是 python-dotenv 這個模組。
這個模組提供了一些簡便的方式讓我們來操作 .env
這個設定檔。
安裝
pip install python-dotenv
基本用法
假設我們已經有個 .env 設定檔,其內容如下:
SERVER_IP="192.168.0.1"
使用 get_key 取值
我們可以使用以下的方式取得設定檔的值
from dotenv import get_key
server_ip = get_key(".env", "SERVER_IP")
print(server_ip)
使用 load_dotenv 取值 (常見用法)
這是另外一個方法,可以配合 os 模組的 getenv(),更方便直覺的取值,這也是比較常見的用法。
以下的程式碼位於與設定檔 (.env) 相同的目錄
dotenv_01.py
from dotenv import load_dotenv
import os
load_dotenv()
server_ip = os.getenv("SERVER_IP")
print(server_ip)
使用 set_key 新增或變更設定值
from dotenv import get_key, set_key
print(get_key(".env", "SERVER_IP"))
set_key(".env", "SERVER_IP", "192.168.100.100")
print(get_key(".env", "SERVER_IP"))
set_key(".env", "SERVER_NAME", "local.test")
print(get_key(".env", "SERVER_NAME"))
此時 .env 檔案的內容也會變更
SERVER_IP='192.168.100.100'
SERVER_NAME='local.test'
進階方法
指定設定檔檔案名稱
假設我們的設定檔檔名為 .env.database,內容如下:
DB_NAME="test"
DB_USER="kirin"
from dotenv import load_dotenv
import os
load_dotenv(".env.database")
print(os.getenv("DB_USER"))
多個設定檔
我們會使用 dotenv_values 來取代 load_dotenv
from dotenv import dotenv_values
configs = {
**dotenv_values(".env"),
**dotenv_values(".env.database"),
}
print(configs.get("SERVER_IP"))
print(configs.get("DB_USER"))
如果想把環境變數也加入,可以這麼做
from dotenv import dotenv_values
import os
configs = {
**dotenv_values(".env"),
**dotenv_values(".env.database"),
**os.environ,
}
print(configs.get("SERVER_IP"))
print(configs.get("DB_USER"))
print(configs.get("HOME"))
Comments