Как работает паста IPython magic%?

Я хочу скопировать уже отпечатанный код Python/целые функции и классы в IPython. Каждый раз, когда я пытаюсь вдавить, ввернуто, и я получаю следующее сообщение об ошибке:

IndentationError: unindent does not match any outer indentation level (<ipython-input-23-354f8c8be51b>, line 12)

If you want to paste code into IPython, try the %paste and %cpaste magic functions.

Ответ 1

Вы не можете напрямую копировать в IPython. Это следующие шаги:

  • Скопируйте строки, которые вы хотите скопировать в IPython, в буфер обмена
  • Введите %paste в IPython
  • Нажмите enter
  • Profit!

Ответ 2

Прояснение этапов:

  • Сначала скопируйте целевые строки в буфер обмена.

  • Введите запрос iPython:

    • Если на Tkinter: введите %paste
    • В противном случае: введите %cpaste
  • Вставить (Ctrl-V) и нажать Enter.

  • Затем введите -- и нажмите enter.

Например:

In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:for l in "Hello World":
:    print l,
:--
H e l l o   W o r l d

Ответ 3

Как и в Ipython 5, вам не нужна волшебная команда, просто вставьте ее

ipython5

Благодаря prompt_toolkit, IPython теперь поддерживает:

  • Подсветка синтаксиса при вводе
  • Реальное многострочное редактирование (клавиши со стрелками вверх и вниз перемещаются между строками)
  • Многострочная паста без отрыва или немедленного выполнения кода
  • Улучшенный интерфейс завершения кода (мы планируем улучшить его) Дополнительная поддержка мыши

Подробнее об этом здесь

Чтобы обновить IPython до последней версии

pip install ipython --upgrade 

Ответ 4

%paste требуется Tkinter. Если вы находитесь в ubuntu, вы можете установить его на

sudo apt-get install python-tk

Затем перезапустите ipython и используйте %paste для вставки из вашего буфера обмена.

Ответ 5

Один из полезных ответов был потерян в комментариях, поэтому он хотел повторить его вместе с добавлением ссылки на другую полезную магическую функцию IPython.

Сначала, чтобы подтвердить то, что сказал @EOL, один из способов решения проблемы с OP состоит в том, чтобы отключить автоиндексацию, сначала выполнив %autoindent и выполнив вставку (не обязательно, если вы используете %paste, конечно).

Теперь, чтобы добавить дополнительную информацию к тому, что уже существует здесь, еще один полезный режим в IPython - %doctest_mode, который позволяет копировать пример вставки и тестировать фрагменты из строк документа. Это также полезно для выполнения интерактивного вывода сеанса python, который можно найти в документации и онлайн-форумах, без необходимости сначала вычеркивать строки приглашения.

Ответ 6

Для пользователей ubuntu, которые находятся на Python 3.

python-tk предназначен для Python 2.

Чтобы сделать работу %paste на Python 3, установите пакет python3-tk:

sudo apt-get install python3-tk