Python 第三方库 | python-dotenv

1. 简介

        在一些项目中,处于安全性的要求,一般不将密码,key等放入到配置文件中。然而这些代码又是上传在 git等平台上。为了方便管理。一般采用系统变量的方式来实现。从而实现配置和代码分开。

2. 安装

pip install python-dotenv

3. 使用


目录结构及代码

.
├── .env
└── demo.py

.env 内容

REDIS_HOST="127.0.0.1"
PWD="/home/wohu"


        你可以使用单词 export 作为每行的前缀,这将会使 python-dotenv 忽略该变量,但是你可以使用 source 命令运行该文件。

python-dotenv 可以用来修改 POSIX 系统的环境变量。

变量的值是按照下面列表中顺序取值:

  • 系统环境变量
  • .env 文件中定义的值
  • 默认值,如果有的话
  • 空字符串

确保引用其他变量时用大括号  { } 包围,就像 ${HOME},因为像 $HOME这样的字符串不会被认为是变量的引用。

demo.py 文件

from dotenv import load_dotenvload_dotenv()
redis_host = os.environ.get("REDIS_HOST")
pwd = os.environ.get("PWD")
print(redis_host)
print(pwd)

输出结果:

127.0.0.1
/home/wohu/project

最简单和最常见的用法是在应用程序启动时调用 load_dotenv,该方法从当前目录或其父目录中的 .env 文件或指定的路径加载环境变量,然后你可以调用 os.getenv 提供的与环境相关的方法。

load_dotenv 默认不会更新已经存在的配置项。推荐使用 override 参数,如下:

load_dotenv(override=True)

执行结果:

127.0.0.1
/home/wohu

可以看到用 .env 里面的 PWD 内容替换了系统环境变量 PWD

参数说明:

load_dotenv(dotenv_path=find_dotenv(), override=True)
  • dotenv_path: 指定 .env文件路径,当然如果不传该参数的话(默认为 None)也会自动调用dotenv.find_dotenv()去查找文件位置的,但是你的文件名如果不是 .env那就必须传递该参数。
  • override: 当 .env 文件中有变量与系统中原来的环境变量有冲突时,按照上面的取值顺序,默认使用系统变量,如果要用 .env中的变量覆盖系统变量,可以给 load_dotenv() 传递参数override=True。此时只是临时使用了 .env 中的变量值。
  • encoding: load_dotenv() 也可以传递 encoding 参数指定文件的编码方式。

更改 .env 文件名为 .myenv

.
├── .myenv
└── demo.py

默认就会找不到对应的 .myenv文件。需要我们指定路径如下:

load_dotenv(dotenv_path=".myenv", override=True)
# demo.py
from dotenv import load_dotenv, find_dotenv
from pathlib import Path  # Python 3.6+ only# 一、自动搜索 .env 文件
load_dotenv(verbose=True)# 二、与上面方式等价
load_dotenv(find_dotenv(), verbose=True)# 三、或者指定 .env 文件位置
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path, verbose=True)

一般来讲,将配置项单独放到一个文件中,后续可以 Import 这个文件来使用配置项。

原文链接:https://blog.csdn.net/wohu1104/article/details/128281466

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FX-数组的使用

1一维数组 1.1一维数组的创建和初始化 1.1.1数组的创建 //代码1 int arr1[10]; char arr2[10]; float arr3[1]; double arr4[20]; //代码2 //用宏定义的方式 #define X 3 int arr5[X]; //代码3 //错误使用 int count 10; int arr6[count];//数组时候可以正常创建&#xff1…

【十三】【算法分析与设计】二分查找(1)

704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4…

实时数仓的另一种构建方法starRocks的物化视图

一、 StarRocks是什么 StarRocks是一个分布式的、高性能的OLAP(联机分析处理)数据库,物化视图在StarRocks中具有重要作用。 二、 StarRocks物化视图能干啥 物化视图(Materialized Views)是数据库中的预先计算结果的存储。它们是由一个或多个基础表的聚合数据组成的,这…

win10笔记本在显示设置中不慎将主显示器禁用掉导致开机黑屏的解决方案

因为笔记本电脑的显示扩展接口有问题,所以在电脑开机之后,会误识别出几个不存在的扩展屏幕,所以我就想从显示设置中将这几个误识别出来的扩展屏幕禁用掉(不然鼠标总是移动到主屏幕边界之外的地方),在显示设…

2024年腾讯云GPU服务器价格表_1小时费用_一个月价格和一年优惠

