簡介

在撰寫程式時,有些比較敏感的資訊是不適合直接放在程式碼中的。

為了解決這個問題,很多的語言和框架都採用了 .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"))

參考資料

PyPI: python-dotenv

Last modified: 2023-02-25

Author

Comments

Write a Reply or Comment

Your email address will not be published.