如何在Python項(xiàng)目中做多環(huá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)化編程,re模塊的compile()方法是構(gòu)成正則表達(dá)式的方法,向compile()傳入一個(gè)字符串表示正則表達(dá)式,該方法返回一個(gè)Regex模式的對(duì)象,需要的朋友可以參考下2023-01-01python自動(dòng)從arxiv下載paper的示例代碼
這篇文章主要介紹了python自動(dòng)從arxiv下載paper的示例代碼,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-12-12Python使用pyinstaller打包spec文件的方法詳解
PyInstaller是一個(gè)用于將Python腳本打包成獨(dú)立的可執(zhí)行文件的工具,使用PyInstaller您可以將Python應(yīng)用程序轉(zhuǎn)換為可執(zhí)行文件,而無需用戶安裝Python解釋器或任何額外的庫,這篇文章主要給大家介紹了關(guān)于Python使用pyinstaller打包spec文件的相關(guān)資料,需要的朋友可以參考下2024-08-08django 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-12Centos7 Python3下安裝scrapy的詳細(xì)步驟
這篇文章主要介紹了Centos7 Python3下安裝scrapy的詳細(xì)步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03