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/config
e ipython
disponí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 tramp
e é python.el
capaz de executar intérpretes remotos dessa maneira?
@ serv-inc answerear é a melhor abordagem aqui:
mas ainda falhará com o erro:
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
:-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
PATH
variável. Você pode verificar isso dentro do Emacs com:então você pode definir
remot-python
como seu intérprete:Se você receber um aviso sobre o suporte de redline:
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.
fonte
Tente avaliar (ou até mesmo
.emacs
)e use como sua avaliação local em qualquer arquivo python.
A primeira linha define o controle remoto
ipython
como seu intérprete padrão. A segunda linha corrige um problema de ipython.fonte