将 pycharm 调试器与 Flask 应用程序工厂结合使用

问题描述 投票:0回答:6

我输入的打印语句多于代码。快要死我了。

如果通过下面调用 Flask 开发服务器,我可以使用 PyCharm 调试器

from ersapp import app

if __name__ == '__main__':
    app.run(debug=True)

我遵循 Miguel Grinberg 书中中的示例,并使用了应用程序管理器(flask-script)。我在应用程序目录中调用服务器,如下所示

(env)$ python manage.py runserver

并在

appdirectory/__init__.py

def create_app(config_name):
    webapp = Flask(__name__)
    ...
    return webapp

Pycharm 中的调试器会让事情变得更容易,因为那是我工作的地方。

python debugging flask ide web-development-server
6个回答
12
投票

尝试在“编辑配置”中配置此 python 运行配置。之后,在调试模式下运行。

PyCharm configuration example


8
投票

如果您使用应用程序工厂模式(即使用 creat_app() 而不使用 run.app() main),您可以使用标准“flask”运行配置模板(社区版本可能没有这些,不确定)。 但是,您会注意到调试器不会在断点处停止,因为 DEBUG 中的 Flask 应用程序运行重新加载器,这意味着它在不同的线程中运行,而 Pycharm 无法捕获它。 因此,为了让它不仅在午餐时中断,而且在您想要调试的任何 API 调用上都中断,请确保:

  • 选择“调试”复选框
  • 添加 --no-reload 作为 Flask 参数
  • 添加 --without-threads 作为 Flask 参数

这是我获得完整调试支持的唯一方法:

Run Configuration


1
投票

您通过 CLI 手动运行该项目。要使用 PyCharm IDE 调试,您必须为您的项目配置 PyCharm,然后通过 PyCharm 运行它。
但如果您想在没有 PyCharm 的情况下运行程序,可以使用 pdb 库作为调试目标。尝试下面的代码:

import pdb


def my_def():
    try:
        x = 7 / 0
    except Execption as e:
        pdb.set_trace()

运行此程序时,您可以在 CLI 上看到交互行...


1
投票

最后我用 pyCharm pro 2022 处理了这个问题,我认为问题出在 IDE Flask 模板中,所以我可能会使用常规的 Python 项目,设置如下:

1)。设置环境:

FLASK_DEBUG = 1

2)。使用 pyCharm 的常规 Python 项目: pyCharm settings to make Flask debug mode active


0
投票

我在阅读 Miguel Grinberg 的书时也遇到了同样的问题。为了回答如何为您的项目“配置 PyCharm”这个问题,我提供以下评论。

要留在 PyCharm 中以利用其出色的调试器,请转到“编辑配置”,并在该对话框中确保您位于“配置”选项卡上。在那里,两个顶部文本框是:

脚本:设置为你的manage.py的路径

脚本参数:runserver

顺便说一句,我正在使用 PyCharm 4.5.3,尽管我怀疑至少在我之前工作过的几个版本中以下情况是正确的。现在从 PyCharm 运行应用程序会调用 runserver 命令:

python manage.py runserver 

这将运行 Flask 开发服务器,即 app.run()。配置选项卡允许我们指定运行特定的脚本manage.py,以及要使用的命令行参数,例如runserver 就像本例一样。在 PyCharm 中运行应用程序后,查看“运行”或“调试”窗口中输出的第一行,您将看到其他条目:--file pathto/manage.py runserver。

您可能在脚本参数文本框中指定了 shell 而不是 runserver,在这种情况下,在 PyCharm 中运行应用程序后您会发现自己处于 shell 中。

默认的 Manager(app) 命令是 runservershell。 db 命令添加在 manage.py 的以下行中:

manager.add_command('db', MigrateCommand) 

在其下方添加命令 test。请注意 def test() 之前的 @manager.command 装饰器。

要获取所有管理器(应用程序)命令的列表,请在命令行上键入:

python manage.py

如果您在本教程的“应用程序工厂”部分,您应该会看到 {test, shell, db, runserver}。要获取有关任何一种命令的帮助,请输入:

python manage.py parameter -?

0
投票

我建议在

run.py
添加一个
WorkingDirectory
文件,其内容如下:

# -*- coding: utf-8 -*-

from app import create_app
from config import Config

# Remember don't use if __name__ == 'main' in this file
my_app = create_app(Config)
my_app.run(host='127.0.0.1', port=5000, debug=True)

然后配置运行/调试配置,例如: PyCharm configuration

一切都会像我们拥有 app.py 一样正常工作

© www.soinside.com 2019 - 2024. All rights reserved.