2014-11-23 16 views
15

używam pycharm 4, z kolby 0.10.1, Python 3.4pycharm i kolby autoreload i wartości graniczne nie pracują

Wydaje się, że po uruchomieniu aplikacji kolbę z wewnątrz pycharm, jeśli uruchomię go z:

app.run(debug=True) 

Moje punkty przerwania są ignorowane. Po pewnym googling, Znalazłem, że w celu dokonania zatrzymania pycharm na pułapki, należy uruchomić kolbę:

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

Teraz pycharm prawidłowo zatrzymuje się na pułapki, ale tęsknię funkcję autoreloading.

Czy jest jakiś sposób, aby obie te metody współdziałały?

EDIT: Używanie Pythona 2.7 obie rzeczy działają

+0

Spróbuj 'debug = FALSE pozostawiając' use_reloader' na to domyślna. – davidism

+0

@davidism, robi, że ani wartości graniczne ani automatycznego przeładowywania prace. – Matt

+1

dokumentacja Kolba zdecydowanie nie zaleca używanie Python 3 na tym etapie: http://flask.pocoo.org/docs/0.10/advanced_foreword/#the-status-of-python-3 – Kash

Odpowiedz

1

Problem polega na tym, ponieważ z use_reloader=True aplikacja Werkzeug jest uruchamiany w oddzielnym (dziecko) wątku głównego aplikacji i pycharm nie poprawnie obsługiwać punkty przerwania, ponieważ są one tracone, gdy wątek zaczyna.

Możesz spróbować postąpić zgodnie z tym wątkiem: http://forum.jetbrains.com/thread/PyCharm-776, ale nie było tam zbyt dużych postępów.

Sugeruję użyciu coś python-owski jak pdb, tj:

@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

Poza tym jest Python debuggera, a nie debuggera PyCharm. – davidism

+0

@Davidism that's right, ale niestety PyCharm wydaje się ssać w tym momencie :(Używam również PyCharm, i kocham to, ale nigdy nie używałem własnego debuggera. –

+0

Chodzi mi o to, że to nie jest odpowiedź Debugger PyCharm jest świetny, po prostu nie działa dobrze z reloaderem, wydaje się bardziej przydatny do powiedzenia "wyłączyć reloader i użyć bardzo potężnego debuggera PyCharm" zamiast "użyć tego podstawowego debuggera, który ma właśnie ten punkt wejścia ". – davidism

16

Zamierzam zacząć Krótka odpowiedź: Nie, co chcesz nie mogą być wykonane z dowolnych wersjach pycharm górę do 4.0.1.

Problem polega na tym, że podczas korzystania z reloadera aplikacja Flask działa w procesie potomnym, więc debuger PyCharm jest dołączony do procesu nadrzędnego i nie ma kontroli nad potomkiem.

Najlepszym sposobem na rozwiązanie tego problemu jest, moim zdaniem, poprosić Jetbrains o zbudowanie funkcji "restartuj po zmianie" w swoim IDE. Wtedy nie musisz w ogóle korzystać z reloadera Werkzeug i otrzymujesz tę samą funkcjonalność bezpośrednio z PyCharm.

Dopóki Jetbrains nie zdecyduje się na wdrożenie, mogę udostępnić moje obejście, które nie jest strasznie złe.

  • W „Edit Konfiguracje”, ustawić konfigurację masz zamiar użyć do „Single Instance tylko” (pole wyboru w prawym górnym rogu okna dialogowego)
  • Upewnij się, że konfiguracja jest aktywnym .
  • Skonfiguruj aplikację Flask, aby nie używać programu ładującego Werkzeug.
  • Naciśnij Ctrl-D, aby rozpocząć debugowanie (na Macu, inni mogą mieć inny skrót)
  • Punkty przerwania powinny działać poprawnie, ponieważ reloader nie jest aktywny.
  • Dokonaj niezbędnych zmian w kodzie.
  • Gdy będziesz gotowy do ponownego uruchomienia, ponownie naciśnij Ctrl-D. Za pierwszym razem otrzymasz monit z potwierdzeniem, np. "Stop and restart?". Powiedz "tak" i zaznacz pole "nie pokazuj ponownie".
  • Teraz możesz nacisnąć Ctrl-D, aby szybko uruchomić ponownie debugger, kiedy tylko potrzebujesz.

Zgadzam się, że nie jest doskonały, ale gdy Ctrl-D dostanie się do pamięci mięśniowej, nawet o tym nie pomyślisz.

Powodzenia!

+0

Ale dlaczego punkty przerwania działają czasami z autoreload? – Vladislav

+0

Pracują nad procesem nadrzędnym, a nie nad dzieckiem. – Miguel

-1

z pycharm 2017 przy użyciu Pythona 2.7 (w moim przypadku z wirtualnym env, ale nie przypuszczam to konieczne) zrobić:

  • bieg ...
  • skrypty odejść i skrypty parametry puste
  • I umieścić w opcji tłumacza: -m run kolba
  • ustawić zmienne env FLASK_APP

  • niż uruchomić dołączyć do procesu lokalnego, a wreszcie wybrać t że proces uruchomiony

mój przypadek użycia jest podłączenie od listonosza do kolby punkty końcowe usługi REST i przerwać na moich pułapki

Powiązane problemy