Как работает волшебная паста% IPython?

95

Я хочу скопировать код 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.

Framester
источник
3
Я знаю, что, вероятно, он уже находится в stackoverflow, но после трех поисков он не нашел его, поэтому я добавил свою версию.
Framester

Ответы:

140

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

  1. Скопируйте строки, которые вы хотите скопировать в IPython, в буфер обмена
  2. Войдите %pasteв IPython
  3. Нажмите Ввод
  4. Прибыль!
Framester
источник
48
Однако для% paste требуется Tkinter, поэтому, если у вас его нет, еще одна хорошая ставка -% cpaste
yekta
61
Фактически вы можете скопировать код в IPython напрямую: вам, возможно, сначала придется отключить автоматический отступ, введя %autoindent.
Эрик О Лебигот
Спасибо, EOL! +1 для вас
Framester 01
5
В Ipython 5 вы можете просто вставить код. Больше не нужно %paste. Прочтите этот ответ .
Левон
1
Вы также не нуждаетесь в% раньше paste.
wordsforward
40

Разъяснение по шагам:

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

  • Введите в командной строке 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
Вам не нужно нажимать Ctrl-V. Просто введите% paste и нажмите Enter.
SeF
23

Начиная с Ipython 5 вам не нужна магическая команда, просто вставьте ее

ipython5

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

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

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

Для обновления ipythonдо последней версии

pip install ipython --upgrade 
Левон
источник
Можно ли вставлять многострочные строки и автоматически выполнять код на каждой строке?
Эрик
да, просто вставьте код и нажмите ввод. если вы хотите отладить, проверьте% pdb или ipdb. Пример
Левон
Это также поддерживает вывод кода Python repl, который начинается с трех >знаков, например:>>> a = 1 + 2
Flimm 04
Все это время я делал% cpaste .. здорово!
Гершон
1
Я думаю, это зависит от среды, в которой вы делаете вставку, и от того, как вы выполняете вставку? Мой коллега использует командную строку Windows 10 для SSH на нашем хосте Linux, открывает там ipython в контейнере Docker и пытается вставить код с уже имеющимся отступом ( щелкнув правой кнопкой мыши ), и он получает дополнительный отступ даже в iPython 7.8.0. Насколько я понимаю, поведение правой кнопки мыши в командной строке состоит в том, что на самом деле она просто берет все, что находится в буфере обмена, и выводит это символ за символом, как если бы вы это вводили. Итак, iPython не может узнать, что вы на самом деле вставляете.
Kal
6

%paste требует Tkinter. Если вы используете ubuntu, вы можете установить его с помощью

sudo apt-get install python-tk

Если вы используете Python3

sudo apt-get install python3-tk

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

ЧилларАнанд
источник
2

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

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

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

haridsv
источник
1

Для пользователей Ubuntu, использующих Python 3.

Это python-tkдля Python 2.

Для %pasteработы на Python 3 установите python3-tkпакет:

sudo apt-get install python3-tk
Утапынго
источник