做网站的调查问卷,专门做中文音译歌曲的网站,wordpress做网店,贵阳网站建设推广公司1 python-dotenv 项目简介
项目地址#xff1a;https://github.com/theskumar/python-dotenv功能描述#xff1a;从 .env 文件读取键值对#xff0c;并将它们添加到环境变量中。核心理念#xff1a;在项目中#xff0c;可以将所有使用的环境变量写入 .env 文件#xff0…1 python-dotenv 项目简介
项目地址https://github.com/theskumar/python-dotenv功能描述从 .env 文件读取键值对并将它们添加到环境变量中。核心理念在项目中可以将所有使用的环境变量写入 .env 文件然后以键值对的方式读取作为环境变量。 2 用法
2.1 .env文件内容示例
# 这是一个注释将被忽略
REDIS_ADDRESSlocalhost:6379
MEANING_OF_LIFE42
MULTILINE_VARhello\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(verboseTrue)# 或者指定 .env 文件位置
env_path Path(.) / .env
load_dotenv(dotenv_pathenv_path, verboseTrue)通过 load_dotenv可以像访问系统环境变量一样使用 .env 文件中的变量例如 os.getenv(key, defaultNone)。
参数
dotenv_path: 指定.env文件路径当然如果不传该参数的话默认为None也会自定调用dotenv.find_dotenv()去查找文件位置的但是你的文件名如果不是.env那就必须传递该参数了override 当.env 文件中有变量与系统中原来的环境变量有冲突时按照上面的取值顺序默认使用系统变量如果要用.env中的变量覆盖系统变量可以给load_dotenv() 传递参数overrideTrue。此时只是临时使用了.env 中的变量值encoding: load_dotenv() 也可以传递encoding 参数指定文件的编码方式。
从流对象加载
从可读的流对象中加载记得把读指针调到要开始读取的位置。 from io import StringIO # Python2: from StringIO import StringIOfrom dotenv import dotenv_valuesfilelike StringIO(SPAMEGGS\\n)filelike.seek(0)parsed dotenv_values(streamfilelike)parsed[SPAM]
EGGS注意此时返回值是个字典 3 常见问题及解决方法
问题在 virtualenv 中尝试通过 pip 安装时遇到的问题。
解决方案应该安装 python-dotenv使用 pip3 install python-dotenv 或 pip install python-dotenv。 坑一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(), overrideTrue)坑二env文件中# 的处理。 考虑.env中的如下写法: BASEURLhttp://codehub.com/#/python暂且不讨论在 url 中带#是否优雅。#在 url 中表示锚点的确是会经常用到的然而在Python中却是表示注释开始。此时BASEURL的值会是http://codehub.com/。以下写法均符合预期。 BASEURLhttp://codehub.com/#/python
BASEURLhttp://codehub.com/#/python需要使用双引号 / 单引号括起来。