Есть ли «Редактировать и продолжить» в 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, но перезагрузки не было.

3 Solutions collect form web for “Есть ли «Редактировать и продолжить» в PyCharm? Перезагрузите код в запущенную программу, например, в Eclipse / PyDev?”

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, как это, и запустите код в отладчике.

введите описание изображения здесь

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

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

введите описание изображения здесь

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

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

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

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

  1. Работа в Pycharm по проекту python 🙂
  2. Выполните свой код в режиме отладки (не пробовал Release до сих пор)
  3. Измените код в одном из ваших модулей, импортированных в течение жизни вашей программы
  4. Сделайте паузу в программе . Для этого вы можете нажать кнопку «Пауза» в представлении PyCharms Debug, а затем любое место в главном окне приложения, где ему нужно что-то сделать (например, в заголовке вкладки). Если у вас долго работающая задача и нет пользовательского интерфейса, вы можете разместить точку останова в месте, где часто приходит ваша программа.
  5. В представлении «Отладка» перейдите на вкладку « Консоль ». Появится кнопка слева. Показать командную строку . Нажмите здесь.
  6. В консоли введите перезагрузку (MyModifiedModule), если этот вызов завершился неудачно, напишите импорт MyModifiedModule и повторите попытку.
  7. Нажмите «Обновить» в PyCharm.
  8. Попробуйте код, который вы исправили.

Просмотр PyCharm Debug

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

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

Спасибо.

У меня есть коммерческая версия PyCharm и просто попробовал протестировать простой скрипт python. Скрипт следующий:

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

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

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

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

  • В PyCharm есть несколько курсорных функций?
  • PyCharm: форсирование синтаксиса шаблонов Django Highligting
  • Может ли PyCharm установить контрольные точки на ноутбуке ipython?
  • Получение PyCharm для распознавания python в подсистеме Linux linux (bash on windows)
  • Как установить wxversion для Python
  • PyCharm и фильтры для внешних инструментов
  • Код выхода Pycharm 0
  • Как импортировать / добавить существующий файл Python в проект PyCharm?
  •  
    Interesting Posts for Van-Lav

    Как включить сторонние пакеты Python в плагины Sublime Text 2

    Как получить список IP-адресов?

    Окно Python Turtle с полосами прокрутки

    Попытка ввести целое число в файл и получить его как одно. Python 3x

    Модуль Python с доступом к английским словарям, включая определения слов

    Как создать всплывающее сообщение с системным лотком с помощью python? (Windows)

    Удаление html-тегов при обходе wikipedia с помощью urllib2 и Beautifulsoup на python

    Windows 7 – pydoc из cmd

    Как вывести std :: vector <int> как список Python с помощью SWIG?

    Как получить учетные данные python-social-auth для google drive sdk?

    Правильное использование пути в Cygwin: разница между `python c: \ somefile.py` и` python / cygdrive / c / somefile.py`

    Как создать составные столбцы с декларацией SQLAlchemy?

    Проблема Django QuerySet .defer () – ошибка или функция?

    Python: неверный литерал для int () с базой 10: '808.666666666667'

    Как создать предсказуемую перетасовку последовательности без предварительного создания всей последовательности?

    Python - лучший язык программирования в мире.