Как заставить Matplotlib рисовать, находясь в отладчике ipdb в Spyder (или любом другом отладчике)?

EDIT

К сожалению, на данный момент это невозможно. Я обнаружил, что это ошибка в Spyder. Разработчики до сих пор выясняют, как к этому подойти .


Goal

Визуализируйте данные во время отладки кода (и я тоже хочу использовать Spyder!).

Попытка #1: Запустить foo.bar из IPython из Spyder

  • Создайте файл с именем foo.py со следующим кодом:

    из ipdb import set_trace as st
    импорт matplotlib.pyplot как plt
    
    Def bar():
     st()
    
  • Находясь в Ипитоне, напечатайте следующее:

    В [4]: импорт foo
    
    В [5]: foo.bar()
    -Ретурн--
    Нет
    > где-то_over_the_rainbow\foo.py(5)bar()
     3 
     4 def bar():
    ----> 5 st()
    
    ipdb> plt.plot([1, 2], [3, 4]))
    []]
    ipdb> plt.show()
    

Участок остается в "замороженном" состоянии. Если я выйду из отладчика, обновления сюжета. Если я попытаюсь закрыть участок, IPython выйдет из строя. Очевидно, что и то, и другое нежелательно, и ни то, ни другое не позволяет мне увидеть данные во время отладки.

Попытка #2: Запустить foo.bar из IPython из командной строки

  • Используйте тот же foo.py, что и в Попытке #1:
  • Открыть IPython из командной строки:

    В [4]: импортируйте foo.bar.
    
    В [5]: foo.bar()
    -Ретурн--
    Нет
    > где-то_over_the_rainbow\foo.py(5)bar()
     3
     4 def bar():
    ----> 5 st()
    
    ipdb> plt.plot([1, 2], [3, 4]))
    []]
    ipdb> plt.show()
    

Программа показывает сюжет так, как я ожидал. Но я хочу использовать Спайдер.

Попытка #3: Запустите baz.bar из IPython из командной строки

  • Запишите baz.py:

    из ipdb import set_trace как st
    импорт matplotlib.pyplot как plt
    
    st()
    
  • Откройте IPython из командной строки:

     В [4]: import baz
    -Ретурн--
    Нет
    > где-то_over_the_rainbow\baz.py(4)()
     2 импорт matplotlib.pyplot как plt
     3 
    ----> 4 st()
    
    ipdb> plt.
    

Тогда Спайдер полностью замерзнет.

Какие-нибудь предложения?

Примечание №1 : В моем полном коде много файлов и много функций, так что разбить все вместе в одном скрипте без функций нецелесообразно.

Замечание #2: Использование любой интерактивной команды matplotlib (например, ion(), interactive(True) и т.д.) не дало никакого эффекта.

Примечание #3: Spyder версия 2.0.12, Python 2.6, matplotlib 1.0.1.

18
задан Martijn Pieters 30 March 2015 в 11:02
поделиться