Проблемы при отображении 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 были более сложными, чем недавние выпуски.