腾讯云GPU服务器怎么收费?GPU服务器1小时多少钱?一个月收费价格表和一年费用标准,腾讯云百科txybk.com分享腾讯云GPU服务器GPU计算型GN10Xp、GPU服务器GN7、GPU渲染型 GN7vw等GPU实例费用价格,以及NVIDIA Tesla T4 GPU卡和V100详细…

【SZU计算机网络实验】实现流式视频传输

前言 一百年没有更新博客了,都怪开学一堆杂活(x 那就顺手把实验报告转到这边吧owo 本实验为SZU原创实验,实验开发团队的老师和助教们都很有耐心。。大赞,环境没配好去群里问是秒回的 相关资料: 实验文档&#xff…

突破编程_C++_C++11新特性(forward_list)

1 std::forward_list 的概述 1.1 什么是 std::forward_list? std::forward_list 是 C 标准模板库(STL)中的一个容器,它表示一个单向链表。相比于 std::list,std::forward_list 在存储和操作上更加简洁,从…

k8s详细教程

Kubernetes详细教程 1. Kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点…

JavaScript高级(十八)---进程和线程,宏任务和微任务

进程和线程 进程(process):计算机已经运行的程序,是操作系统管理程序的一种方式,我们可以认为,启动一个应用程序,就会默认启动一个进程(也可能是多个进程)。 线程&…

行业模板|DataEase制造行业大屏模板推荐

DataEase开源数据可视化分析平台于2022年6月发布模板市场(https://templates-de.fit2cloud.com),并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板,方便用户根据…

智能合约 之 ERC-721

ERC-721(Non-Fungible Token,NFT)标准 ERC-721是以太坊区块链上的一种代币标准,它定义了一种非同质化代币(Non-Fungible Token,NFT)的标准。NFT是一种加密数字资产,每个代币都具有独…

【计算机网络_网络层】IP协议

文章目录 1. IP的基本概念1.1 什么是IP协议1.2 为什么要有IP协议 2. IP的协议格式3. 网段划分(重要)3.1 为什么要进行网段划分3.2 网段划分的规则3.2.1 古老的划分方案3.2.2 现代的划分方案 4. 特殊的IP地址5. 解决IP地址的数量限制问题6. 私有IP和公网I…

深入浅出Reactor和Proactor模式

Reactor模式和Proactor模式是两种常见的设计模式,用于处理事件驱动的并发编程。它们在处理IO操作时有着不同的工作方式和特点。 对于到来的IO事件(或是其他的信号/定时事件),又有两种事件处理模式: Reactor模式&…

HarmonyOS NEXT应用开发之元素超出List区域

介绍 本示例介绍在List组件内实现子组件超出容器边缘的布局样式的实现方法。 List组件clip属性默认为true,超出容器边缘的子组件会按照List的布局范围被裁剪。为此,可以在List组件内部添加一个占位的ListItem,以达到预期的布局效果。List占…

每日一题-spring中的设计模式

1、 spring中的设计模式 工厂模式(Factory Pattern):Spring使用工厂模式来创建和管理对象。通过ApplicationContext,Spring可以作为一个工厂,负责创建、初始化和返回应用程序所需的对象。 单例模式(Singlet…

【vscode 常用扩展插件】

vscode 常用扩展插件 常用插件部分插件使用技巧1、eslint 保存自动格式化2、代码片段的使用3、最后是关于引入文件路径提示的 常用插件 记录vscode方便开发的扩展插件,方便换电脑时,快速部署所需环境。 部分插件 1、Auto Close Tag html自动闭合标签插…

React——class组件中setState修改state

class组件中通过state去存储当前组件的数据,那怎么对其进行修改呢?就是方法this.setState({ 要修改的部分数据 }) setState() 作用:1 、修改 state 内容;2 、更新 UI 特别注意:react的核心其实是虚拟dom(数…

WebSocket 和SSE的区别以及优缺点

WebSocket 和 Server-Sent Events(SSE)都是用于实现服务器向客户端推送消息的技术,但它们有一些重要的区别: 1.双向 vs 单向:WebSocket 是全双工的,这意味着服务器和客户端可以同时发送和接收消息。而 SSE …

【项目实践Day06】异步请求与同步请求+Ajax+微信小程序上实现发送异步请求

什么是同步和异步 同步 在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。也就是一旦调用开始,就必须等待其返回结果,程序的执行顺序和任务排列顺序一致。客户端必须等待服务器端的响应。在等待的期间客…

HTML静态网页成品作业(HTML+CSS)——宠物狗店网页(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…