如何在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项目多环境配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
这篇文章主要介绍了如何用Pycharm2020.1.1配置远程连接,分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2020-08-08使用相同的Apache实例来运行Django和Media文件
这篇文章主要介绍了使用相同的Apache实例来运行Django和Media文件,Django是最具人气的Python web开发框架,需要的朋友可以参考下2015-07-07python合并RepeatMasker预测结果中染色体的overlap区域
这篇文章主要为大家介绍了python合并RepeatMasker预测结果中染色体的overlap区域实现示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-07-07Python Selenium无法打开Chrome浏览器处理自定义浏览器路径的问题及解决方法
Python Selenium控制Chrome浏览器的过程中,由于安装的Chrome浏览器的版本找不到对应版本的驱动chromedriver.exe文件,下载了小几个版本号的驱动软件都无法正常使用,下面通过本文介绍Python Selenium无法打开Chrome浏览器处理自定义浏览器路径的问题,需要的朋友可以参考下2024-08-08
最新评论