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次搜索后却找不到,因此我添加了自己的版本。
Framester 2012年

Answers:


136

您不能直接复制到IPython。步骤如下:

  1. 将要复制的行复制到IPython中并复制到剪贴板中
  2. 进入%pasteIPython
  3. 按回车
  4. 利润!

47
虽然%paste需要Tkinter,所以如果您没有另一个好的选择,那就是%cpaste
yekta 2012年

61
实际上,您可以直接将代码复制到IPython:您可能必须先输入来禁用自动缩进%autoindent
Eric O Lebigot

谢谢EOL!为您+1
Framester 2013年

5
Ipython 5 你可以将代码粘贴。不需要%paste了。阅读此答案
莱文

1
您都不需要%paste
wordforthewise

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_toolkitIPython现在支持:

  • 键入时突出显示语法
  • 真正的多行编辑(上下箭头键在行之间移动)
  • 多行粘贴而不会破坏缩进或立即执行代码
  • 更好的代码完成界面(我们计划进一步完善)可选鼠标支持

这里更多

升级ipython到最新版本

pip install ipython --upgrade 

是否可以粘贴多行并在每行自动执行代码?
艾里克·杜米尼尔

是的,只需粘贴代码,然后按Enter。如果要调试,请查看%pdb或ipdb。 示例
Levon

这也支持Python repl的输出,该代码以如下三个>符号开头:>>> a = 1 + 2
Flimm,2018年

一直以来我一直在做%cpaste ..很好!
Gershon Herczeg

1
认为这取决于环境,从你正在做的粘贴和如何你是做粘贴?我的同事正在使用Windows 10的命令提示符将SSH SSH到我们的Linux主机中,在其中的Docker容器中打开ipython并尝试粘贴已经缩进的代码(通过右键单击),即使在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 magic函数的引用。

首先重述@EOL所说的话,解决OP问题的一种方法是通过先运行%autoindent并执行粘贴(如果使用%paste,则不需要)来关闭自动缩进。

现在向此处已有的内容添加更多信息,在IPython中另一个有用的模式是%doctest_mode允许您复制粘贴示例并测试文档字符串中的代码片段。这对于执行交互式python会话输出也很有用,您可以在文档和在线论坛中找到它们,而不必先去除提示字符串。


1

对于使用Python 3的ubuntu用户。

python-tk是针对Python 2的。

%paste使用Python 3,请安装以下python3-tk软件包:

sudo apt-get install python3-tk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.