Запуск ipython удаленно

9

Я пытаюсь запустить интерпретатор ipython удаленно (с Emacs 24.5 и нативным python.el), но я не уверен, что у меня правильный подход: всякий раз, когда я пытаюсь запустить такую ​​команду, например (которая запускается с C-c C-c):

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

<server_name>действительной записью в моем ~/.ssh/configи ipythonдоступной в этом удаленном месте), я получаю сообщение об ошибке:

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'

а также:

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

в *Python*буфере ... Использует ли это trampи python.elможет ли запускать удаленные интерпретаторы таким образом?

cjauvin
источник

Ответы:

5

Одним из способов является использование *eshell*.

  • M-x eshell
  • cd /ssh:<server_name>:~
  • run-python /usr/bin/ipython
  • Переключиться в *Python*буфер.
PythonNut
источник
3
Это хорошо, но это не позволяет отправлять код в буфер Python . Это верно?
BakaKuna
@BakaKuna Я решил, что проверь мой ответ
atevm
4

@ serv-inc answerear - лучший подход здесь:

(setq python-shell-интерпретатор "ssh yourhost ipython" python-shell-интерпретатор-args "--simple-prompt -i")

но все равно не получится с ошибкой:

No such file or directory, ssh\

Вы должны ссылаться на исполняемый файл на вашем пути, чтобы прямые команды оболочки не играли, но написание сценария-оболочки решит это, назовем его remote-python:

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

-t принудительно назначит псевдо-терминал.

$@ делегирует все полученные аргументы удаленному ipython.

Этот скрипт должен находиться в каталоге, который определен в вашей PATHпеременной. Вы можете проверить это внутри Emacs с помощью:

(getenv "PATH")

тогда вы можете установить в remot-pythonкачестве вашего переводчика:

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

Если вы получили предупреждение о поддержке redline:

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

Замечания:

Прелесть этого метода в том, что он должен работать практически с каждым переводчиком. Я также протестировал его с помощью REPL в julia-mode, и вы можете написать интерактивную функцию для переключения ваших удаленных / локальных переводчиков.

atevm
источник
Приятно знать, что это немного помогло. Спасибо
серв-ин
0

Попробуйте оценить (или даже в .emacs)

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

и использовать как ваш локальный eval в любом файле python.

Первая строка устанавливает пульт в ipythonкачестве вашего интерпретатора по умолчанию. Вторая строка исправляет проблему с ipython.

Serv-вкл
источник