2014-11-23 54 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服務端點,並在我的斷點