【💊 Python的解憂錦囊】既能管理環境變數又能驗證的pydantic

更新於 發佈於 閱讀時間約 6 分鐘
raw-image

當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧!


需安裝的套件

pip install pydantic
pip install pydantic-settings

關鍵的檔案設計

raw-image

.env

這個檔案主要是環境變數的配置檔案, 我們有哪些配置開放給安裝人員配置的入口都在這裡, 大致格式如下:

DATABASE_URL=postgresql://user:password@localhost:5432/mydb
DEBUG=true



settings.py

這隻檔案主要設計我們在程式裡面會使用到的配置是哪些, 並設計預設值與驗證方式。

from pydantic_settings import BaseSettings

class Settings(BaseSettings):
database_url: str
debug: bool

class Config:
"""<https://docs.pydantic.dev/latest/concepts/pydantic_settings/#usage>
"""
# 指定 .env 文件
env_file = ".env"
env_file_encoding = "utf-8"



run.py

我們使用這隻檔案來驗證一下我們的配置檔:

from settings import Settings

settings = Settings()

print(settings.database_url) # 輸出: postgresql://user:password@localhost:5432/mydb
print(settings.debug)



🤦‍♂️ 當不小心配錯時…

我們的.env這樣設定, DEBUG的部份被改成非bool的資料型態:

DATABASE_URL=postgresql://user:password@localhost:5432/mydb
DEBUG=unknow


執行後發生驗證錯誤:

Traceback (most recent call last):
File "/home/xxx/下載/test/run.py", line 3, in <module>
settings = Settings()
^^^^^^^^^^
File "/home/xxx/anaconda3/lib/python3.11/site-packages/pydantic_settings/main.py", line 167, in __init__
super().__init__(
File "/home/xxx/anaconda3/lib/python3.11/site-packages/pydantic/main.py", line 214, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pydantic_core._pydantic_core.ValidationError: 1 validation error for Settings
debug
Input should be a valid boolean, unable to interpret input [type=bool_parsing, input_value='unknow', input_type=str]
For further information visit <https://errors.pydantic.dev/2.10/v/bool_parsing>



結語

開放給用戶配置固然重要, 但我們很難保證人工失誤的狀況, 因此做一點驗證總是好事, 避免不熟悉系統的維運人員配置錯誤造成難以挽回的損失, 因此本章節對於系統即將上線的朋友來說非常的有幫助, 關於這部份如果您有更好的作法也歡迎下方留言討論, 讓我們互相學習與討論。

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
129會員
286內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
2025/01/01
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有說明如何使用uvicorn來啟動FastAPI服務, 假設今天我們的API是一個CPU密集型的運算服務時, 通常我們會希望開啟多個行程來幫忙處理, 那麼大致上的撰寫方式會像這樣: app = FastAPI( ti
Thumbnail
2025/01/01
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有說明如何使用uvicorn來啟動FastAPI服務, 假設今天我們的API是一個CPU密集型的運算服務時, 通常我們會希望開啟多個行程來幫忙處理, 那麼大致上的撰寫方式會像這樣: app = FastAPI( ti
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
pip和pipenv都是常用的Python套件管理工具,但它們的用途和運作方式略有不同。讓我們來看看它們的差異...
Thumbnail
pip和pipenv都是常用的Python套件管理工具,但它們的用途和運作方式略有不同。讓我們來看看它們的差異...
Thumbnail
教大家如何使用 pip 備份 python 虛擬環境,並移植到其他電腦之中,詳細圖文解說
Thumbnail
教大家如何使用 pip 備份 python 虛擬環境,並移植到其他電腦之中,詳細圖文解說
Thumbnail
首先安裝 python,依照 官網 的指示,下載正確的版本並執行就可,重點在以下。 虛擬環境的管理平台許多人使用 anaconda,許多教 python 的課程第一堂就是不管三七二十一先安裝再說,但我用了一陣子之後覺得它實在太笨重了,早有掙脫的想法,欣見原生的 python 已經具有虛擬環境管理模
Thumbnail
首先安裝 python,依照 官網 的指示,下載正確的版本並執行就可,重點在以下。 虛擬環境的管理平台許多人使用 anaconda,許多教 python 的課程第一堂就是不管三七二十一先安裝再說,但我用了一陣子之後覺得它實在太笨重了,早有掙脫的想法,欣見原生的 python 已經具有虛擬環境管理模
Thumbnail
pip下載與安裝的過程太久嗎? 網路斷線怎麼辦? 內網需求怎麼達成?…, 相信這幾個心中的疑問在我們開發Python的過程中都會遇到, 尤其是一個完整的套件需要依賴上千百種的額外套件時, 這個過程真的是非常久啊! 難道我們不能加速嗎? 看到這篇的您非常的幸運, 我們會實際教您如何架設本地端的Pyth
Thumbnail
pip下載與安裝的過程太久嗎? 網路斷線怎麼辦? 內網需求怎麼達成?…, 相信這幾個心中的疑問在我們開發Python的過程中都會遇到, 尤其是一個完整的套件需要依賴上千百種的額外套件時, 這個過程真的是非常久啊! 難道我們不能加速嗎? 看到這篇的您非常的幸運, 我們會實際教您如何架設本地端的Pyth
Thumbnail
  環境佈置很重要!!所以按照這樣的方法下去安裝未來使用的時候才不會很麻煩,而且python會有很多外來模組要安裝,因此安裝路徑一定要設定好,未來找尋的時候才找的到,版本的差異沒有調整好也有可能用到最後有些會出現各種錯誤。所以環境佈置這真的很重要!!很重要!!很重要!!
Thumbnail
  環境佈置很重要!!所以按照這樣的方法下去安裝未來使用的時候才不會很麻煩,而且python會有很多外來模組要安裝,因此安裝路徑一定要設定好,未來找尋的時候才找的到,版本的差異沒有調整好也有可能用到最後有些會出現各種錯誤。所以環境佈置這真的很重要!!很重要!!很重要!!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News