python3运行Flask-RESTPlus应用触发AttributeError,flask run正常
问题分析与解决
错误根源
你代码里的变量命名导致了核心混淆:
flask_app = Flask(__name__)是Flask原生的应用实例,自带run()方法。app = Api(app = flask_app, ...)是Flask-RESTPlus的Api实例,它本身没有run()方法,这就是报错AttributeError: Api does not have run attribute的直接原因。
而flask run能正常运行的逻辑是:当你设置FLASK_APP=server.py时,Flask框架会自动在模块中扫描Flask原生实例,它找到了你定义的flask_app,直接用这个实例启动服务,相当于绕过了你代码里错误的app.run()调用。
修复方案
修改代码末尾的启动块,调用Flask原生实例的run()方法即可:
### RUN ### if __name__ == '__main__': flask_app.run(host='0.0.0.0') # 替换原有的app.run,改用Flask原生实例flask_app ### RUN ###
如果想通过Api实例间接访问底层Flask应用,也可以这样写:
if __name__ == '__main__': app.app.run(host='0.0.0.0') # Api实例的app属性指向绑定的Flask原生应用
生产部署注意事项
针对你要做的Nginx+Gunicorn部署,需要确保Gunicorn加载的是Flask原生实例,建议在server.py末尾添加:
# 暴露Flask实例供Gunicorn调用 application = flask_app
启动Gunicorn时使用类似命令:gunicorn --workers=3 server:application,确保它指向正确的Flask应用对象。
内容的提问来源于stack exchange,提问作者user2010686
相关产品推荐
相关产品推荐

