一日一技:如何正確管理項目的環境變量

      網友投稿 770 2025-03-31

      一日一技:如何正確管理項目的環境變量


      在之前的文章:開發經驗:如何正確設置開發環境與生產環境的配置參數中,我提到了把項目的開發環境與生產環境的配置文件分開管理這種方式。

      實際上,項目的配置信息,除了用配置文件以外,還可以使用環境變量來進行設置。有一些項目,他們不用配置文件設置敏感信息,因為害怕一不小心就把敏感信息發送到了Github上面。而是把所有敏感信息設置到環境變量里面。代碼直接從環境變量讀取這些信息。

      在Python里面,讀取環境變量非常簡單:

      import os value = os.getenv('變量名')

      假設有一個項目,它運行的時候需要連Redis/MongoDB/Kafka/ElasticSearch。配置信息有五六十條。那么,它可能需要設置很多的環境變量,像下面這樣:

      export REDIS_HOST=xxx export REDIS_PORT=xxx export REDIS_PASSWORD=xxx export MONGODB_URI=xxxx export KAFKA_SERVER=xxx ...

      這樣做的好處顯而易見,一旦設置好環境變量以后,每次啟動程序只需要直接運行代碼就可以了。當你在開發機上面運行,它自動就連開發環境;當你在生產環境來運行,它自動就會連生產環境。

      但壞處也很明顯,如果你有多個環境,每次重新修改環境變量就非常麻煩。一般來說,生產環境只有一個,但你還有開發環境、測試環境、預發布環境…。其中生產環境的配置參數你是拿不到的,但另外幾個環境的參數你是可以拿到的。假設你現在的代碼在開發機運行正常,但是放到測試環境就失敗了。那么你想在開發機使用測試環境的參數來調試代碼。這個時候你就必須一個一個重新設置環境變量,這就非常麻煩。

      但好在Python已經有一個用來管理項目環境變量的第三方庫python-dotenv[1]。

      這個庫使用起來非常簡單,只需要兩行代碼加一個文件。

      首先,在項目的根目錄創建一個文件,叫做.env。使用Windows的同學可能無法做到,因為Windows使用正常方法沒有辦法創建一個點開頭的文件。但是Linux和macOS可以正常創建。例如:

      NAME=kingname SALARY=9999999 ADDRESS=上海

      然后,在項目入口文件的頂部,增加兩行代碼,如下圖所示:

      from dotenv import load_dotenv load_dotenv()

      這樣就完成了。你原來讀取環境變量的代碼不需要做任何修改,直接讀取環境變量就可以了,如下圖所示:

      從圖中可以看到,當我們在Shell里面直接執行echo $ 變量名的時候,顯示的是空,說明這個環境變量是沒有設置的。當我們運行項目代碼的時候,python-dotenv會自動讀取.env文件,然后在項目里面設置環境變量。

      如果僅僅是讀文件,那我當然不會特意介紹它。它還有兩個更好用的功能。

      如果環境變量已經存在,那么會以已經存在的環境變量為準,.env中對應的項自動失效:

      也就是說,這個.env文件,你甚至可以直接上傳到生產環境。由于生產環境已經設置好了對應的配置參數,所以.env文件里面的內容自動失效。

      第二個好用的功能,是.env里面還可以復用同一個變量。例如,我的項目有一個域名會在多個地方用到:

      EMAIL=contact@kingname.info ENTRYPOINT=https://kingname.info/api REDIS_HOST=redis.kingname.info KAFKA_SERVER=kafka.kingname.info ...

      如果有一天我要修改這個域名,那么所有配置都需要修改。但是.env可以復用變量:

      DOMAIN=kingname.info EMAIL=contact@${DOMAIN} ENTRYPOINT=https://${DOMAIN}/api REDIS_HOST=redis.${DOMAIN} KAFKA_SERVER=kafka.${DOMAIN}

      這樣一來,當我要改域名的時候,只需要修改DOMAIN的值就可以了。

      關于python-dotenv的更多使用說明,大家可以閱讀參考文檔里面的Readme。

      參考文獻

      Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:生產制造項目管理制度(生產制造企業管理制度)
      下一篇:美國apaas(美國A牌噴涂機)
      相關文章
      日产亚洲一区二区三区| 国产亚洲成av片在线观看 | 亚洲激情在线观看| 日本亚洲国产一区二区三区| 亚洲成?Ⅴ人在线观看无码| 亚洲精品国产精品| 亚洲日韩国产一区二区三区在线| 亚洲乱码在线观看| 亚洲 欧洲 视频 伦小说| 亚洲AV无码乱码麻豆精品国产| 亚洲国产美女精品久久久久| 亚洲欧洲日产专区| 亚洲伊人色一综合网| 亚洲av无码一区二区三区天堂古代| 亚洲无砖砖区免费| 亚洲一区二区三区在线网站 | 亚洲av无码不卡私人影院| 婷婷国产偷v国产偷v亚洲| 亚洲AV成人潮喷综合网| 亚洲国产成人乱码精品女人久久久不卡| 全亚洲最新黄色特级网站| 亚洲国产综合精品一区在线播放| 亚洲另类少妇17p| 亚洲一区二区三区自拍公司| 亚洲处破女AV日韩精品| 亚洲AV人人澡人人爽人人夜夜| 在线观看免费亚洲| 亚洲AV成人无码网站| 老子影院午夜伦不卡亚洲| 亚洲AⅤ永久无码精品AA| 国产成人亚洲精品影院| 亚洲女久久久噜噜噜熟女| 亚洲AV无码一区二区乱孑伦AS| 日韩亚洲AV无码一区二区不卡| 亚洲激情电影在线| 亚洲色偷偷色噜噜狠狠99| 国产精品亚洲小说专区| 久久久久亚洲AV综合波多野结衣| 亚洲欧洲无码AV电影在线观看 | 亚洲精品电影天堂网| 亚洲AV一二三区成人影片|