【问题标题】:Got "KeyError: <flask.cli.ScriptInfo object at 0x0000000003C05B70>" when running "flask db init"运行“flask db init”时得到“KeyError:<flask.cli.ScriptInfo object at 0x0000000003C05B70>”
【发布时间】:2019-06-04 02:19:34
【问题描述】:

这里是 python 新手。使用来自CRUD-PythonFlask 站点的 PyCharm 社区版处理一个基本项目。在执行迁移步骤时,在命令flask db init 之后出现如下错误:

Traceback (most recent call last):
File "C:\Python27\Lib\runpy.py", line 174, in_run_module_as_main
"__main__", fname, loader, pkg_name)
File "C:\Python27\Lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "C:\Users\elkkanah\PycharmProjects\aquauk\venv\Scripts\flask.exe\__main__.py", line 9, in <m
odule>
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\flask\cli.py", line 894, in
main
cli.main(args=args, prog_name=name)
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\flask\cli.py", line 557, in
main
return super(FlaskGroup, self).main(*args, **kwargs)
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\click\core.py", line 717, i
n main
rv = self.invoke(ctx)
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\click\core.py", line 1137,
in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\click\core.py", line 1137,
in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\click\core.py", line 956, i
n invoke
return ctx.invoke(self.callback, **ctx.params)
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\click\core.py", line 555, i
n invoke
return callback(*args, **kwargs)
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\click\decorators.py", line
17, in new_func
return f(get_current_context(), *args, **kwargs)
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\flask\cli.py", line 411, in
decorator
with __ctx.ensure_object(ScriptInfo).load_app().app_context():
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\flask\cli.py", line 377, in
load_app
raise_if_not_found=False)
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\flask\cli.py", line 254, in
locate_app
return find_best_app(script_info, module)
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\flask\cli.py", line 76, in
find_best_app
app = call_factory(script_info, app_factory)
File "c:\users\elkkanah\pycharmprojects\aquauk\venv\lib\site-packages\flask\cli.py", line 114, in
call_factory
return app_factory(script_info)
File "C:\Users\elkkanah\PycharmProjects\aquauk\app\__init__.py", line 19, in create_app
app.config.from_object(app_config[config_name])
KeyError: <flask.cli.ScriptInfo object at 0x0000000003C05B70>

__init__.py文件:

# app/__init__.py

# third-party imports
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_migrate import Migrate

 # local imports
 from config import app_config

 # db variable initialization
 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

     # temporary route
     @app.route('/')
     def hello_world():
         return 'Hello, World!'

     return app

在整理问题时需要帮助。任何帮助表示赞赏。

【问题讨论】:

  • 感谢@RajaSimon!它有帮助!
  • 请在此处为未来的用户创建一个新答案。
  • 交叉检查并确保您的主脚本位于适当的目录中(通常与 app 文件夹处于同一级别)。然后 cd 到包含主脚本文件的目录并运行:$ export FLASK_APP=&lt;yourfile.py&gt;

标签: python flask pycharm


【解决方案1】:

我在为 FLASK_APP 环境变量使用 python 文件而不是使用模块(或烧瓶术语中的应用程序)时遇到过这种情况,即:

$ export FLASK_APP=flask_app.py

而不是

$ export FLASK_APP=flask_app:app

我认为您可能完全错过了 FLASK_APP,因为 flask db init 表现出这种行为。

【讨论】:

  • 我遇到了同样的问题,这解决了。非常感谢!
【解决方案2】:

从您的代码中删除 ## app.config.from_object(app_config[config_name]) 行,它将开始工作..

【讨论】:

    【解决方案3】:

    我认为问题不在于 db 变量的初始化。确保您的虚拟环境位于您的烧瓶项目文件夹中

    【讨论】:

      【解决方案4】:

      您的 pycharm 编辑器将目标设置为 flask.py,也许您的不是 flask.py 或其他,但不会是 __init__.py

      【讨论】:

        【解决方案5】:

        如果你的app_config和config_name是对的,这通常是因为你没有正确配置环境变量FLASK_APP。 您的 runpy.py 文件如何调用您的函数 create_app()? 如果喜欢:

        if __name__ == '__main__':
          app = create_app('DEVELOPMENT')
        
          @app.shell_context_processor
          def make_shell_context():
              return dict(db=db, User=User, Role=Role)
        
          migrate = Migrate(app, db)
          app.run(host='0.0.0.0', port=50001)
        

        只需修改如下:

        app = create_app('DEVELOPMENT')
        
        @app.shell_context_processor
        def make_shell_context():
            return dict(db=db, User=User, Role=Role)
        
        migrate = Migrate(app, db)
        
        if __name__ == '__main__':
          app.run(host='0.0.0.0', port=50001)
        

        另外,如果你的runpy.py中有多个flask应用,你可以在配置环境变量时选择你想在flask shell中使用的一个:

        export FLASK_APP=runpy.py:app1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-13
          • 1970-01-01
          • 2023-02-15
          • 1970-01-01
          • 1970-01-01
          • 2015-06-16
          • 2020-05-19
          • 2021-10-29
          相关资源
          最近更新 更多