You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask代码中配置默认启动参数,仅通过flask run命令启动服务

问题根因

你遇到的Ctrl+C关闭后重复启动默认服务的问题,是错误将服务启动逻辑写到了Flask应用工厂函数create_app内部导致的:

  • 执行flask run命令时,Flask CLI工具会先调用create_app函数获取应用实例
  • 你在create_app内部先调用了serving.run_simple启动自定义配置的服务,此时进程会阻塞在这一行
  • 按下Ctrl+C终止这个服务后,create_app才会继续执行return语句,将app实例返回给Flask CLI
  • Flask CLI拿到返回的app后,会按默认配置再启动一次服务,就是你看到的无自定义配置的默认服务
解决方案

推荐你使用符合Flask官方规范的配置方案,完全不用修改现有业务代码,所有用户直接执行flask run即可自动加载配置:

  1. 首先将create_app函数里最后一行的serving.run_simple(...)代码删掉,恢复正常的应用工厂逻辑
  2. 在项目根目录新建名为.flaskenv的文件,写入以下内容:
FLASK_APP=你的应用入口模块名(比如flaskr)
FLASK_RUN_HOST=0.0.0.0
FLASK_RUN_PORT=443
FLASK_RUN_CERT=adhoc
  1. 将python-dotenv依赖添加到你的requirements.txt中,用户安装依赖后,执行flask run就会自动读取上述配置,不需要加任何额外参数

如果你坚持要通过代码直接启动服务,可以改用以下方式,不使用flask run命令启动:

  1. 删掉create_app中的serving.run_simple(...)代码
  2. 在应用入口文件的末尾添加如下代码:
if __name__ == '__main__':
    from werkzeug import serving
    app = create_app()
    serving.run_simple("0.0.0.0", 443, app, ssl_context='adhoc')
  1. 用户直接执行python 你的入口文件名.py即可启动服务
注意事项

443属于系统特权端口,Linux/macOS环境下普通用户直接启动会报权限错误,需要加sudo前缀执行启动命令,或者将端口改为1024以上的非特权端口(比如8443)。

内容的提问来源于stack exchange,提问作者aujau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:27:02