Проблемы при отображении Interpreter (IPython) после запуска программы в PyCharm

У меня есть PyCharm Professional Edition 3.5 5.0, настроенный на

используйте IPython, когда это возможно

и в моих конфигурациях Run/Debug я установил

показать переводчика потом

Я часто использую интерактивный переводчик и мне очень нравится IPython, но есть некоторые вещи, которые мне не нравятся в том, как это обрабатывается в PyCharm:

  • любой input() в моих программах возвращает пустые строки.

  • Кроме того, при возникновении ошибки я больше не могу взаимодействовать с Программой. (вы можете запустить программу на Python с флагом -i)

  • Между последней строкой в консоли и текущей строкой много места

В IPython приглашение ...: в блоке кода не имеет отступа в 2 пробела и поэтому не выровнено с приглашением In [?]:.

  • Когда происходит ошибка, я получаю что-то вроде этого:
Traceback (most recent call last):
  File "C:\Program Files (x86)\PyCharm\helpers\pydev\pydev_run_in_console.py", line 69, in <module>
    globals = run_file(file, None, None)
  File "C:\Program Files (x86)\PyCharm\helpers\pydev\pydev_run_in_console.py", line 29, in run_file
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files (x86)\PyCharm\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc) 
  File "C:/Users/ca/Python/Bundeswettbewerb Informatik/Aufgabe2/Ameisen.py", line 133, in <module>
    function_that_caused_error()

Мне не нужно/не хочу видеть след от внутренних органов.

  • При запуске файла необходимо запустить IPython, который занимает несколько секунд, даже если я не собираюсь использовать интерпретированный впоследствии. Я хотел бы, чтобы PyCharm запускал IPython после завершения программы или после начала отладки (вы можете запустить IPython в интерактивной консоли, выполнив import IPython; IPython.start_ipython()

Есть и другие мелочи, которые мне не нравятся:

  • Когда IPython запущен, он выводит на консоль много текста. Я не хочу видеть ничего из этого, кроме, возможно, номера версии (обычно это можно сделать с помощью опции --no-banner, но добавление его в опции интерпретатора не работает)

  • когда вы что-то печатаете и нажимаете Up, он заменяет написанное мной последним элементом моей истории вместо того, чтобы заменить его последним элементом моей истории, который начинается с того, что я напечатал. Обычный IPython делает это.

  • Я хотел бы иметь автоматическое завершение кода без необходимости нажимать Ctrl + Space в консоли

"Проблемы" упорядочены по важности. Кто-нибудь знает, как изменить некоторые из них? Я мог бы прекратить использовать IPython, который решил бы вторую, третью и четвертую проблему, но другие все еще сохранятся. Все это поведение (за исключением материала IPython) очень хорошо реализовано в PyScripter.

EDIT:

Я нашел решение первых двух проблем и проблемы с баннером IPython. Источник для интерактивного интерпретатора PyDev (который используется PyCharm) находится в Windows в C:\Program Files (x86)\PyCharm\helpers\PyDev (путь мой варьируется, конечно).

Таким образом, первая проблема может быть решена путем редактирования файла _pydev_imps/_pydev_execfile.py. Оберните строку 18 (exec(compile(contents+"\n", file, 'exec'), glob, loc)) в блок try ... except со следующим кодом в качестве обработчика исключений import traceback; traceback.print_exc(). Это прекратит работу вашей программы на Python, если возникнет ошибка, и вы впоследствии сможете взаимодействовать с переменной.

Проблему 2 можно решить, отредактировав огонь pydev_run_in_console.py. Добавьте этот импорт в начале файла: from pydev_console_utils import StdIn и вставьте sys.stdin = StdIn(interpreter, host, client_port) после строки 61 перед добавлением импорта.

Чтобы решить проблему с баннером, вам необходимо скачать самую последнюю версию исходного кода PyDev здесь и заменить файлы pydev_ipython_console и pydev_ipython_console_011 их более новыми версиями. В более новой версии первого файла метод __init__ в строке 22 имеет аргумент под названием show_banner со значением по умолчанию True. Измените это на False.

Ответы

Ответ 1

Вероятно, это не тот ответ, который вы ищете, но исходя из моего опыта использования IPython для продуктов InteliJ (PyCharm, Ultimate), я не рекомендую использовать их версию IPython. Он полон ошибок, устарел, и вы потеряете драгоценное время на исправление проблем, а не на программирование.

Вы пробовали jupyter notebook? Если вы установили python с anaconda, он уже установлен. Чтобы запустить его, откройте терминал и введите:

jupyter notebook

Если ваш браузер не открывается автоматически, перейдите на http://localhost:8888


Примечание:

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


Ресурсы:

Ответ 2

Честно говоря, попробовали ли вы запустить новую версию PyCharm и импортировать свои настройки? 3.5 довольно устарел (я сам на 4.5.3, самая новая версия 5.0), и я считаю, что больше поддержки предлагается для IPython в более новых версиях. https://www.jetbrains.com/pycharm/help/ipython.html. Особенно, если вы студент, это может не помешать сделать это. Я знаю, что более старые версии PyCharm были более сложными, чем недавние выпуски.