安裝開發環境,或是架設Flask Web Server時,常常會用到環境變數,當時對其一知半解,而這篇會對環境變數做一個完整的介紹,並用python的dotenv,直接讀取存有環境變數的檔案,就不須每次執行程式前都需要手動載入。
1. 什麼是環境變數?
變數:指的是一個抽屜,裝著某些資料
環境變數:就是在該Terminal內,會有一個Terminal專屬的抽屜,在該Terminal都可以存取的資料,而當Terminal關閉時,所設定的環境變數也會消失
系統環境變數:會有個公開的抽屜,在系統內都可以取用資料,設定後,任何一個Terminal都可以存取。例如每個Terminal打開時,都會有一些指令可以使用,那些指令其實都是對應到一個執行檔,當使用者輸入指令後,Terminal會查詢系統環境變數,並執行對應的執行檔。
1.1 Windows及Ubuntu設定環境變數的方式
以下指令是,設定名為zavier的環境變數,值為talk,並印出zavier這個環境變數,再將zavier設為空值,也就是刪除環境變數,再印出,讀者可以試試看。
Windows:
set zavier=talk
echo %zavier%
set zavier=
echo %zavier%
Ubuntu:
export zavier=talk
echo $zavier
export zavier=
echo $zavier
1.2 為什麼要用環境變數?
經由上述,可以理解環境變數如同程式的變數般,將變數存在Terminal或系統中,讓使用者隨時可以使用,使用環境變數的理由
- 便利性: 若將某執行檔加入系統環境變數後,就不需要每次使用時必須切換到該路徑才能執行
- 與程式解耦:可以將較隱私性的資料,儲存在Terminal中,這樣一來就不用將密碼或重要資訊等放在程式碼中,可以讓程式讀取環境變數並使用 (有些人會將重要資訊寫在程式碼中,很容易不小心就將重要資訊上傳至Github或是Gitlab,要移除還需費不少功夫)
2. Python dotenv 使用方式
根據前一章節的說明後,讀者現在會使用,且也知道為什麼要使用環境變數,但若每次執行程式都要手動設定一次環境變數,實在惱人,所以我們可以將環境變數放在環境檔案中,每次執行程式時透過dotenv讀取環境檔,就不須手動設定。
先在python環境下安裝python-dotenv,安裝完畢後準備一個名為.env的檔案,其中的格式,語法近似於ubuntu的bash語法,儲存了三個變數。
.env
main.py
load_dotenv()方法會直接讀取同位置的.env檔案,再透過os.getenv取得對應的環境變數
輸出結果如下,讀取後就得到了DOMAIN環境變數的數值
若有另外一個測試用的環境變數 test.env 需要載入
可以給定測試檔的路徑,若要覆蓋原本同樣名稱的環境變數,可以設定override為True
結果如下
如果只是想將環境變數以dict的格式取得,可以使用dotenv_values
會將環境變數載入至OrderedDict
), ('ROOT_URL', 'example.org/app')])
3. 結論
謝謝各位讀者看到這裡,以上介紹了python的dotenv讀取環境變數檔,可以讓變數與程式解耦,不須手動載入,也可以避免將敏感資料傳到Github上。
當有不同的環境時,例如開發、測試、產品,可以很清楚的紀錄並使用不同的環境變數,在Python Flask 2.0中,也預設當你有安裝python-dotenv時,會自動載入.env檔,之後的Flask系列,也會再次提到。
若你有任何覺得好用的套件或是任何建議,也歡迎您在下方留言告訴我以及分享給其他人唷
若你覺得文章對你很有幫助,歡迎在網頁右方填入你的email訂閱本站唷