Подтвердить что ты не робот

Есть ли "Редактировать и продолжить" в PyCharm? Перезагрузите код в запущенную программу, например, в Eclipse/PyDev?

Привет всем разработчикам Python!

В Eclipse с PyDev можно редактировать файл Python во время отладки. При сохранении отладчик PyDev перезагрузит обновленный код в запущенную программу и использует мой новый код. Как я могу сделать то же самое в JetBrains PyCharm (используя Community Edition)?

Eclipse/PyDev записывает такой вывод, когда я это делаю:

pydev debugger: Start reloading module: "MyWidget" ... 
pydev debugger: Updated function code: <function close at 0x055F4E70>
pydev debugger: reload finished

Я искал настройки и сеть и не мог найти подсказок. Очень рад любой идее. спасибо.

Изменить: я обнаружил, что в Eclipse/PyDev вы должны быть в режиме отладки, чтобы иметь возможность использовать эту функцию. Я тестировал в PyCharm, но перезагрузки не было.

4b9b3361

Ответ 1

В конце концов, я нашел полезное и приемлемое обходное решение для моего вопроса. Он работает в PyCharm Community Edition 3.1.2, и я предполагаю, что это будет делать и в коммерческом издании. Я тестировал в среднем проекте, используя Python 2.7.6, PySide (Qt) с одним основным окном и 20 + виджетами, вкладками, что угодно. Выполните следующие шаги...

  • Работа в Pycharm по проекту python: -)
  • Выполнить свой код в режиме отладки (пока не пробовал Release)
  • Отредактируйте код в одном из ваших модулей, импортированных в течение жизни вашей программы.
  • Сделайте паузу в программе. Для этого вы можете нажать кнопку "Пауза" в представлении PyCharms Debug, а затем любое место в главном окне приложения, где ему нужно что-то сделать (например, в заголовке вкладки). Если у вас долго работающая задача и нет пользовательского интерфейса, вы можете разместить точку останова в месте, где часто приходит ваша программа.
  • В представлении "Отладка" перейдите на вкладку Консоль. На левой панели находится кнопка Показать командную строку. Нажмите здесь.
  • В консоли введите перезагрузить (MyModifiedModule), если этот вызов завершился с ошибкой, напишите импортировать MyModifiedModule и повторите попытку.
  • Нажмите "Обновить" в PyCharm.
  • Попробуйте установить код.

PyCharm Debug View

Есть некоторые ограничения на это... Он не будет исправлять изменения в вашем основном методе или главном окне, потому что он не будет создан снова. В моих тестах я не мог перезагрузить виджеты из Qt. Но он работал для классов, таких как контейнеры данных или рабочие.

Пусть сила будет с вами, когда вы попробуете это, и не стесняйтесь добавлять свои впечатления.

Спасибо.

Ответ 2

PyCharm не поддерживает редактирование и продолжается либо в редакции сообщества, либо в профессиональной версии, но вот обходной путь, который я нашел во время отладки.

Поскольку вы можете запускать произвольный код в консоли и/или оценщик выражения, во многих случаях вы можете выполнять изменения кода без перезапуска приложения. Это не совсем так, как edit-and-continue (это функция, которая мне действительно нравится в Visual Studio и должна быть частью Pycharm), но это долгий путь к тому, чтобы не перезапускать программу с нуля после изменения, чтобы увидеть, новый код работает так, как ожидалось.

Позвольте мне проиллюстрировать пару методов, которые я использую:

Скажем, у вас есть следующий код (с несколькими опечатками/ошибками для иллюстрации техник)

test_value = [10,9,8,7,6,55,4,3,2,1]

for i in range(0,10):
    if test_value[i] == i:
        print "found the value: " + i

Если вы запустите этот код, сначала он ошибется, потому что вы не можете печатать строку плюс целое число, но также я хотел совпадение на 5, а не 55 в массиве. Итак, идем.

Установите точку останова в инструкции for, как это, и запустите код в отладчике.

enter image description here

Когда он разбивается на отладчик, вы понимаете, что это должно быть не 5, а не 55. Вместо перезапуска вы можете изменить строку 1 на test_value = [10,9,8,7,6,5,4, 3,2,1], затем выберите строку, щелкните правой кнопкой мыши и выберите Execute Line in Console..., которая изменит значение test_value на массив с параметром 5. Теперь оператор if в строке 4 станет true на значении 5. Затем будет инициирована синтаксическая ошибка в строке 5.

Теперь, если вы хотите убедиться, что у вас правильный синтаксис, вы можете изменить строку 5 на print "найденное значение:" + str (i), выберите строку и выберите "Выделить выражение". из контекстного меню правой кнопки. Когда вы нажмете "Вычислить", результат появится либо в диалоговом окне (или в этом случае, так как это команда печати, на консоли).

enter image description here

Теперь, когда я исправил эти две проблемы, я могу успешно запустить код на втором проходе, а не, возможно, несколько проходов, которые он мог бы сделать, если бы я не использовал эти методы. Эти методы действительно окупаются, если вы обнаружите ошибку в коде, где требуется некоторое время, чтобы настроить.

Очевидно, что это очень надуманный пример, но, надеюсь, это показывает, как вы можете использовать как Evaluate Expression..., так и Execute Line in Console... в ваших интересах при отладке без перезапуска приложения каждый раз, когда вы находите ошибка в коде.

Кроме того, если вы используете Django, PyCharm (профессиональный) перезапустит сервер, если вы внесете изменения в код. Поэтому, если вы смотрите на свою веб-страницу и замечаете проблему, вы можете внести изменения в код и вернуться на веб-страницу, и, как вы это делаете, перезапустимое запущенное приложение или отлаживаемое приложение перезагрузится, а новый код будет запущен при обновлении страницы. Опять же, на самом деле не редактируйте и не продолжайте, но довольно быстрый способ внести изменения и протестировать.

Ответ 3

У меня есть коммерческая версия PyCharm и просто попробовал протестировать простой python script. script:

for i in range(0,100):
    print i

Я запустил код в режиме отладки и разместил точку прерывания в инструкции "print i". Когда отладчик остановился во время первой итерации, я изменил код, чтобы выглядеть так:

for i in range(0,100):
    print i
    print 'hello'

PyCharm не перезагружает/не компилирует измененный script. Учитывая этот простой тест, лучше всего предположить, что PyCharm не динамически перезагружает .py файлы.