Executando o ipython remotamente

9

Estou tentando executar um interpretador ipython remotamente (com Emacs 24.5 e nativo python.el), mas não tenho certeza de que tenho a abordagem correta: sempre que tento executar esse comando, por exemplo (que é acionado com C-c C-c):

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

(com <server_name>uma entrada válida em meu ~/.ssh/confige ipythondisponível nesse local remoto), recebo um erro 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'

assim como:

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

em um *Python*buffer. Isso está fazendo uso trampe é python.elcapaz de executar intérpretes remotos dessa maneira?

cjauvin
fonte

Respostas:

5

Uma maneira é usar *eshell*.

  • M-x eshell
  • cd /ssh:<server_name>:~
  • run-python /usr/bin/ipython
  • Alterne para o *Python*buffer.
PythonNut
fonte
3
Isso é legal, mas isso não possibilita o envio de código para o buffer do Python . Isso está correto?
BakaKuna
@BakaKuna Resolvi que verifique minha resposta
atevm
4

@ serv-inc answerear é a melhor abordagem aqui:

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

mas ainda falhará com o erro:

No such file or directory, ssh\

Você deve fazer referência a um executável no seu caminho, para que os comandos diretos do shell não sejam reproduzidos, mas escrever um script de wrapper resolverá isso, vamos nomear remote-python:

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

-t forçará a alocação de pseudo-terminal.

$@ delegará todos os argumentos recebidos no ipython remoto.

Este script deve estar em um diretório definido em sua PATHvariável. Você pode verificar isso dentro do Emacs com:

(getenv "PATH")

então você pode definir remot-pythoncomo seu intérprete:

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

Se você receber um aviso sobre o suporte de redline:

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

Nota:

A beleza desse método é que ele deve funcionar com quase todos os intérpretes. Também testei com o REPL do julia-mode e você pode escrever uma função interativa para alternar seus intérpretes remotos / locais.

atevm
fonte
É bom saber que isso ajudou um pouco. Obrigado
serv-inc
0

Tente avaliar (ou até mesmo .emacs)

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

e use como sua avaliação local em qualquer arquivo python.

A primeira linha define o controle remoto ipythoncomo seu intérprete padrão. A segunda linha corrige um problema de ipython.

serv-inc
fonte