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

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

, когда возможно, использую IPython

и в своих настройках Run / Debug, которые я установил

потом показывать интерпретатор

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

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

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

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

    [1130 есть много места ]

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

  • Когда происходит ошибка, я получаю что-то вроде этого:
Traceback (most recent call last):
  File "C:\Program Files (x86)\PyCharm\helpers\pydev\pydev_run_in_console.py", line 69, in 
    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 
    function_that_caused_error()

Мне не нужно / я не хочу видеть трассировку от внутренних устройств.

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

. t like:

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

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

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

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

РЕДАКТИРОВАТЬ:

Я нашел решения первых двух проблем и проблемы с баннером 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.

26
задан ZF007 5 July 2019 в 10:50
поделиться