Zdalne uruchamianie ipython

9

Próbuję uruchomić interpreter ipython zdalnie (z Emacsem 24.5 i natywnym python.el), ale nie jestem pewien, czy mam odpowiednie podejście: za każdym razem, gdy próbuję uruchomić takie polecenie, na przykład (które jest uruchamiane C-c C-c):

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

(z <server_name>poprawnym wpisem w mojej ~/.ssh/configi ipythondostępnym w tej zdalnej lokalizacji) pojawia się błąd:

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'

jak również:

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

w *Python*buforze. Czy to wykorzystuje trampi jest w python.elstanie uruchamiać zdalnych tłumaczy w taki sposób?

Cjauvin
źródło

Odpowiedzi:

5

Jednym ze sposobów jest użycie *eshell*.

  • M-x eshell
  • cd /ssh:<server_name>:~
  • run-python /usr/bin/ipython
  • Przełącz na *Python*bufor.
PythonNut
źródło
3
To miłe, ale nie pozwala na wysyłanie kodu do bufora Pythona . Czy to jest poprawne?
BakaKuna,
@BakaKuna Rozwiązałem to sprawdzenie mojej odpowiedzi
atevm
4

@ serv-inc answear to najlepsze podejście tutaj:

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

ale błąd nadal się nie powiedzie:

No such file or directory, ssh\

Musisz odwoływać się do pliku wykonywalnego na swojej ścieżce, więc bezpośrednie polecenia powłoki nie będą odtwarzane, ale napisanie skryptu opakowania rozwiąże to, nazwijmy to remote-python:

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

-t wymusi przydział pseudo terminala.

$@ przekaże wszystkie otrzymane argumenty do zdalnego ipython.

Ten skrypt musi znajdować się w katalogu zdefiniowanym w PATHzmiennej. Możesz to sprawdzić w Emacsie za pomocą:

(getenv "PATH")

następnie możesz ustawić remot-pythonjako tłumacza:

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

Jeśli pojawi się ostrzeżenie dotyczące obsługi redline:

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

Uwaga:

Piękno tej metody, która powinna współpracować z prawie każdym tłumaczem. Przetestowałem to również z REPL trybu Julii i możesz napisać interaktywną funkcję, aby przełączyć zdalnych / lokalnych tłumaczy.

atevm
źródło
Dobrze wiedzieć, że to trochę pomogło. Dzięki
serv-inc
0

Spróbuj ocenić (lub nawet w .emacs)

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

i używaj jak lokalnego eval na dowolnym pliku Pythona.

Pierwszy wiersz ustawia pilota ipythonjako domyślnego tłumacza. Druga linia rozwiązuje problem ipython.

serv-inc
źródło