web-dev-qa-db-fra.com

Comment fonctionne la% pâte magique d'IPython?

Je veux copier du code Python/des fonctions et des classes déjà indentées dans IPython. A chaque fois que j'essaye, l'indentation est foutue et le message d'erreur suivant s'affiche:

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.

88
Framester

Vous ne pouvez pas copier directement sur IPython. Ce sont les étapes:

  1. Copiez les lignes que vous voulez copier dans IPython dans le presse-papiers
  2. Entrez %paste dans IPython
  3. Appuyez sur Entrée
  4. Profit!
131
Framester

Une clarification sur les étapes:

  • Commencez par copier les lignes cibles dans votre presse-papiers.

  • Tapez dans l'invite iPython:

    • Si sur Tkinter: entrez %paste 
    • Sinon: entrez %cpaste 
  • Collez (Ctrl-V) et appuyez sur Entrée.

  • Ensuite, tapez -- et appuyez sur Entrée.

Par exemple:

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
35
Yuly

À partir de Ipython 5, vous n'avez besoin d'aucune commande magique, collez-la simplement

ipython5

Grâce à Prompt_toolkit, IPython prend désormais en charge:

  • Mise en évidence de la syntaxe lors de la frappe
  • Édition multi-lignes réelle (les touches fléchées haut et bas permettent de passer d'une ligne à une autre)
  • Coller plusieurs lignes sans casser l'indentation ni exécuter le code immédiatement
  • Meilleure interface de complétion de code (nous prévoyons de l'améliorer davantage) Prise en charge optionnelle de la souris

Plus sur ceci ici

Pour mettre à jour ipython vers la dernière version

pip install ipython --upgrade 
21
Levon

%paste requiert Tkinter. Si vous êtes dans Ubuntu, vous pouvez l’installer de la manière suivante: 

Sudo apt-get install python-tk

Si vous êtes sur Python3

Sudo apt-get install python3-tk

Puis redémarrez ipython et utilisez %paste pour le coller dans votre presse-papiers.

6
ChillarAnand

Pour les utilisateurs d'ubuntu sous Python 3.

Le python-tk est pour Python 2.

Pour que %paste fonctionne sur Python 3, installez le paquetage python3-tk:

Sudo apt-get install python3-tk
1
utapyngo

L'une des réponses utiles a été perdue dans les commentaires. Nous avons donc souhaité la reformuler en ajoutant une référence pour une autre fonction magique utile IPython.

Pour commencer par rappeler ce que @EOL a dit, un moyen de résoudre le problème de OP consiste à désactiver l'auto-indentation en exécutant d'abord %autoindent et en effectuant le collage (inutile si vous utilisez %paste, bien sûr).

Maintenant, pour ajouter plus d’informations à ce qui existe déjà ici, un autre mode utile dans IPython est %doctest_mode, qui vous permet de copier un exemple de collage et de tester des extraits de code provenant de chaînes de documentation. Cela est également utile pour exécuter une sortie de session python interactive que vous pourriez trouver dans la documentation et les forums en ligne, sans avoir à effacer au préalable les chaînes de l'invite.

0
haridsv