IPythonのマジック%pasteはどのように機能しますか?


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

回答:


136

IPythonに直接コピーすることはできません。これが手順です。

  1. IPythonにコピーする行をクリップボードにコピーします
  2. %pasteIPythonに入る
  3. Enterキーを押します
  4. 利益!

47
ただし、%pasteにはTkinterが必要なので、それがない場合は%cpasteをお勧めします
yekta

61
実際にコードをIPythonに直接コピーできます%autoindent。最初にを入力して、自動インデントを無効にする必要がある場合があります。
エリックOレビゴット2013年

EOLに感謝します。+1 for
Framester

5
ではIpython 5 、あなただけのコードを貼り付けることができます。%pasteもう必要ありません。この答えを読んでください。
Levon 2016

1
前に%は必要ありませんpaste
wordsforthewise

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 

複数行を貼り付けて、各行で自動的にコードを実行することは可能ですか?
Eric Duminil、2017年

はい、コードを貼り付けてEnterキーを押します。デバッグする場合は、%pdbまたはipdbを確認してください。
Levon

また、これは3つので始まっていることのPython REPLの出力、コードをサポートしています>。このような兆し>>> a = 1 + 2
Flimm

この間ずっと、%cpasteを実行していました。
Gershon Herczeg

1
貼り付けを行う環境や貼り付け方に依存すると思いますか?私の同僚は、Windows 10のコマンドプロンプトを使用してLinuxホストにSSHで接続し、Dockerコンテナーでipythonを開き、インデント済みのコードを(右クリックして)貼り付けようとすると、iPython 7.8.0でもインデントが追加されます。コマンドプロンプトの右クリックの動作を理解する方法は、実際にはクリップボードにあるものを何でも取り、入力しているように1文字ずつ出力するというものです。そのため、iPythonには、実際に貼り付けていることを知る方法がありません。
Kal

6

%paste が必要Tkinterです。Ubuntuにいる場合は、次の方法でインストールできます。

sudo apt-get install python-tk

Python3を使用している場合

sudo apt-get install python3-tk

次に、ipythonを再起動し、を使用%pasteしてクリップボードから貼り付けます。


1

コメントで有用な答えの1つが失われたため、別の有用なIPythonマジック関数への参照を追加するとともに、その答えを再表示したいと考えました。

@EOLの発言を最初に述べると、OPの問題を解決する1つの方法は、最初に実行%autoindentして貼り付けを行うことで自動インデントをオフにすることです(%pasteもちろんを使用している場合は不要です)。

ここにあるものにさらに情報を追加するために、IPythonのもう1つの便利なモードは、%doctest_mode貼り付けの例をコピーし、doc文字列からスニペットをテストできるようにすることです。これは、最初にプロンプ​​ト文字列を削除せずに、ドキュメントやオンラインフォーラムで見つけることができるインタラクティブなpythonセッション出力を実行する場合にも役立ちます。


1

Python 3を使用しているubuntuユーザー向け。

これpython-tkはPython 2用です。

%pastePython 3で動作させるには、python3-tkパッケージをインストールします。

sudo apt-get install python3-tk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.