最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在Python項(xiàng)目中做多環(huán)境配置(環(huán)境變量使用.env文件)

 更新時(shí)間:2024年06月17日 09:18:41   作者:程序猿林仔  
實(shí)際工程開發(fā)中常常會(huì)對(duì)開發(fā)、測試和生產(chǎn)等不同環(huán)境配置不同的數(shù)據(jù)庫環(huán)境,傳統(tǒng)方式可以通過添加不同環(huán)境的配置文件達(dá)到部署時(shí)的動(dòng)態(tài)切換的效果,這篇文章主要給大家介紹了關(guān)于如何在Python項(xiàng)目中做多環(huán)境配置的相關(guān)資料,環(huán)境變量使用.env文件,需要的朋友可以參考下

01 需求場景

在Python項(xiàng)目中,環(huán)境變量的配置通常會(huì)使用.env文件進(jìn)行,但有時(shí),我們的一個(gè)Python項(xiàng)目需要區(qū)分不同的運(yùn)行環(huán)境,例如本地開發(fā)環(huán)境、測試環(huán)境、開發(fā)環(huán)境。本文就講講如何做多環(huán)境的配置。

假設(shè)我們有三個(gè)環(huán)境:dev, test, pro。分別對(duì)應(yīng)本地開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境,這些環(huán)境中有的環(huán)境變量是相同的,有的是每個(gè)環(huán)境特有的。

02 分別建立.env文件

創(chuàng)建四個(gè).env文件,分別是:

  • .env 存放通用的環(huán)境變量
  • .env.dev 對(duì)應(yīng)開發(fā)環(huán)境,存放開發(fā)環(huán)境中特有的環(huán)境變量
  • .env.test 對(duì)應(yīng)測試環(huán)境
  • .env.pro 對(duì)應(yīng)生產(chǎn)環(huán)境

03 指定當(dāng)前的環(huán)境

一種方式是在Linux系統(tǒng)中編輯~/.bashrc文件來設(shè)置環(huán)境變量:

vim /root/.bashrc
# 寫入:ENV_STATE=test
# 保存并退出后刷新
source ~/.bashrc

如果是使用.gitlab-ci.yml,可以這樣設(shè)置:

# .gitlab-ci.yml
...
workflow:
  rules:
    - if: $CI_COMMIT_BRANCH == 'dev' # 測試環(huán)境runner
      variables:
        DEPLOY_VARIABLE_TAG: "..."
        ENV_STATE: "test"  # 添加這一行添加環(huán)境狀態(tài)為test
      when: always
    - if: $CI_COMMIT_BRANCH == 'main' # 生產(chǎn)環(huán)境runner
      variables:
        DEPLOY_VARIABLE_TAG: "..."
        ENV_STATE: "pro"  # 添加這一行添加環(huán)境狀態(tài)為pro
      when: always
    - when: never  # 在上述兩種情況之外 never
...

deploy:
  ...
  script:
	# 在docker run命令中加入環(huán)境變量的配置
    - docker run ... -e ENV_STATE=$ENV_STATE ...
...

04 在代碼中加載對(duì)應(yīng)的環(huán)境變量文件

在需要加載環(huán)境變量的地方,使用dotenv來加載環(huán)境變量。

(建議在一個(gè)文件中對(duì)環(huán)境變量進(jìn)行統(tǒng)一集中管理,這里我專門新建了一個(gè)config.py的文件用于導(dǎo)入環(huán)境變量)

"""config.py"""
import os
import dotenv

# 首先獲取當(dāng)前的環(huán)境狀態(tài)(記錄在.gitlab-ci.yml中)如果獲取不到則默認(rèn)使用dev開發(fā)環(huán)境
env_state = os.getenv("ENV_STATE", "dev")
# 先加載通用的環(huán)境變量
dotenv.load_dotenv()
# 加載特定環(huán)境的環(huán)境變量
# 第一個(gè)參數(shù)如果獲取不到對(duì)應(yīng)文件需要寫成絕對(duì)路徑 借助Path(__file__)獲取路徑
# 第二個(gè)參數(shù)override=True表示當(dāng)已存在同名環(huán)境變量時(shí) 用特定的環(huán)境變量值進(jìn)行覆
dotenv.load_dotenv(f".env.{env_state}", override=True)

附:.env文件是如何寫入環(huán)境變量的

我們?cè)趘ue項(xiàng)目開發(fā)中,經(jīng)常使用到環(huán)境變量去區(qū)分開發(fā)環(huán)境和生產(chǎn)環(huán)境,常見的

vue-cli下 :
process.env=='development'
vite中
import.mea.env.MODE=='development'

有時(shí),我們也可以配置我們的環(huán)境變量,比如:在根路徑下添加.env文件
或者.dev.env 或者pro.env 去區(qū)分開發(fā)環(huán)境和生產(chǎn)環(huán)境,我們配置的環(huán)境變量如何寫入的呢?

