如何在Python項(xiàng)目中做多環(huá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ā)送和接收信息的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07
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的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06
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)控與分析,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識(shí)別,幫助你快速掌握YOLOv5車牌識(shí)別技能,需要的朋友可以參考下2023-04-04
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郵件發(fā)送的相關(guān)技巧,需要的朋友可以參考下2015-05-05

