2014-11-23 32 views
15

我使用Pycharm 4,用烧瓶0.10.1,蟒蛇3.4pycharm和瓶自动重载,而不是工作

似乎运行从内部pycharm烧瓶中的应用程序时,如果我运行断点:

app.run(debug=True) 

我的断点被忽略。一些google搜索后,我发现,为了使在断点PyCharm停止,我应该运行与烧瓶:

app.run(debug=True, use_reloader=False) 

现在PyCharm正确地停在断点,但我错过了autoreloading功能。

有什么办法可以让两者合作吗?

编辑:使用Python 2.7两件事工作

+0

尝试'调试= FALSE'中断而留下'use_reloader'在它的默认值。 – davidism 2014-11-23 13:52:14

+0

@davidism,这样做既没有断点也没有自动重装工作。 – Matt 2014-11-23 16:17:15

+1

Flask文档强烈建议不要在这个阶段使用Python 3:http://flask.pocoo.org/docs/0.10/advanced_foreword/#the-status-of-python-3 – Kash 2014-11-23 22:05:24

回答

1

问题是因为use_reloader=True的WERKZEUG应用程序在主应用程序的一个单独的(孩子)开始线程和PyCharm未能正确处理断点,因为他们失去了当线程启动。

您可以尝试关注此主题:http://forum.jetbrains.com/thread/PyCharm-776但它的接缝并没有太多的进展。

我建议使用Python的东西,像ISH pdb,即:

@app.route('/<string:page>') 
def main(page): 
    import pdb; pdb.set_trace() # This line actually stops application execution 
           # and starts Python debug shell in the console 
           # where you can examine current scope and continue 
           # normal code execution at any time. 
           # You can inject *any* code here. 
           # For example, if you type `print page` during pause, 
           # it will output content of "page" variable. 
    return render_template('index.html') 
+0

除了这是Python调试器,而不是PyCharm调试器。 – davidism 2014-12-03 18:15:39

+0

@davidism这是正确的,但不幸的是PyCharm似乎在这一点上吸吮:(我也使用PyCharm,我喜欢它,但我从来没有使用过它自己的调试器 – 2014-12-03 18:27:27

+0

我的观点是,这不是一个答案PyCharm调试器非常好,但它不能很好地与再加载器配合使用,似乎更有用的是“关闭再加载器并使用PyCharm非常强大的调试器”,而不是“使用这个基本的调试器入口点“ – davidism 2014-12-03 18:30:19

16

我要开始简短的回答:不,你想要什么不能与PyCharm起来的任何版本完成到4.0.1。

问题是,当您使用重新加载器Flask应用程序在子进程中运行时,所以PyCharm调试器被附加到主进程并且无法控制子进程。

在我看来,解决这个问题的最好方法是让Jetbrains在他们的IDE中构建“重启更改”功能。那么你根本不需要使用Werkzeug的重载器,你可以直接从PyCharm获得相同的功能。

直到Jetbrains决定实施这个,我可以分享我的解决方法,这不是非常糟糕。

  • 在“编辑配置”,设置配置您要使用“单实例只”
  • 让(在该对话框的右上角复选框)确保配置是处于活动状态。
  • 配置您的Flask应用程序不使用Werkzeug reloader。
  • 按Ctrl-D开始调试(在Mac上,其他人可能有不同的快捷方式)
  • 断点应该工作得很好,因为重新加载器没有激活。
  • 进行任何您需要的代码更改。
  • 当您准备好重新启动时,再次按Ctrl-D。您第一次执行此操作时,您将收到确认提示,如“停止并重新启动?”。说是,然后选中“不再显示”复选框。
  • 现在,您可以按Ctrl-D快速重新启动调试器,只要您需要。

我同意这不是完美的,但一旦Ctrl-D进入你的肌肉记忆,你甚至不会考虑它。

祝你好运!

+0

但是为什么断点有时会与自动重新加载? – Vladislav 2015-02-24 06:43:18

+0

他们在主流程上工作,而不是在孩子身上。 – Miguel 2015-02-24 15:18:36

-1

从pycharm使用Python 2.7 2017年(在我的案件与虚拟的包膜,但我想没有必要)我做的:

  • 运行...
  • 休假脚本和脚本参数空白
  • 我放在解释选项:-m烧瓶运行
  • 设置ENV变量FLASK_APP

  • 比运行连接到本地进程,并最终选择自己他正在运行的进程

我用例是从邮递员连接到瓶REST服务端点,并在我的断点