将 pycharm 调试器与烧瓶应用程序工厂一起使用

Posted

技术标签:

【中文标题】将 pycharm 调试器与烧瓶应用程序工厂一起使用【英文标题】:using the pycharm debugger with a flask application factory 【发布时间】:2015-07-09 18:10:16 【问题描述】:

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

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

from ersapp import app

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

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

(env)$ python manage.py runserver

appdirectory/__init__.py

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

Pycharm 中的调试器会让事情变得更简单,因为这是我工作的地方。

【问题讨论】:

【参考方案1】:

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

选择调试复选框 添加 --no-reload 作为烧瓶参数 添加 --without-threads 作为烧瓶参数

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

【讨论】:

PyCharm 社区,版本 2020.2.1。我添加了--no-reload、--no-debugger,唯一缺少的是--no-threads。添加这 3 个参数后,应用程序开始在断点处停止。 谢谢,添加 --no-debugger 是我让调试器工作所需要的......【参考方案2】:

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

【讨论】:

这在团队环境中不可移植【参考方案3】:

您通过 CLI 手动运行了该项目。要使用 PyCharm IDE 调试,您必须 configure PyCharm for your project 然后通过 PyCharm 运行它。 但是如果你想在没有 PyCharm 的情况下运行程序,你可以使用pdb 库来调试目标。试试下面的代码:

import pdb


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

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

【讨论】:

非常有帮助。你能推荐更多的pycharm资源吗?【参考方案4】:

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

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

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

脚本参数:runserver

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

python manage.py runserver 

这会运行烧瓶开发服务器,即 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 装饰器。

要获取所有 Manager(app) 命令的列表,请在命令行输入:

python manage.py

如果您在本教程的应用程序工厂部分,您应该会看到 test, shell, db, runserver。要获得任何一种命令类型的帮助:

python manage.py parameter -?

【讨论】:

不知道为什么这被否决了。它是使用 Pycharm 以及主机上的应用程序构建和测试的。它还在 Pycharm 位于启用了远程调试的主机上以及 Linux 虚拟机上的应用程序的环境中构建和测试。 当这是一个烧瓶应用程序而不是 django 时,您正在引用“manage.py”。 @jpmorris 你肯定是不正确的。查看大型应用程序结构下的 O'Reilly Flask Web 开发:启动脚本。有一个为 Flask 实现 manager.py 的示例(来自 flask.ext.script 导入管理器)。您是否阅读了我的整个评论,我提到它在 Flask 中经过全面测试。 是的,Miguel Grindberg 的第一版 Flask 书籍使用 manage.py,因为当时使用 Flask-Script 需要一个脚本文件,而 Miguel 将其命名为 manage.py。但这有long stopped being the case,所以这个答案充其量是过时的。 @martijn-pieters 是的,最初的问题是在 2015 年 4 月发布的。答案是在 2015-07 年度同时给出的。当时它是最新的。第 1 版。发表于 2014-05。第 2 版。发表于 2018-03。我希望很明显它已经过时了,因为它已经 5 岁了!你说的很明显。答案在 2020 年没有被否决,因为它已经过时了。它被否决了,因为评论者指的是 2015 年给出的原始答案,错误地认为我指的是 Django,而答案清楚地表明我正在使用 Flask manage.py。

以上是关于将 pycharm 调试器与烧瓶应用程序工厂一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Bloodhound 与使用烧瓶 jsonify 创建的 JSON 一起使用

如何使 GDB 与外部程序一起工作

我可以在IntelliJ中调试Flask应用程序吗? [重复]

将 Select2 与烧瓶 wtforms 一起使用

我需要有关如何使用烧瓶应用工厂模式实施芹菜的帮助

烧瓶-SocketIO + uWSGI。与 Mule 工人一起发射