• python-dotenv 管理项目中的环境变量


    PyPi:https://pypi.org/project/python-dotenv/

    介绍

    Reads the key-value pair from .env file and adds them to environment variable. It is great for managing app settings during development and in production using 12-factor principles.
    Do one thing, do it well!

    安装

    pip install -U python-dotenv
    

    基本用法

    The easiest and most common usage consists on calling load_dotenv when the application starts, which will load environment variables from a file named .env in the current directory or any of its parents or from the path specificied; after that, you can just call the environment-related method you need as provided by os.getenv.

    .env文件内容类似:

    # a comment that will be ignored.
    REDIS_ADDRESS=localhost:6379
    MEANING_OF_LIFE=42
    MULTILINE_VAR="hello
    world"
    
    CONFIG_PATH=${HOME}/.config/foo
    DOMAIN=example.org
    EMAIL=admin@${DOMAIN}
    DEBUG=${DEBUG:-false}
    

    在设置文件里加载

    # settings.py
    from dotenv import load_dotenv
    load_dotenv()
    
    # OR, the same with increased verbosity
    load_dotenv(verbose=True)
    
    # OR, explicitly providing path to '.env'
    from pathlib import Path  # Python 3.6+ only
    env_path = Path('.') / '.env'
    load_dotenv(dotenv_path=env_path)
    

    读取示例

    # settings.py
    import os
    SECRET_KEY = os.getenv("EMAIL")
    DATABASE_PASSWORD = os.getenv("DATABASE_PASSWORD")
    

    坑一:默认不会更新的配置项

    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)
    

    #的处理

    考虑.env中的如下写法:

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

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

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

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

    Flask 中的实践

    一般来说,在执行flask run命令运行程序前,我们需要提供程序实例所在模块的位置 。

    Flask会自动探测程序实例,自动探测存在下面这些规则:

    从当前目录寻找app.py和wsgi.py模块,并从中寻找名为app或application的程序实例
    从环境变量FLASK_APP对应的值寻找名为app或application的程序实例

    如果你程序主模块命名为app.py,flask run命令会自动在其中寻找程序实例。如果你的程序主模块名是其他名称,

    比如hello.py,那么需要设置环境变量FLASK_APP,将包含程序实例的模块名赋值给这个变量。

    在linux 或 macOS系统使用export命令: export FLASK_APP=hello

    除了FLASK_APP,我们还需要使用到其他环境变量。环境变量在新创建命令行窗口或重启电脑后就清除了,每次都要重设

    变量有些麻烦。而且如果你同时开发多个Flask程序,这个FLASK_APP就需要在不同的值之间切换。为了避免频繁设置环境变量,

    我们在项目根目录下分别创建两个文件:.env和.flaskenv。.flaskenv用来存储和Flask相关的公开环境变量,比如FLASK_APP;

    而.env用来存储包含敏感信息的环境变量,比如配置Email服务器的账户名与密码。

    在.env和.flaskenv文件中,环境变量使用键值对的形式定义,每行一个,以#开头的为注释

    【注意!】一定是要在运行flask项目的情况下.env 和.flaskenv中的环境变量才会被Flask加载

    如果不在.flaskenv中配置有关flask的环境变量,运行flask后,
    即使.flaskenv中有其它变量如,TEST_ENV,也不能获取到它的值

    .flaskenv 文件中增加环境变量 FLASK_ENV='development' 再次运行app.py

    这次.flaskenv中的环境变量都被Flask加载到了,与Flask环境无关的变量TEST_ENV的值也能被获取取了

    另:如果不使用python-dotenv来管理配置变量,其实也可以使用.ini这样的配置文件来存储配置信息。

    更多内容见 pypi

  • 相关阅读:
    网络测量中基于Sketch方法的简单介绍
    Reading SBAR SDN flow-Based monitoring and Application Recognition
    Reading Meticulous Measurement of Control Packets in SDN
    Reading SketchVisor Robust Network Measurement for Sofeware Packet Processing
    ovs加dpdk在日志中查看更多运行细节的方法
    后缀数组
    (转载)LCA问题的Tarjan算法
    Codeforces Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) A. Checking the Calendar(水题)
    Vijos 1816统计数字(计数排序)
    卡特兰数
  • 原文地址:https://www.cnblogs.com/wbyixx/p/13444500.html
Copyright © 2020-2023  润新知