【问题标题】:I get KeyError when trying to run "flask db init"尝试运行“flask db init”时出现 KeyError
【发布时间】:2021-05-07 06:13:06
【问题描述】:

您好,我是 python 新手,我正在学习烧瓶 + python 教程,但是在执行命令 flask db init 时,它给了我这个:

Traceback (most recent call last):
  
File "/home/pi/.local/bin/flask", line 10, in <module>
    sys.exit(main())
  
File "/home/pi/.local/lib/python2.7/site-packages/flask/cli.py", line 967, in main
    cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None)
  
File "/home/pi/.local/lib/python2.7/site-packages/flask/cli.py", line 586, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  
File "/home/pi/.local/lib/python2.7/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  
File "/home/pi/.local/lib/python2.7/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  
File "/home/pi/.local/lib/python2.7/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
 
File "/home/pi/.local/lib/python2.7/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  
File "/home/pi/.local/lib/python2.7/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  
File "/home/pi/.local/lib/python2.7/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  
File "/home/pi/.local/lib/python2.7/site-packages/flask/cli.py", line 425, in decorator
    with __ctx.ensure_object(ScriptInfo).load_app().app_context():
  
File "/home/pi/.local/lib/python2.7/site-packages/flask/cli.py", line 388, in load_app
    app = locate_app(self, import_name, name)
  
File "/home/pi/.local/lib/python2.7/site-packages/flask/cli.py", line 240, in locate_app
    __import__(module_name)
  
File "/home/pi/ACSD/run.py", line 6, in <module>
    app = create_app(config_name)
  
File "/home/pi/ACSD/app/__init__.py", line 12, in create_app
    app.config.from_object(app_config[config_name])

KeyError: None

这是__init__.py文件的内容:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_migrate import Migrate
from config import app_config

db = SQLAlchemy()
login_manager = LoginManager()

def create_app(config_name):
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_object(app_config[config_name])
    app.config.from_pyfile('config.py')
    db.init_app(app)
    login_manager.init_app(app)
    login_manager.login_message = "You must be logged in to access this page."
    login_manager.login_view = "auth.login"
    migrate = Migrate(app, db)

    from app import models

    return app

这是run.py文件的内容

import os

from app import create_app

config_name = os.getenv('FLASK_CONFIG')
app = create_app(config_name)


if __name__ == '__main__':
    app.run()

感谢所有帮助

【问题讨论】:

  • 错误来自您的os.getenv('FLASK_CONFIG') 命令,它无法找到'FLASK_CONFIG' 环境变量,默认为None
  • 顺便说一句,您应该考虑迁移到 Python 3。

标签: python flask raspberry-pi keyerror


【解决方案1】:

在您的.env 文件中,您需要实例化您的变量:

# .env

FLASK_CONFIG=<your-value>

确保安装python-dotenv 以帮助加载此环境变量:

(venv)$ pip3 install python-dotenv

run.py,加载你的环境变量:

# run.py

# Your previous imports
from dotev import load_dotenv

load_dotenv('.env')

config_name = os.getenv('FLASK_CONFIG')
app = create_app(config_name)


if __name__ == '__main__':
    app.run()

【讨论】:

猜你喜欢
  • 2019-06-04
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 2017-11-14
  • 2021-08-29
  • 1970-01-01
  • 2020-04-22
相关资源
最近更新 更多