当前位置: 首页 > 知识库问答 >
问题:

在Flask应用程序中自动加载环境变量?

孔鹤龄
2023-03-14

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

  • 我甚至删除了导入(from dotenv import load_dotenv)-仍然有效
  • 我重命名了<代码>。env到something_else。env-不工作
  • 我用pip卸载了python dotenv-不起作用

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

关于如何实现这一点的任何想法?我可以看看python-dotenv的代码,但我对python很陌生,我希望把时间花在更有用的东西上,但这个东西只是让我烦恼。


共有3个答案

傅自明
2023-03-14

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

Flask 使用 python-dotenv 作为外部依赖项,使用通常位于 .flaskenv 文件附近的项目根目录下的单独 .env 文件从 dotenv 动态加载环境变量。指:

  • https://flask.palletsprojects.com/en/1.1.x/installation/#optional-dependencies
  • https://flask.palletsprojects.com/en/1.1.x/cli/#dotenv

我甚至删除了导入(从dentev导入load_dotenv) - 仍然有效

因为您已经安装了python dotenv包,所以不需要显式调用load_dotenv()Flask,默认情况下,期望找到/查找 。flaskenv文件位于项目的根目录下。但当您出于某种原因决定放置<代码>时。env文件位于项目结构中的某些位置,例如,使用 实例文件夹&通常用于存储应用程序的敏感数据,如 。env、configs、logs、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 to something_else.env -不起作用

.env 是用于存储环境变量的文件的名称,您不必重命名它。

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

请参阅python-dotenvdoc

松景铄
2023-03-14

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)

运行< code>load_dotenv()之后,您的应用程序现在已经从。环境文件。所以您可以通过传统的os.getenv("变量名")来访问它们


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

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

丌官嘉勋
2023-03-14
匿名用户

默认情况下,Flask使用< code>load_dotenv。查看来源

 类似资料:
  • 从2.7.3版本开始,Dubbo会自动从约定key中读取配置,并将配置以Key-Value的形式写入到URL中。 支持的key有以下两个: dubbo.labels,指定一些列配置到URL中的键值对,通常通过JVM -D或系统环境变量指定。 增加以下配置: # JVM -Ddubbo.labels = "tag1=value1; tag2=value2" # 环境变量 DUBBO_LAB

  • 问题内容: 我有一个flask应用程序,该应用程序将不同的配置文件用于开发和生产环境。相关的代码段是这样的: 当我在本地服务器上进行开发时,配置取自config.dev,但是当我将代码推送到heroku时,我想将SPOTPIX_SETTINGS环境变量设置为指向“ config.prod”文件。这可以在heroku命令行客户端中完成,如下所示: 但是,我不知道应该在等号右边写什么,因为我无法将生产

  • 我正在运行一个springboot应用程序,它需要信任我在本地信任库中添加的证书。现在我将它设置在intellij中的运行配置选项下,它有效。ex- 我想知道有没有办法从应用程序设置它。以我们设置spring属性的方式在springboot中创建属性文件?

  • 是否可以在 Websphere 中的应用程序级别设置环境变量? WebSphere服务器可以托管多个应用程序。应用于服务端的任何环境变量都适用于该服务器上的所有应用程序。是否可以创建仅适用于单个应用程序的变量? 例如:假设我们有一个SpreadsheetApp和一个DocsApp在同一台服务器上运行。它们共享一些共同的代码,可以通过一个名为DocStorageLocal的环境变量进行配置。有没有可

  • 我有一个烧瓶应用程序,我在本地运行和测试。每次我对应用程序代码进行更改,这些更改都会反映在开发环境中http://127.0.0.1:8000/只需简单的浏览器刷新。 现在,我必须终止Flask应用程序,然后重新启动该应用程序。我正在使用gunicorn启动Flask应用程序。 不确定更改了什么,但如何配置应用程序,使更改在刷新时生效? 我在init中有下面一行代码。py:

  • 我有一个Jenkins的工作,在那里我执行了一个Groovy脚本。从那个Groovy脚本中,我向另一个应用程序发出POST请求。我的Jenkins服务器和应用程序在不同的机器上。我需要从应用程序的代码中访问Jenkins环境变量。这可能吗? 我尝试使用System.getenv("ENVIRONMUT-VARIABLE-NAME")方法检索环境变量,但返回的结果为null。