首页 > 编程语言 >使用python-dotenv进行高效的环境管理

使用python-dotenv进行高效的环境管理

时间:2023-09-13 14:24:48浏览次数:90  
标签:load 文件 高效 python env dotenv import

1 python-dotenv 项目简介

  • 项目地址https://github.com/theskumar/python-dotenv
  • 功能描述:从 .env 文件读取键值对,并将它们添加到环境变量中。
  • 核心理念:在项目中,可以将所有使用的环境变量写入 .env 文件,然后以键值对的方式读取作为环境变量。

2 用法

2.1 .env文件内容示例

# 这是一个注释,将被忽略
REDIS_ADDRESS=localhost:6379
MEANING_OF_LIFE=42
MULTILINE_VAR="hello\nworld"
  • 注意:使用 export 作为每行的前缀,python-dotenv 会忽略该变量,但可以使用 source 命令运行该文件。

2.2 项目中如何使用

安装

pip install -U python-dotenv

基本用法

确保项目目录下有 .env 文件,然后在 settings.py 中添加以下代码:

# settings.py
from dotenv import load_dotenv, find_dotenv
from pathlib import Path

# 自动搜索 .env 文件
load_dotenv(verbose=True)

# 或者指定 .env 文件位置
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path, verbose=True)

通过 load_dotenv,可以像访问系统环境变量一样使用 .env 文件中的变量,例如 os.getenv(key, default=None)

参数

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

从流对象加载

从可读的流对象中加载,记得把读指针调到要开始读取的位置。

>>> from io import StringIO     # Python2: from StringIO import StringIO
>>> from dotenv import dotenv_values
>>> filelike = StringIO('SPAM=EGGS\\n')
>>> filelike.seek(0)
>>> parsed = dotenv_values(stream=filelike)
>>> parsed['SPAM']
'EGGS'

注意:此时返回值是个字典


3 常见问题及解决方法

  1. 问题:在 virtualenv 中尝试通过 pip 安装时遇到的问题。
  • 解决方案:应该安装 python-dotenv,使用 pip3 install python-dotenvpip install python-dotenv
  1. 坑一:load_dotenv函数默认不会更新的配置项。

    官方文档的例子简单易懂。

    from dotenv import load_dotenv, find_dotenv
    load_dotenv(find_dotenv())
    

    然而这个例子里面缺隐藏了一个大坑。此时当用户在.env中更新配置项的值时,是不会生效的。原因是load_dotenv默认不会更新已经存在的配置项。推荐使用override参数,推荐代码如下:

    from dotenv import load_dotenv, find_dotenv
    load_dotenv(find_dotenv(), override=True)
    
  2. 坑二:env文件中# 的处理。

    考虑.env中的如下写法:

    BASEURL=http://codehub.com/#/python
    

    暂且不讨论在 url 中带#是否优雅。#在 url 中表示锚点,的确是会经常用到的;然而在Python中却是表示注释开始。此时BASEURL的值会是http://codehub.com/。以下写法均符合预期。

    BASEURL="<http://codehub.com/#/python>"
    BASEURL='<http://codehub.com/#/python>'
    

    需要使用双引号 / 单引号括起来。

标签:load,文件,高效,python,env,dotenv,import
From: https://www.cnblogs.com/zuiyixin/p/17699573.html

相关文章

  • Windows使用任务计划程序创建定时运行Python脚本
    最近有需求需要每天定时运行python程序,了解了一些方法。目前觉得Windows系统最简单的方法就是设置任务计划程序定时运行。在Windows中,任务计划程序(TaskScheduler)是一个持久的服务,通常不会因为计算机的关机或重启而停止。一旦你成功创建并配置了定时任务,它将按照你设置的触发条......
  • pycharm设置新建Python文件的模板
    首先找到Pycharm设置默认文件的位置,File-Setting-Editor-FileandCodeTemplates->PythonScript最后附上相应的编写内容大家按需选择:#coding:utf-8——>这里是设置的编码格式,根据自己的实际情况可以修改#当前的项目名:${PROJECT_NAME}#当前编辑文件名:${NAME}#当前......
  • Python中常用注释快捷键有哪些?
    所谓注释是在代码中用来进行解释、说明或者提醒的内容。它是程序中的非执行语句,主要用来增强代码的可读性和维护性。那么Python中常用注释快捷键有哪些?下面是常用的Python注释快捷键介绍。单行注释:在Python中,使用#符号来添加单行注释。可以使用快捷键Ctrl+/来快速添加或取......
  • Python实现最大似然估计
    数据部分这个部分,我们使用的是csv数据。下面介绍数据处理的方法。数据读取在Python中,我们可以使用内置的csv模块来读取csv文件。以下是一个简单的例子,演示如何将csv文件读取为多维列表:importcsv#创建一个空列表来存储数据data=[]#使用with语句打开csv文件,这样可以确......
  • day0-Python之路-编码之始-致那些年,我们依然没搞明白的编码
    本节内容编码回顾编码转换Python的bytes类型 编码回顾在备编码相关的课件时,在知乎上看到一段关于Python编码的回答 这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有一天它会猝不及防坑你一把。不过感觉这哥们的答案并没把编码问题写明白,所以只好......
  • 《Python编程从入门到实践》--- 学习过程笔记(4)列表操作
    一、遍历列表squares=('a','b','c','d')foriinlist(squares):print(i)二、python根据缩进来判断代码与前一个代码行的关系。(要注意缩进问题)for循环中,其下的所有缩进语句都属于for循环。三、数字列表创建及操作(1)range()函数。range(a,b)只打印a到b前一......
  • Centos7升级python3.9
    Centos7升级python3.91.系统升级yumupdate-yyum-ygroupinstall"Developmenttools"yuminstallopenssl-develbzip2-develexpat-develgdbm-develreadline-develsqlite-develpsmisclibffi-devel2.下载python3.9源码包wgethttps://www.python.org/ftp/py......
  • Python文件操作
    Python文件操作文件的编码计算机只能识别:0和1,我们需要使用编码技术(密码本)将内容翻译成0和1存入。计算机中有许多可用编码:UTF-8、GBK、Big5等,不同的编码,将内容翻译的二进制也是不相同的。编码:编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。编码有许多中,我们......
  • 【鹏业智慧工地平台】让您的项目更智能,更安全、更高效
    鹏业智慧工地平台主要利用智能终端、物联网、移动互联等技术,实时采集建设过程数据,利用大数据、人工智能技术对建设过程的数据进行实时分析,自动锁定施工现场质量安全隐患并进行预警,预警信息直接自动反馈至施工现场相关负责人和主管部门,并根据问题不同等级自动触发现场处置流程,一般为......
  • 会充电的CANoe-完成高效全面的充电系统测试,让新能源汽车说走就走
    随着中国新能源汽车的高速发展,越来越多的国内车企出海与外国汽车巨头同台竞技。2022年,在供应链缺芯少电的背景下,中国新能源汽车的渗透率还是超过了25%,连续八年为全球最大的新能源汽车市场。这也使得充电需求不断增大。当前,全球并没有形成统一的充电标准并且电动汽车充电领域涉及的......