VS代码:如何调试使用Connexion的Flask应用程序? launch.json 主模块app.py或main.py

问题描述

启动Flask应用程序时遇到了问题。 我正在尝试使用Visual Studio Code在调试模式下运行该应用程序,但无法正常运行。

这是主要模块代码

import os
import sys
import logging
import argparse
import connexion
import flask
from cwsm import connexion_manager
import connector.config as lc
_CONfig = None

path = os.path.abspath("./")

lc.initConfig(path + "/connector/config/Legic.ini")

app = connexion.FlaskApp(__name__,specification_dir=path + "/connector/config")
app.add_api("connectore.yaml")
app.run(host="0.0.0.0",port=8080,debug=True)

if __name__ == '__main__':
   main()

这是用于launch.json调试的配置

{

        "name": "Python: Flask","type": "python","request": "launch","module": "flask","env": {
            "FLASK_APP": "application_hook:FlaskApp('dev')","FLASK_ENV": "development","FLASK_DEBUG": "0"
        },"args": [
            "run","--no-debugger"
        ],"jinja": true
    }

问题是,每次我在调试模式下运行该程序时,程序都不会执行我的代码,而是显示错误Error: module 'application_hook' has no attribute 'FlaskApp' 为什么会发生? 预先感谢

更多的回溯:

(.venv) PS C:\Users\fele\Documents\Git>  cd 'c:\Users\fele\Documents\Git'; & 'c:\Users\fele\Documents\Git\.venv\Scripts\python.exe' 'c:\Users\fele\.vscode\extensions\ms-python.python-2020.9.112786\pythonFiles\lib\python\debugpy\launcher' '51724' '--' '-m' 'flask' 'run' '--no-debugger' 
 * Serving Flask app "application_hook:FlaskApp('dev')"
 * Environment: development
 * Debug mode: off
C:\Users\fele\Documents\Git/connector/config/Git.ini
C:\Users\fele\Documents\Git\.venv\lib\site-packages\connexion\apps\flask_app.py:96: Warning: Silently ignoring app.run() because the application is run from the flask command line executable.  Consider putting app.run() behind an if __name__ == "__main__" guard to silence this warning.
  self.app.run(self.host,port=self.port,debug=self.debug,**options)
Usage: python -m flask run [OPTIONS]

Error: module 'application_hook' has no attribute 'FlaskApp'
(.venv) PS C:\Users\fele\Documents\Git> 

解决方法

要修复“错误:模块'application_hook'没有属性'FlaskApp'“ ,请通过将FLASK_APP设置为启动应用程序的主文件的名称来更新launch.json(例如app.py或main.py)。

此外,由于您使用的是 connexion ,因此,launch.json需要进行如下更新:

  • 模块应从flask更改为connexion
  • args
    • 删除--no-debugger
    • 将路径添加到规范文件中
    • 添加--port和端口号

launch.json

{
    "version": "0.2.0","configurations": [
        {
            "name": "Python: Connexion","type": "python","request": "launch","module": "connexion","cwd": "${workspaceFolder}","env": {
                "FLASK_APP": "app.py","FLASK_ENV": "development","FLASK_DEBUG": "1"
            },"args": [
                "run","./connector/config","--port","8080"
            ],"jinja": true
        }
    ]
}

在主模块中,应将app.run()放在__main__防护中:

主模块(app.py或main.py)

path = os.path.abspath("./")

lc.initConfig(path + "/connector/config/Legic.ini")

app = connexion.FlaskApp(__name__,specification_dir=path + "/connector/config")
app.add_api("connectore.yaml")


if __name__ == '__main__':
   app.run(host="0.0.0.0",port=8080,debug=True)
,

我不知道为什么!!!但是,我正在做一个 Flask/Connexion 项目。两个月前,我一直在努力尝试在 VSCode 上调试它。当它在 PyCharm 上按预期工作且零痛苦时,我放弃了。现在,也许是由于一些 Linux/VSCode?PyCharm 更新,相同的源代码不再可以用 PyCharm“调试”,而是使用最简单的启动器在 VSCode 上工作:

"configurations": [
    {
        "name": "Python: Debug","program": "app.py","console": "integratedTerminal"
    }
]

别问我为什么! 这是相同的源代码!是的,我正在使用 venv。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...