Esecuzione di ipython in remoto


9

Sto provando a eseguire un interprete ipython da remoto (con Emacs 24.5 e nativo python.el), ma non sono sicuro di avere l'approccio giusto: ogni volta che provo ad eseguire un comando del genere per esempio (che viene attivato con C-c C-c):

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

(con <server_name>una voce valida nella mia ~/.ssh/confige ipythondisponibile in quella posizione remota), ricevo un errore come:

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'

così come:

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

in un *Python*buffer .. Sta facendo uso di tramped è in python.elgrado di eseguire interpreti remoti in questo modo?

Risposte:


5

Un modo è usare *eshell*.

  • M-x eshell
  • cd /ssh:<server_name>:~
  • run-python /usr/bin/ipython
  • Passa al *Python*buffer.

3
Questo è carino, ma ciò non consente di inviare codice al buffer Python . È corretto?
BakaKuna,

@BakaKuna Ho risolto il problema controllando la mia risposta
atevm,

4

@ serv-inc answear è l'approccio migliore qui:

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

ma fallirà comunque con l'errore:

No such file or directory, ssh\

Devi fare riferimento a un eseguibile sul tuo percorso, quindi i comandi shell diretti non vengono riprodotti, ma scrivere uno script wrapper lo risolverà, chiamiamolo remote-python:

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

-t forzerà l'allocazione pseudo-terminale.

$@ delegherà tutti gli argomenti ricevuti all'ipython remoto.

Questo script deve trovarsi in una directory definita nella PATHvariabile. Puoi verificarlo all'interno di Emacs con:

(getenv "PATH")

quindi puoi impostare remot-pythoncome interprete:

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

Se ricevi un avviso sul supporto redline:

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

Nota:

La bellezza di questo metodo, che dovrebbe funzionare con quasi tutti gli interpreti. L'ho anche testato con REPL di julia-mode e puoi scrivere una funzione interattiva per cambiare i tuoi interpreti remoti / locali.


Buono a sapersi che mi ha aiutato un po '. Grazie
serv-inc

0

Prova a valutare (o anche a .emacs)

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

e usa come il tuo eval locale su qualsiasi file Python.

La prima riga imposta il telecomando ipythoncome interprete predefinito. La seconda riga risolve un problema con ipython.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.