Як працює магічний% paste IPython?


93

Я хочу скопіювати вже відступний код 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.


3
Я знаю, це, мабуть, уже в stackoverflow, але він не знайшов його після 3 пошукових запитів, тому я додав власну версію.
Фраместер

Відповіді:


136

Ви не можете копіювати безпосередньо в IPython. Це кроки:

  1. Скопіюйте рядки, які потрібно скопіювати, у IPython у буфер обміну
  2. Введіть %pasteIPython
  3. Натисніть Enter
  4. Прибуток!

47
% paste вимагає Tkinter, тому, якщо у вас немає, ще одна хороша ставка -% cpaste
yekta

61
Ви фактично можете скопіювати код безпосередньо на IPython: можливо, спочатку потрібно буде відключити автоматичне відступ, ввівши його %autoindent.
Eric O Lebigot

Дякую EOL! +1 для вас
Фраместер

5
У Ipython 5 вас можна просто вставити код. Більше не потрібно %paste. Прочитайте цю відповідь .
Левон

1
Вам раніше не потрібен% paste.
словазвідки

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

21

Як і в Ipython 5, вам не потрібна якась магічна команда, просто вставте її

ipython5

Завдяки prompt_toolkit, IPythonтепер підтримує:

  • Підсвічування синтаксису під час введення
  • Справжнє багаторядкове редагування (клавіші зі стрілками вгору та вниз рухаються між рядками)
  • Багаторядкова вставка без порушення відступу або негайного виконання коду
  • Кращий інтерфейс для заповнення коду (ми плануємо вдосконалити це ще) Додаткова підтримка миші

Більше про це тут

Щоб оновити ipythonдо останньої версії

pip install ipython --upgrade 

Чи можливо вставити багато рядків і виконати код автоматично в кожному рядку?
Ерік Думініл

так, просто вставте код і натисніть Enter. якщо ви хочете налагодити, перевірте% pdb або ipdb. приклад
Левон

Це також підтримує висновок Python repl, коду, який починається з трьох >знаків, подібних до цього:>>> a = 1 + 2
Flimm

Весь цей час я робив% cpaste .. приємно!
Гершон

1
Я думаю, що це залежить від середовища, з якого ви робите обклеювання та як ви робите обклеювання? Мій колега використовує командний рядок Windows 10 для передачі SSH на наш хост Linux, відкриває там ipython у контейнері Docker і намагається вставити вже відступний код ( клацанням правою кнопкою миші ), і він отримує додаткові відступи навіть у iPython 7.8.0. Наскільки я розумію поведінку командного рядка правою кнопкою миші, це те, що він фактично просто займає все, що є в буфері обміну, і видає його за символом, як ніби ви його набираєте. Тож iPython не може знати, що ви насправді вставляєте.
Кал

6

%paste вимагає Tkinter. Якщо ви перебуваєте в ubuntu, ви можете встановити його

sudo apt-get install python-tk

Якщо ви працюєте на Python3

sudo apt-get install python3-tk

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


1

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

Спочатку перегляньте те, що сказав @EOL, один із способів вирішити проблему ОП - це вимкнути автоматичне відступ, спершу запустивши %autoindentта зробивши пасту ( %pasteзвичайно, не потрібно, якщо ви використовуєте ).

Тепер, щоб додати більше інформації до того, що вже є тут, ще одним корисним режимом в IPython є те, %doctest_modeщо дозволяє копіювати приклад вставки та тестувати фрагменти з рядків doc. Це також корисно для виконання інтерактивного виводу сеансу python, який ви можете знайти в документації та на форумах в Інтернеті, без попереднього викреслення рядків підказок.


1

Для користувачів ubuntu, які перебувають на Python 3.

Це python-tkдля Python 2.

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

sudo apt-get install python3-tk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.