Ejecutar ipython de forma remota


9

Estoy tratando de ejecutar un intérprete de ipython de forma remota (con Emacs 24.5 y nativo python.el), pero no estoy seguro de tener el enfoque correcto: cada vez que intento ejecutar un comando de este tipo (que se activa con C-c C-c):

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

(con <server_name>una entrada válida en my ~/.ssh/configy ipythondisponible en esa ubicación remota), aparece un error como:

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'

tanto como:

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

en un *Python*búfer .. ¿Está haciendo uso de tramp, y es python.elcapaz de ejecutar intérpretes remotos de tal manera?

Respuestas:


5

Una forma es usar *eshell*.

  • M-x eshell
  • cd /ssh:<server_name>:~
  • run-python /usr/bin/ipython
  • Cambiar al *Python*búfer.

3
Esto es bueno, pero esto no permite enviar código al búfer de Python . ¿Es eso correcto?
BakaKuna

@BakaKuna Resolví esa verificación de mi respuesta
atevm

4

@ serv-inc answear es el mejor enfoque aquí:

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

pero seguirá fallando con el error:

No such file or directory, ssh\

Debe hacer referencia a un ejecutable en su ruta, para que los comandos de shell directos no se reproduzcan, pero escribir un script de contenedor lo resolverá, vamos a nombrarlo remote-python:

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

-t forzará la asignación de pseudo terminal.

$@ delegará todos los argumentos recibidos al ipython remoto.

Este script debe estar en un directorio que esté definido en su PATHvariable. Puede verificar esto dentro de Emacs con:

(getenv "PATH")

entonces puede establecer remot-pythoncomo su intérprete:

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

Si recibe una advertencia sobre el soporte de línea roja:

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

Nota:

La belleza de este método es que debería funcionar con casi todos los intérpretes. También lo probé con el REPL de julia-mode y puedes escribir una función interactiva para cambiar tus intérpretes remotos / locales.


Es bueno saber que ayudó un poco. Gracias
serv-inc

0

Intenta evaluar (o incluso en .emacs)

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

y use como su evaluación local en cualquier archivo de Python.

La primera línea establece el control remoto ipythoncomo su intérprete predeterminado. La segunda línea corrige un problema de ipython.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.