在烧瓶应用中设置和检索环境变量

时间:2019-06-10 15:33:34

标签: python docker flask environment-variables

我想使用python3 / flask构建一个非常简单的REST api。

例如,我想将SECRET_KEY所需的flask设置为环境变量。

推荐的处理方式是什么?

我知道python-dotenv软件包允许(或者我应该说需要?).flaskenv文件,其中将env vars设置为键值对,形式为

SECRET_KEY="my_secret_key"
DB_NAME="mydatabase"

然后(我假设)我可以创建一个settings.py文件,例如

import os
SECRET_KEY = os.getenv('SECRET_KEY`)

然后对我的Flask文件执行import settings,依此类推。

我的主要问题是,如何在没有这样的.flaskenv文件但各个变量都可以在容器本身中作为运行时环境变量使用的容器化环境中进行调整(例如通过其协调器)

在没有settings.py的情况下,以上形式的.flaskenv是否能够检索环境变量?

2 个答案:

答案 0 :(得分:3)

python-dotenv实际上与Flask无关。可以将您的.env文件转换为实际的env变量。因此,如果没有它,您将拥有实际的env变量,那么您的os.getenv应该仍然可以工作。

旁注:您也可以使用os.environ

os.environ.get("SECRET")

答案 1 :(得分:0)

在解释器中设置环境变量:

-- Main.purs
module Main where

import Prelude

import Data.Argonaut.Core (Json)
import Data.Argonaut.Decode (decodeJson)
import Data.Argonaut.Parser (jsonParser)
import Data.Either (Either)
import Data.Map (Map)
import Debug.Trace (traceM)
import Effect (Effect)
import Effect.Console (log)

foreign import tuples :: Json
foreign import jsonString :: String

main :: Effect Unit
main = do
  let
    a = (decodeJson tuples) :: Either String (Map String (Array String))
    b = (decodeJson =<< jsonParser jsonString) :: Either String (Map String (Array String))
  traceM a
  traceM b
  traceM $ a == b

使用export SECRET_KEY=123 调用变量:

environ.get()

验证:

from os import environ
from flask import Flask

app = Flask(__name__)

app.config['SECRET_KEY'] = environ.get('SECRET_KEY')