【问题标题】:Automatically loading environment variables in a Flask app?在 Flask 应用程序中自动加载环境变量?
【发布时间】:2020-02-13 00:47:37
【问题描述】:

我有一个小型 Flask 应用程序,它使用 python-dotenv 库来加载我存储在名为 .env 的文件中的环境变量。一切正常,但我最近意识到我实际上从未调用过load_dotenv() 方法,所以我不确定它是如何工作的。 只是出于好奇,我试着玩了一下:

  • 我什至删除了导入 (from dotenv import load_dotenv) - 仍然有效
  • 我将 .env 重命名为 something_else.env - 不起作用
  • 我用pip 卸载了python-dotenv - 不起作用

我使用的是 0.10.3 版本,我已经阅读了文档,但没有找到任何关于自动加载环境变量的信息。

你知道这怎么可能吗?我可以看一下python-dotenv 的代码,但我对 python 还很陌生,我希望把时间花在更有用的东西上,但这件事让我很烦。

【问题讨论】:

  • 步骤 1. 创建一个 .env 文件并放置您的 env 变量及其值,例如。 KEY=fads89fdafds 2. 使用以下内容创建 config.py 文件 from dotenv import load_dotenv load_dotenv() 3. 在您的 app.py 中 import config KEY = os.environ.get('KEY') 它们将在您的代码中可用

标签: python flask environment-variables


【解决方案1】:

Flask 默认使用load_dotenv。见source

【讨论】:

    【解决方案2】:

    我用 pip 卸载了 python-dotenv - 不起作用

    Flask 使用python-dotenv 作为外部依赖项,使用一个单独的.env 文件从dotenv 动态加载Environment Variables,该文件通常位于.flaskenv 文件附近的项目根目录下。 参考:

    我什至删除了导入(从 dotenv import load_dotenv) - 仍然有效

    由于你已经安装了python-dotenv 包,你不需要显式调用load_dotenv(), Flask 默认期望来定位/找到.env.flaskenv 项目根目录下的文件。但是,当您出于某种原因决定将.env 文件放在项目结构中的某个位置时,例如使用instance folder,它通常用于存储应用程序的敏感数据,例如.env、配置、日志、sqlite3 数据库文件.. 那么您必须明确指出应用程序要加载的.env 文件的路径,如下所示:

    [..]
    
    def create_app(config_object):
        """Create a Flask application using the app factory pattern."""
    
        app = Flask(__name__)
    
        load_config(app, config_object)  # here
    
        [..]
    
        return app
    
    def load_config(app, config_object):
        """Load configuration."""
    
        import os
    
        from dotenv import load_dotenv
    
        BASE_DIR = os.path.dirname(os.path.abspath(__file__))
        dotenv_path = os.path.join(BASE_DIR, 'var/instance/.env')  # just an e.g
    
        if os.path.exists(dotenv_path):
            load_dotenv(dotenv_path)
        else:
            import sys
            print('".env" is missing.')
            sys.exit(1)
    
        app.config.from_object(config_object)
    
    [..]
    

    我将 .env 重命名为 something_else.env - 不起作用

    .env 是存储Environment variables 的文件的THE 名称,您不必重命名它。

    将从当前目录或其任何父目录中的名为 .env 的文件中或从指定的路径中加载环境变量

    参考python-dotenvdoc

    【讨论】:

      【解决方案3】:

      python-dotenv 是在烧瓶应用程序中加载 .env 文件的最佳选择之一。

      我将它用于我的烧瓶应用程序:

      from dotenv import load_dotenv
      env_file_name = "local.env"
      env_path = Path.cwd().joinpath(f"env/{env_file_name}")
      load_dotenv(dotenv_path=env_path)
      

      在运行load_dotenv() 之后,您的应用程序现在已经从 .env 文件中加载了所有环境变量。所以你可以通过常规的 os.getenv("variable name") 来访问它们

      
          MAIL_USERNAME = os.getenv('EMAIL_USER')
          MAIL_PASSWORD = os.getenv('EMAIL_PASSWORD')
      

      这就是你需要做的。干杯!

      【讨论】:

        猜你喜欢
        • 2017-03-31
        • 2019-11-25
        • 1970-01-01
        • 2017-12-10
        • 2015-04-26
        • 2015-04-27
        • 2018-09-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多