我正在使用Pycharm 4,烧瓶0.10.1,python 3.4
似乎从pycharm内部运行一个烧瓶应用程序,如果我用:
运行它app.run(debug=True)
我的断点被忽略了。经过一些谷歌搜索后,我发现为了让PyCharm在断点处停止,我应该运行烧瓶:
app.run(debug=True, use_reloader=False)
现在PyCharm在断点处正确停止,但我错过了自动加载功能。
有没有办法让两者一起工作?
使用python 2.7这两件事都可以工作
我向PyCharm报告过:https://youtrack.jetbrains.com/issue/PY-13976
答案 0 :(得分:19)
我将从简短的回答开始:不,你想要的任何版本的PyCharm都不能用到4.0.1。
问题在于,当您使用重新加载器时,Flask应用程序在子进程中运行,因此PyCharm调试器附加到主进程并且无法控制子进程。
在我看来,解决这个问题的最佳方法是让Jetbrains在他们的IDE中构建一个“重启更新”功能。然后你根本不需要使用Werkzeug的重新加载器,你可以直接从PyCharm获得相同的功能。
在Jetbrains决定实施此功能之前,我可以分享我的解决方法,这并不是非常糟糕。
我同意这不完美,但一旦Ctrl-D进入你的肌肉记忆,你甚至都不会想到它。
祝你好运!答案 1 :(得分:1)
问题是因为使用use_reloader=True
werkzeug应用程序是在主应用程序的单独(子)线程中启动而PyCharm无法正确处理断点,因为它们在线程启动时丢失。
你可以尝试关注这个帖子:http://forum.jetbrains.com/thread/PyCharm-776但它的接缝没有太多进展。
我建议使用像pdb
这样的Python-ish,即:
@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')
答案 2 :(得分:1)
答案 3 :(得分:0)
答案 4 :(得分:0)
在我的设置中,我正在通过运行main.py
文件来调试flask应用程序,该文件设置了一些配置并调用app.run()
。我的python解释器是在Docker容器中设置的。
我的问题是我需要检查Run with Python console
。
答案 5 :(得分:-1)
设置env变量FLASK_APP
比运行附加到本地进程,最后选择正在运行的进程
我的用例是从邮递员连接到烧瓶休息服务端点并在我的断点上中断