Exécution d'ipython à distance


9

J'essaie d'exécuter un interpréteur ipython à distance (avec Emacs 24.5 et natif python.el), mais je ne suis pas sûr d'avoir la bonne approche: chaque fois que j'essaie d'exécuter une telle commande par exemple (qui se déclenche avec C-c C-c):

Run Python: /ssh:<server_name>:/usr/local/bin/ipython -i

(avec <server_name>une entrée valide dans mon ~/.ssh/config, et ipythondisponible à cet emplacement distant), j'obtiens une erreur comme:

Warning (emacs): Python shell prompts cannot be detected.
If your emacs session hangs when starting python shells
recover with `keyboard-quit' and then try fixing the
interactive flag for your interpreter by adjusting the
`python-shell-interpreter-interactive-arg' or add regexps
matching shell prompts in the directory-local friendly vars:
  + `python-shell-prompt-regexp'
  + `python-shell-prompt-block-regexp'
  + `python-shell-prompt-output-regexp'
Or alternatively in:
  + `python-shell-prompt-input-regexps'
  + `python-shell-prompt-output-regexps'

aussi bien que:

env: /ssh:<server_name>:/usr/local/bin/ipython: No such file or directory

dans un *Python*tampon .. Est - ce faisant usage de tramp, et est en python.elmesure d'exécuter des interprètes à distance à façon telle?

Réponses:


5

Une façon est d'utiliser *eshell*.

  • M-x eshell
  • cd /ssh:<server_name>:~
  • run-python /usr/bin/ipython
  • Passez au *Python*tampon.

3
C'est bien, mais cela ne permet pas d'envoyer du code au tampon Python . Est-ce exact?
BakaKuna

@BakaKuna J'ai résolu cette vérification de ma réponse
atevm

4

@ serv-inc answerear est la meilleure approche ici:

(setq python-shell-interpreter "ssh yourhost ipython" python-shell-interpreter-args "--simple-prompt -i")

mais il échouera toujours avec l'erreur:

No such file or directory, ssh\

Vous devez référencer un exécutable sur votre chemin, afin que les commandes shell directes ne soient pas lues, mais l'écriture d'un script wrapper résoudra cela, nommons-le remote-python:

#!/usr/bin/env bash
ssh hostname -t "ipython $@"

-t forcera l'allocation du pseudo-terminal.

$@ déléguera tous les arguments reçus à l'ipython distant.

Ce script doit se trouver dans un répertoire défini dans votre PATHvariable. Vous pouvez vérifier cela dans Emacs avec:

(getenv "PATH")

alors vous pouvez définir remot-pythoncomme votre interprète:

(setq python-shell-interpreter "remote-python"
            python-shell-interpreter-args "-i --simple-prompt")

Si vous recevez un avertissement concernant l'assistance Redline:

(setq python-shell-completion-native-enable nil)

Remarque:

La beauté de cette méthode, qu'elle devrait fonctionner avec presque tous les interprètes. Je l'ai également testé avec REPL en mode julia et vous pouvez écrire une fonction interactive pour changer vos interprètes distants / locaux.


Bon à savoir que cela a aidé un peu. Merci
serv-inc

0

Essayez d'évaluer (ou même en .emacs)

(setq python-shell-interpreter "ssh yourhost ipython"
      python-shell-interpreter-args "--simple-prompt -i")

et utilisez comme votre eval local sur n'importe quel fichier python.

La première ligne définit la télécommande ipythoncomme votre interprète par défaut. La deuxième ligne corrige un problème ipython.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.