基于 Python 的 Web 应用开发实战中,hello.py shell 命令无法进入交互式 shell 如何解决?

怎么搜都没找到解决方案。按照 python hello.py shell 运行,没有进入 shell 环境,有没有同样掉进过坑里的筒子解答一下?系统是 windows
基于 Python 的 Web 应用开发实战中,hello.py shell 命令无法进入交互式 shell 如何解决?

8 回复

大哥你连个报错信息都不发,让我们猜?


这个问题我遇到过。你的 hello.py 文件里很可能没有正确设置 Flask 的应用上下文。

Flask 的交互式 shell 需要手动推送应用上下文才能访问 app 实例和相关数据库对象。直接运行 flask shell 命令时,Flask 会自动寻找名为 appapplication 的实例,但如果你的应用工厂模式或导入方式不同,就需要额外配置。

解决方案:

  1. 检查 FLASK_APP 环境变量 确保你的 FLASK_APP 指向正确的模块。例如:

    export FLASK_APP=hello.py
    

    或者使用:

    export FLASK_APP=hello:app
    
  2. hello.py 中显式创建 app 实例 如果你的应用使用工厂模式,确保在模块顶层有可访问的 app 实例:

    from flask import Flask
    app = Flask(__name__)
    
    [@app](/user/app).route('/')
    def hello():
        return 'Hello World!'
    
    if __name__ == '__main__':
        app.run()
    
  3. 使用 flask.cli.load_dotenv() 加载环境变量hello.py 开头添加:

    from flask.cli import load_dotenv
    load_dotenv()
    
  4. 手动推送应用上下文 如果以上都不行,在启动 shell 后手动推送上下文:

    >>> from hello import app
    >>> app.app_context().push()
    

快速测试: 运行 flask routes 如果能正常显示路由,说明 FLASK_APP 设置正确,否则需要检查上述配置。

总结:检查 FLASK_APP 环境变量和应用实例的导出方式。

怪我疏忽,问题就是没有任何信息输出。

大概搜了一下书名,找到的是关于 flask 的书,相关片段:
示例 5-7 hello.py:为 shell 命令添加一个上下文
from flask.ext.script import Shell
def make_shell_context():
return dict(app=app, db=db, User=User, Role=Role)

manager.add_command(“shell”, Shell(make_context=make_shell_context))

make_shell_context() 函数注册了程序、数据库实例以及模型,因此这些对象能直接导入 shell:

$ python hello.py shell


根据你的描述推测是未调用 manager.run(),此书在示例 2-3 的代码中有:
if name == ‘main’:
manager.run()

另外书中代码很多地方都是针对旧版本的 flask,推荐还是从官方的最新文档开始入门

这本书,坑看到不到一半,发现版本问题很大的障碍。

我猜应该是需要 set FLASK_APP=hello.py

感谢,是这个原因。
他的 github 库内容比较书本还是有更新了的。但是没想到也不能直接使用。感觉上下文联系的太强了,看书比较马大哈,一有看漏就接不上。
谢谢,设置 FLASK_APP 后只是可以用 flask run 运行吧。

百度第一条来的,新版用 pip install flask-script,导入 from flask_script import Manager,注册 manager = Manager(app),运行 if name == ‘main’: manager.run()。
https://blog.csdn.net/theShepherd/article/details/86764926

回到顶部