为什么我的环境变量无法加载到我的flask应用程序中?

时间:2018-11-05 13:11:49

标签: python linux environment-variables

不确定是否要在Linux中发布,但是我遇到了一些麻烦。我有一个需要环境变量的Flask博客应用程序。我正在使用os模块访问它们,如下所示:

import os
app.config['SECRET_KEY'] = os.environ['SECRET_KEY']

但是,当我这样做时,我会在“秘钥”上看到KeyError。我确信已经永久设置了环境变量,我真的很困惑,并且我已经困扰了这个问题好几天了,真的需要一些帮助。对不起,如果我的描述不够充分;如果您需要更多信息,请在评论中提问。另外,两者之间有什么区别

os.environ['env var']

on.environ.get('env var')

这是apache配置

<VirtualHost *:80>
  ...
  SetEnv SECRET_KEY secret_as_heck
  ...
</VirtualHost>

这是python init

def create_app():    
    app = Flask(__name__)
    app.config['SECRET_KEY'] = os.environ['SECRET_KEY']
    app.config['SQLALCHEMY_DATABASE_URI'] =os.environ['DB_URI']
    app.config['MAIL_SERVER'] = 'smtp.googlemail.com'
    app.config['MAIL_PORT'] = 587
    app.config['MAIL_USE_TLS'] = True
    app.config['MAIL_USERNAME'] = os.environ['MAIL_USERNAME']
    app.config['MAIL_PASSWORD'] = os.environ['MAIL_PASSWORD']

谢谢

2 个答案:

答案 0 :(得分:0)

在您的Apache虚拟主机配置中,添加这样的变量

<VirtualHost hostname:80>
   ...
   SetEnv VARIABLE_NAME variable_value
   ...
</VirtualHost>

os.environ['env var']on.environ.get('env var')之间的区别在于,.get(key)将返回None,如果找不到环境变量,而os.environ['env var']将引发{{1} }。

答案 1 :(得分:0)

如果确实定义了变量,那么您会在os.environ中看到它。手动复制当前情况的一种可能方法是在一个终端中定义变量,然后从另一终端启动python的virtualenv。建议从启动烧瓶应用程序的位置开始,并仔细检查环境变量。