将 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)命令是runserver和shell。 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 一起使用