IPython'un sihirli% macunu nasıl çalışır?


95

Zaten girintili Python kodunu / tüm fonksiyonları ve sınıfları IPython'a kopyalamak istiyorum. Girintiyi her denediğimde hata veriyor ve aşağıdaki hata mesajını alıyorum:

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
Biliyorum, muhtemelen zaten stackoverflow'da, ancak 3 aramadan sonra bulamadı, bu yüzden kendi sürümümü ekledim.
Framester

Yanıtlar:


139

Doğrudan IPython'a kopyalayamazsınız. Bu adımlar şunlardır:

  1. IPython'a kopyalamak istediğiniz satırları panoya kopyalayın
  2. %pasteIPython'a girin
  3. Enter tuşuna basın
  4. Kar!

47
% macunu başka iyi bir bahis% cpaste olduğunu yoksa eğer öyleyse, gerçi Tkinter gerektirir
yekta

61
Aslında kodu doğrudan IPython'a kopyalayabilirsiniz: önce girerek otomatik girintiyi devre dışı bırakmanız gerekebilir %autoindent.
Eric O Lebigot

Teşekkür EOL! +1 Senin için
Framester

5
Sadece Ipython 5 kodu yapıştırabilirsiniz. %pasteArtık ihtiyacım yok. Bu cevabı okuyun .
Levon

1
Daha önce% 'ye de ihtiyacınız pasteyok.
wordsforthewise

40

Adımlarla ilgili bir açıklama:

  • İlk önce hedef çizgileri panonuza kopyalayın.

  • İPython istemine yazın:

    • Tkinter üzerindeyse: girin %paste
    • Aksi takdirde: girin %cpaste
  • Yapıştır (Ctrl-V) ve enter tuşuna basın.

  • Ardından yazın --ve enter tuşuna basın.

Örneğin:

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 yapmanız gerekmez. Yalnızca% paste yazın ve enter tuşuna basın.
SeF

23

Ipython 5 itibariyle herhangi bir sihirli komuta ihtiyacınız yok, sadece yapıştırın

ipython5

Teşekkürler prompt_toolkit, IPythonşimdi destekliyor:

  • Yazarken sözdizimi vurgulama
  • Gerçek çok satırlı düzenleme (yukarı ve aşağı ok tuşları satırlar arasında hareket eder)
  • Girintiyi bozmadan veya kodu hemen çalıştırmadan çok satırlı yapıştırma
  • Daha iyi kod tamamlama arayüzü (bunu daha da geliştirmeyi planlıyoruz) İsteğe bağlı fare desteği

Daha fazlası burada

ipythonEn son sürüme yükseltmek için

pip install ipython --upgrade 

Çok satırlı yapıştırmak ve kodu her satırda otomatik olarak yürütmek mümkün müdür?
Eric Duminil

evet, sadece kodu yapıştırın ve enter tuşuna basın. Hata ayıklamak istiyorsanız,% pdb veya ipdb'ye bakın. örnek
Levon

Bu aynı zamanda aşağıdaki >gibi üç işaretle başlayan kod olan Python repl çıktısını da destekler :>>> a = 1 + 2
Flimm

Tüm bu zaman boyunca% cpaste yapıyorum .. güzel!
Gershon Herczeg

1
Ben düşünüyorum da bağlıdır çevreye Eğer yapıştırma yaptığını ve hangi nasıl sen yapıştırma yapıyorsun? Meslektaşım, Linux ana bilgisayarımıza SSH için Windows 10'un komut istemini kullanıyor, orada bir Docker konteynerinde ipython'u açıyor ve zaten girintili kodu yapıştırmaya çalışıyor ( sağ tıklayarak ) ve iPython 7.8.0'da bile ekstra girinti alıyor. Komut isteminin sağ tıklama davranışını anlamamın yolu, aslında panodaki her şeyi alması ve yazıyormuşsunuz gibi karakter karakter çıktı vermesidir. Yani iPython'un aslında yapıştırdığınızı bilmesinin bir yolu yok.
Kal

6

%paste gerektirir Tkinter. Ubuntu'daysanız, bunu şu şekilde kurabilirsiniz:

sudo apt-get install python-tk

Python3 kullanıyorsanız

sudo apt-get install python3-tk

Ardından ipython'u yeniden başlatın ve panonuzdan %pasteyapıştırmak için kullanın .


2

Yararlı yanıtlardan biri yorumlarda kayboldu, bu yüzden başka bir yararlı IPython sihirli işlevi için bir referans ekleyerek onu yeniden ifade etmek istedim.

İlk olarak @EOL'un söylediği şeyi yeniden ifade etmek gerekirse, OP'nin problemini çözmenin bir yolu, ilk önce %autoindentyapıştırmayı çalıştırıp yaparak otomatik girintiyi kapatmaktır %paste(tabii kullanıyorsanız gerekli değildir ).

Şimdi, burada zaten mevcut olana daha fazla bilgi eklemek için, IPython'da bir tane daha kullanışlı mod, %doctest_modeyapıştırma örneğini kopyalamanıza ve doc dizelerindeki parçacıkları test etmenize olanak tanır. Bu aynı zamanda, ilk önce komut dizilerini çıkarmak zorunda kalmadan, belgelerde ve çevrimiçi forumlarda bulabileceğiniz etkileşimli python oturum çıktısını yürütmek için de kullanışlıdır.


1

Python 3 kullanan ubuntu kullanıcıları için.

python-tkPython 2 içindir.

Yapmak için %pastePython 3 üzerinde çalışmaya yüklemek python3-tkpaketi:

sudo apt-get install python3-tk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.