如何在Python项目中做多环境配置(环境变量使用.env文件)
作者:程序猿林仔
实际工程开发中常常会对开发、测试和生产等不同环境配置不同的数据库环境,传统方式可以通过添加不同环境的配置文件达到部署时的动态切换的效果,这篇文章主要给大家介绍了关于如何在Python项目中做多环境配置的相关资料,环境变量使用.env文件,需要的朋友可以参考下
01 需求场景
在Python项目中,环境变量的配置通常会使用.env
文件进行,但有时,我们的一个Python项目需要区分不同的运行环境,例如本地开发环境、测试环境、开发环境。本文就讲讲如何做多环境的配置。
假设我们有三个环境:dev, test, pro。分别对应本地开发环境、测试环境、生产环境,这些环境中有的环境变量是相同的,有的是每个环境特有的。
02 分别建立.env文件
创建四个.env
文件,分别是:
.env
存放通用的环境变量.env.dev
对应开发环境,存放开发环境中特有的环境变量.env.test
对应测试环境.env.pro
对应生产环境
03 指定当前的环境
一种方式是在Linux系统中编辑~/.bashrc
文件来设置环境变量:
vim /root/.bashrc # 写入:ENV_STATE=test # 保存并退出后刷新 source ~/.bashrc
如果是使用.gitlab-ci.yml
,可以这样设置:
# .gitlab-ci.yml ... workflow: rules: - if: $CI_COMMIT_BRANCH == 'dev' # 测试环境runner variables: DEPLOY_VARIABLE_TAG: "..." ENV_STATE: "test" # 添加这一行添加环境状态为test when: always - if: $CI_COMMIT_BRANCH == 'main' # 生产环境runner variables: DEPLOY_VARIABLE_TAG: "..." ENV_STATE: "pro" # 添加这一行添加环境状态为pro when: always - when: never # 在上述两种情况之外 never ... deploy: ... script: # 在docker run命令中加入环境变量的配置 - docker run ... -e ENV_STATE=$ENV_STATE ... ...
04 在代码中加载对应的环境变量文件
在需要加载环境变量的地方,使用dotenv
来加载环境变量。
(建议在一个文件中对环境变量进行统一集中管理,这里我专门新建了一个config.py
的文件用于导入环境变量)
"""config.py""" import os import dotenv # 首先获取当前的环境状态(记录在.gitlab-ci.yml中)如果获取不到则默认使用dev开发环境 env_state = os.getenv("ENV_STATE", "dev") # 先加载通用的环境变量 dotenv.load_dotenv() # 加载特定环境的环境变量 # 第一个参数如果获取不到对应文件需要写成绝对路径 借助Path(__file__)获取路径 # 第二个参数override=True表示当已存在同名环境变量时 用特定的环境变量值进行覆 dotenv.load_dotenv(f".env.{env_state}", override=True)
附:.env文件是如何写入环境变量的
我们在vue项目开发中,经常使用到环境变量去区分开发环境和生产环境,常见的
vue-cli下 : process.env=='development' vite中 import.mea.env.MODE=='development'
有时,我们也可以配置我们的环境变量,比如:在根路径下添加.env文件
或者.dev.env 或者pro.env 去区分开发环境和生产环境,我们配置的环境变量如何写入的呢?
思路整理
简单来讲,我们只需要将需要的环境变量写入process.env这个对象下面即可
- 读取根目录下的.env文件,解析成对象–parser
- 遍历对象,写入环境变量 --writeEnv
实现
在项目根目录新建.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; };
写入环境变量
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())) //执行 console.log(process.env)
结果展示
控制台展示如下:
总结
到此这篇关于如何在Python项目中做多环境配置的文章就介绍到这了,更多相关Python项目多环境配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!