如何在Python項目中做多環(huán)境配置(環(huán)境變量使用.env文件)
01 需求場景
在Python項目中,環(huán)境變量的配置通常會使用.env文件進行,但有時,我們的一個Python項目需要區(qū)分不同的運行環(huán)境,例如本地開發(fā)環(huán)境、測試環(huán)境、開發(fā)環(huán)境。本文就講講如何做多環(huán)境的配置。
假設(shè)我們有三個環(huán)境:dev, test, pro。分別對應(yīng)本地開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境,這些環(huán)境中有的環(huán)境變量是相同的,有的是每個環(huán)境特有的。
02 分別建立.env文件
創(chuàng)建四個.env文件,分別是:
.env存放通用的環(huán)境變量.env.dev對應(yīng)開發(fā)環(huán)境,存放開發(fā)環(huán)境中特有的環(huán)境變量.env.test對應(yīng)測試環(huán)境.env.pro對應(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 在代碼中加載對應(yīng)的環(huán)境變量文件
在需要加載環(huán)境變量的地方,使用dotenv來加載環(huán)境變量。
(建議在一個文件中對環(huán)境變量進行統(tǒng)一集中管理,這里我專門新建了一個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)境變量
# 第一個參數(shù)如果獲取不到對應(yīng)文件需要寫成絕對路徑 借助Path(__file__)獲取路徑
# 第二個參數(shù)override=True表示當(dāng)已存在同名環(huán)境變量時 用特定的環(huán)境變量值進行覆
dotenv.load_dotenv(f".env.{env_state}", override=True)附:.env文件是如何寫入環(huán)境變量的
我們在vue項目開發(fā)中,經(jīng)常使用到環(huán)境變量去區(qū)分開發(fā)環(huán)境和生產(chǎn)環(huán)境,常見的
vue-cli下 : process.env=='development' vite中 import.mea.env.MODE=='development'
有時,我們也可以配置我們的環(huán)境變量,比如:在根路徑下添加.env文件
或者.dev.env 或者pro.env 去區(qū)分開發(fā)環(huán)境和生產(chǎn)環(huán)境,我們配置的環(huán)境變量如何寫入的呢?
思路整理
簡單來講,我們只需要將需要的環(huán)境變量寫入process.env這個對象下面即可
- 讀取根目錄下的.env文件,解析成對象–parser
- 遍歷對象,寫入環(huán)境變量 --writeEnv
實現(xiàn)
在項目根目錄新建.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é)果展示
控制臺展示如下:

總結(jié)
到此這篇關(guān)于如何在Python項目中做多環(huán)境配置的文章就介紹到這了,更多相關(guān)Python項目多環(huán)境配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用pyinstaller打包spec文件的方法詳解
PyInstaller是一個用于將Python腳本打包成獨立的可執(zhí)行文件的工具,使用PyInstaller您可以將Python應(yīng)用程序轉(zhuǎn)換為可執(zhí)行文件,而無需用戶安裝Python解釋器或任何額外的庫,這篇文章主要給大家介紹了關(guān)于Python使用pyinstaller打包spec文件的相關(guān)資料,需要的朋友可以參考下2024-08-08
django formset實現(xiàn)數(shù)據(jù)表的批量操作的示例代碼
這篇文章主要介紹了django-formset實現(xiàn)數(shù)據(jù)表的批量操作的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12