思路整理

簡單來講,我們只需要將需要的環(huán)境變量寫入process.env這個(gè)對(duì)象下面即可

  • 讀取根目錄下的.env文件,解析成對(duì)象–parser
  • 遍歷對(duì)象,寫入環(huán)境變量 --writeEnv

實(shí)現(xiàn)

在項(xiàng)目根目錄新建.env文件

port=8080
url=10.10.0.0

讀取文件

const path = require("path");
const fs = require("fs");
function readFile (){
    const  parserPath= path.resolve(process.env(),'/.env')
    return fs.readFileSync(parserPath, "utf-8");
};

解析文件

function parse = (str){
  const obj = {};
  // prot=8080 url=10.10.0.0
  str.split("\n").forEach((item) => {
    if (item) {
      const [key, value] = item.split("=");
      obj[key] = value;
    }
  });
  return obj;
};

寫入環(huán)境變量

function writeEnv(obj) {
  Object.keys(obj).forEach(function (key) {
    if (!Object.prototype.hasOwnProperty.call(process.env, key)) {
      process.env[key] = obj[key];
    }
  });
}
writeEnv(parse(readFile())) //執(zhí)行
console.log(process.env) 

結(jié)果展示

控制臺(tái)展示如下:

總結(jié) 

到此這篇關(guān)于如何在Python項(xiàng)目中做多環(huán)境配置的文章就介紹到這了,更多相關(guān)Python項(xiàng)目多環(huán)境配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python Tcp協(xié)議發(fā)送和接收信息的例子

    python Tcp協(xié)議發(fā)送和接收信息的例子

    今天小編就為大家分享一篇python Tcp協(xié)議發(fā)送和接收信息的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python中的多進(jìn)程的創(chuàng)建與啟動(dòng)方式

    python中的多進(jìn)程的創(chuàng)建與啟動(dòng)方式

    這篇文章主要介紹了python中的多進(jìn)程的創(chuàng)建與啟動(dòng),python中的并發(fā)有三種形式,多進(jìn)程、多線程、協(xié)程,執(zhí)?并發(fā)任務(wù)的?的是為了提?程序運(yùn)?的效率,本文通過實(shí)例代碼詳細(xì)講解需要的朋友可以參考下
    2022-12-12
  • Python實(shí)現(xiàn)ping指定IP的示例

    Python實(shí)現(xiàn)ping指定IP的示例

    今天小編就為大家分享一篇Python實(shí)現(xiàn)ping指定IP的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python中的類與對(duì)象之描述符詳解

    Python中的類與對(duì)象之描述符詳解

    這篇文章主要介紹了Python中的描述符詳解,屬于Python學(xué)習(xí)過程中類與對(duì)象的基本知識(shí),需要的朋友可以參考下
    2015-03-03
  • linux 下selenium chrome使用詳解

    linux 下selenium chrome使用詳解

    這篇文章主要介紹了linux 下selenium chrome使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • PyHacker編寫指南引用Nmap模塊實(shí)現(xiàn)端口掃描器

    PyHacker編寫指南引用Nmap模塊實(shí)現(xiàn)端口掃描器

    這篇文章主要為大家介紹了PyHacker編寫指南Nmap模塊實(shí)現(xiàn)端口掃描,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(七)實(shí)時(shí)監(jiān)控與分析

    YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(七)實(shí)時(shí)監(jiān)控與分析

    這篇文章主要介紹了YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(七)實(shí)時(shí)監(jiān)控與分析,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識(shí)別,幫助你快速掌握YOLOv5車牌識(shí)別技能,需要的朋友可以參考下
    2023-04-04
  • 一篇文章教會(huì)你PYcharm的用法

    一篇文章教會(huì)你PYcharm的用法

    這篇文章主要介紹了Pycharm新手使用教程(圖文詳解),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Python namedtuple命名元組實(shí)現(xiàn)過程解析

    Python namedtuple命名元組實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Python namedtuple命名元組實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python實(shí)現(xiàn)給qq郵箱發(fā)送郵件的方法

    Python實(shí)現(xiàn)給qq郵箱發(fā)送郵件的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)給qq郵箱發(fā)送郵件的方法,涉及Python郵件發(fā)送的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

云和县| 荥阳市| 花莲市| 云南省| 蓬安县| 宜良县| 西青区| 宜川县| 青河县| 达尔| 百色市| 陕西省| 拜城县| 旅游| 金沙县| 蕉岭县| 江西省| 阿城市| 沧源| 当雄县| 平顶山市| 雷山县| 章丘市| 河北省| 乐安县| 邢台县| 高州市| 唐山市| 中山市| 和林格尔县| 衡南县| 长宁区| 新龙县| 桐城市| 西畴县| 溧水县| 鄄城县| 洛隆县| 和硕县| 双鸭山市| 易门县|