【问题标题】:What is the use of python-dotenv?python-dotenv有什么用?
【发布时间】:2017-05-23 15:31:51
【问题描述】:

需要一个例子,请解释一下 python-dotenv 的用途。
我对文档有点困惑。

【问题讨论】:

    标签: python environment-variables


    【解决方案1】:

    你可以像这样设置环境变量:

     export PRIVATE_KEY=0X32323
    

    然后使用os 模块阅读。

    import os
    
    private_key=os.getenv("PRIVATE_KEY")
    

    但是这样,环境变量仅在 shell 处于活动状态时有效。如果关闭 shell 并重新启动它,则必须再次设置环境变量。 python-dotenv 阻止我们做这种重复的工作。为此创建.env 文件并以这种格式添加变量

     PRIVATE_KEY=fb6b05d6e75a93e30e22334443379292ccd29f5d815ad93a86ee23e749227
    

    然后在文件中你想访问 anv 变量

    import os
    from dotenv import load_dotenv 
    
    #default directory for .env file is the current directory
    #if you set .env in different directory, put the directory address load_dotenv("directory_of_.env)
    load_dotenv()
    

    load_dotenv() 将从.env 设置环境变量,我们使用os 模块访问

       private_key=os.getenv("PRIVATE_KEY")
    

    【讨论】:

      【解决方案2】:

      除了@Will 的回答之外,python-dotenv 模块还带有一个 find_dotenv() ,它将尝试查找 .env 文件。

      # settings.py
      import os
      from dotenv import load_dotenv, find_dotenv
      
      load_dotenv(find_dotenv())
      
      SECRET_KEY = os.environ.get("SECRET_KEY")
      DATABASE_PASSWORD = os.environ.get("DATABASE_PASSWORD")
      

      【讨论】:

      • load_dotenv() 如果当前目录中有.env 文件就足够了
      【解决方案3】:

      来自Github page

      从 .env 中读取键值对并将它们添加到环境变量中。使用 12 要素原则在开发和生产过程中管理应用设置非常有用。

      假设您已在设置模块旁边创建了 .env 文件。

      .
      ├── .env
      └── settings.py
      

      将以下代码添加到您的 settings.py 中

      # settings.py
      import os
      from os.path import join, dirname
      from dotenv import load_dotenv
      
      dotenv_path = join(dirname(__file__), '.env')
      load_dotenv(dotenv_path)
      
      SECRET_KEY = os.environ.get("SECRET_KEY")
      DATABASE_PASSWORD = os.environ.get("DATABASE_PASSWORD")
      

      .env 是一个简单的文本文件。每行列出每个环境变量,格式为 KEY="Value",忽略以 # 开头的行。

      SOME_VAR=someval
      # I am a comment and that is OK
      FOO="BAR"
      

      【讨论】:

      • 希望我在 github 上找到相同的内容请多多指教
      • 只是想添加,如果键/值对看起来像GIRLFRIEND=None,则必须小心,因为print 显示None,所以在这种情况下,您必须检查type变量来区分。
      • 谁能解释一下 dotenv 与 autoenv 的区别/优缺点?
      • @user9074332 .env 文件约定包括一个前导 .,这使得它在 mac 和 linux 系统上隐藏。您还可以将.env 添加到您的.gitignore 文件中,这样它就不能提交给版本控制。如果它只是本地和 gitignored,那么在其中输入密码就可以了。它应该只被称为.env,而不是很多。如果您想在不同环境的 CI/CD 中使用 dotenv,那么 stackoverflow.com/a/55581164/1335793 之类的东西可以工作,但取决于您的部署平台和流程。
      • in production using 12-factor principles 指的是 12factor.net/config 将配置存储在 env vars 中的原理。将它们存储在本地 gitignored .env 文件中只是导出环境变量的隐式助手,因此您不要忘记导出或运行 shell 脚本。部署到 prod 时,您会放弃 .env 文件。 load_dotenv()os.environ.get 调用是独立的; dotenv 用于本地开发,您使用其他一些机制,例如您的 CI/CD 系统的 env vars secrets manager in prod,无论哪种方式 os.environ.get 部分始终有效。
      猜你喜欢
      • 2020-10-14
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      相关资源
      最近更新 更多