欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2024年06月17日 09:18:41   作者:程序猿林仔  
實(shí)際工程開發(fā)中常常會(huì)對(duì)開發(fā)、測(cè)試和生產(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 需求場(chǎng)景

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

假設(shè)我們有三個(gè)環(huán)境:dev, test, pro。分別對(duì)應(yīng)本地開發(fā)環(huán)境、測(cè)試環(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)測(cè)試環(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' # 測(cè)試環(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)境變量如何寫入的呢?

思路整理

簡(jiǎ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正則表達(dá)式實(shí)現(xiàn)自動(dòng)化編程

    python正則表達(dá)式實(shí)現(xiàn)自動(dòng)化編程

    這篇文章主要介紹了python正則表達(dá)式實(shí)現(xiàn)自動(dòng)化編程,re模塊的compile()方法是構(gòu)成正則表達(dá)式的方法,向compile()傳入一個(gè)字符串表示正則表達(dá)式,該方法返回一個(gè)Regex模式的對(duì)象,需要的朋友可以參考下
    2023-01-01
  • Python3 搭建Qt5 環(huán)境的方法示例

    Python3 搭建Qt5 環(huán)境的方法示例

    這篇文章主要介紹了Python3 搭建Qt5 環(huán)境的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Jmeter中JSR223設(shè)置變量方式

    Jmeter中JSR223設(shè)置變量方式

    本文主要介紹了JMeter的幾種常用變量設(shè)置方式,特別對(duì)JSR223設(shè)置變量進(jìn)行了詳細(xì)解釋,JSR223是Java規(guī)范請(qǐng)求,可以向Java平臺(tái)增添新的API和服務(wù),JSR223Sampler可以使用JSR223腳本代碼執(zhí)行創(chuàng)建/更新變量所需的示例或一些計(jì)算
    2024-10-10
  • python自動(dòng)從arxiv下載paper的示例代碼

    python自動(dòng)從arxiv下載paper的示例代碼

    這篇文章主要介紹了python自動(dòng)從arxiv下載paper的示例代碼,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-12-12
  • Python使用pyinstaller打包spec文件的方法詳解

    Python使用pyinstaller打包spec文件的方法詳解

    PyInstaller是一個(gè)用于將Python腳本打包成獨(dú)立的可執(zhí)行文件的工具,使用PyInstaller您可以將Python應(yīng)用程序轉(zhuǎn)換為可執(zhí)行文件,而無需用戶安裝Python解釋器或任何額外的庫,這篇文章主要給大家介紹了關(guān)于Python使用pyinstaller打包spec文件的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Python練習(xí)之ORM框架

    Python練習(xí)之ORM框架

    這篇文章主要介紹了Python練習(xí)之ORM框架,通過使用SQLObject框架操作MySQL數(shù)據(jù)庫展開文章主題詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-06-06
  • django formset實(shí)現(xiàn)數(shù)據(jù)表的批量操作的示例代碼

    django formset實(shí)現(xiàn)數(shù)據(jù)表的批量操作的示例代碼

    這篇文章主要介紹了django-formset實(shí)現(xiàn)數(shù)據(jù)表的批量操作的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Python字典中items()函數(shù)案例詳解

    Python字典中items()函數(shù)案例詳解

    這篇文章主要介紹了Python字典中items()函數(shù)案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Centos7 Python3下安裝scrapy的詳細(xì)步驟

    Centos7 Python3下安裝scrapy的詳細(xì)步驟

    這篇文章主要介紹了Centos7 Python3下安裝scrapy的詳細(xì)步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Python實(shí)現(xiàn)堆排序的方法詳解

    Python實(shí)現(xiàn)堆排序的方法詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)堆排序的方法,結(jié)合實(shí)例形式詳細(xì)分析了堆排序的原理,實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-05-05

最新評(píng)論