日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

8s yaml 配置生成_cfg4py:一个严肃的Python配置模块应有的风格-层级式、部署环境自适应、自动补全...

發布時間:2024/4/17 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8s yaml 配置生成_cfg4py:一个严肃的Python配置模块应有的风格-层级式、部署环境自适应、自动补全... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于如何配置一個Python程序,如果你還停留在使用ini,json,yaml,xml等文件格式之爭,或者還在為使用哪個庫來加載配置糾結,只能說明你還沒有開發過一個嚴肅認真的大型Python應用程序。

關于Python程序讀取配置,一個嚴肅認真的大型程序,真正面臨的問題其實是這些:

  • 不小心寫錯了一個配置項,卻沒有語法檢查工具來幫助檢查,直到程序崩潰,才發現是配置項寫錯了。
  • 部署時要在不同的機器間不斷地copy/paste配置文件,而且還要逐一修改。比如開發完成后,測試人員要拿著開發給的配置文件,在測試機器上按照測試環境進行修改,運維人員在部署時,也需要修改配置文件,而“修改”這個動作又是無法被測試覆蓋的。
  • 賬號和口令寫在配置文件中,有可能在分享源文件的過程中泄漏出去。特別是在項目是開源的、或者未來可能開源的情況下。
  • 搭建新工程時,要把時間花在配置諸如logging, database, caceh, message queue這些服務上,而不是真正有效的業務邏輯上。
  • 服務是由許多臺負載均衡的服務器來完成的。如果使用文件型的配置,在修改配置時,就需要登錄到這些機器上逐一修改;如果使用數據庫來進行中心化配置,但有時為了故障排除或者其它原因,又需要對某幾臺機器進行小量的配置修改。
  • 更改配置必須重啟服務程序,從而使得服務中斷。
  • 現在, cfg4py為上述問題提供了一個完整的解決方案。

    cfg4py是一個層次化(cascading design)、部署環境自適應(Adaptive deployment)的配置系統。 它支持配置中心化,但又能通過本地文件覆蓋全局配置;為不同的環境(開發、測試和生產環境)準備了不同的配置文件,相同的配置項提取在defaults.yaml中,使得部署過程中幾乎無須修改。

    它還提供了模板功能,可以供在項目創建之初,快速配置各種服務和日志模塊。

    它通過將yaml文件中的配置項編譯成為Python class,從而使得你可以享受到代碼自動補全的便捷,代碼重構也成為可能:現在你可以象重命名普通變量一樣來重命名一個配置項了!

    此外,它還提供了環境變量宏,使用cfg4py,你只需要在配置文件中引用定義賬號、密碼的環境變量,程序就能最終獲得這些信息,而無須在源碼和配置文件中暴露這些秘密。

    模板

    當你新建一個Python工程時,你可以在安裝了cfg4py的環境下,運行 python scaffold命令,按照提示將對應的配置項加入你的工程中:

    Auto-complete (自動補全)

    當你寫好配置后,在命令行下運行cfg4py build,這樣就會生成一個名為cfg4py_auto_gen.py的文件,將它導入到工程中,就可以使用代碼自動提示了:

    當然,每次新增或者修改了配置文件時,都需要做一次build。如果你需要對配置文件進行重構,現在變得很簡單,因為所有的配置項目都變成了對象的一個屬性,所以,如果你在開發過程中,突然覺得某個配置項的名稱不順口,沒關系,象重命名一個普通變量一樣來重構它,所以引用這個配置項的地方,都將自動更新!

    使用宏來讀取環境變量

    使用宏來讀取環境變量有兩個用處,一是不在任何文件中配置賬號和密碼。二是你也可以將因機器差異,而需要進行不同配置的項放進環境變量,從而使得配置文件在不同的機器上完全一致,無需修改。這樣會減少很多部署的工作,避免一些錯誤。

    比如,你申請了一個第三方的服務賬號,需要配置在程序中,你當然不希望將賬號和密碼泄露出去。現在,你可以機器上定義環境變量:

    export vendor_account=my_account export vendor_password=my_password

    然后在你的配置文件中引用它們:

    # in your configuration file, for example: defaults.yaml third_party_service:account: ${vendor_account}password: ${password} # this is how you could access these secrets: cfg = cfg4py.init(...) print(cfg.third_party_service.account, cfg.thired_party_service.password)

    甚至開發團隊之間都不應該共享這些賬號。現在,這些賬號都配置為本機的環境變量,從而避免了泄漏。

    Cascading design (多層設計)

    cfg4py允許你通過遠程的中央數據源來統一進行配置。

    如果這個中央數據源是redis,那么只要指定redis連接和配置項的鍵值,cfg4py將自動為你加載這些配置(按照你指定的refresh period)。注意cfg4py只支持yaml格式,所以即使這些配置不是寫在文件中,而是在cache中,它們也應該是yaml格式。

    如果中央數據源是其它類型的數據庫,則你需要自己實現一個RemoteConfigFetcher, 并實現它的fetcher接口。

    class MyConfigFetcher(RemoteConfigFetcher):def __init__(self, *arg, **kwargs):def fetch(self) -> str:# fetch settings from database, decode as string, and returnpass

    然后調用config_remote_fetcher,讓cfg4py加載這個fetcher:

    fetcher = MyConfigFetcher() cfg4py.config_remote_fetcher(fetcher, interval = 500)

    在上述例子中,cfg4py每5分鐘會從中央數據源更新一次配置。 如果個別機器需要有自己的配置,則只需要在本地寫一個配置文件,改寫部分配置即可。cfg4py會自動完成配置的合并和改寫。

    Adaptive deployment (部署環境自適應)

    一個典型的cfg4py配置文件系統共有4個配置文件: 1. defaults.yaml 2. dev.yaml 3. test.yaml 4. production.yaml

    通過cfg4py scaffold命令初始化后,你的工程中就會出現這些文件。然后你需要配置當前機器的角色環境變量:

    export __cfg4py_server_role__=DEV

    這個變量名很長,不容易記憶。但是你可以在控制臺下通過cfg4py set-server-role來查看幫助,這個命令會顯示跟上面一樣的提示。

    如果這個命令也太長,不容易記憶?你只要記住cfg4py就好,cfg4py提供了命令行提示,連續敲兩個tab,就會提示你所有的命令:

    其它功能

    更新配置是熱更新。如果配置是從本地文件加載的,更新將是實時更新;如果配置是遠程加載的,那么由你定義的更新間隔來決定。

    忘記該怎么設置pip源或者conda源?試試cfg4py hint命令吧。

    這么好的模塊,怎么以前沒有發現它呢?不錯,這是個新開發出來的庫,不過質量應該到了可以使用的階段了,測試覆蓋率也達到了94%。

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的8s yaml 配置生成_cfg4py:一个严肃的Python配置模块应有的风格-层级式、部署环境自适应、自动补全...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。