Ipython remote ausführen

9

Ich versuche, einen Ipython-Interpreter remote auszuführen (mit Emacs 24.5 und native python.el), bin mir aber nicht sicher, ob ich den richtigen Ansatz habe: Wann immer ich zum Beispiel versuche, einen solchen Befehl auszuführen (der ausgelöst wird mit C-c C-c):

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

(mit <server_name>einem gültigen Eintrag in meinem ~/.ssh/configund ipythonan diesem entfernten Ort verfügbar), erhalte ich eine Fehlermeldung wie:

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'

ebenso gut wie:

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

in einem *Python*Puffer .. Nutzt dies Remote-Interpreter trampund python.elkann es so ausführen?

cjauvin
quelle

Antworten:

5

Eine Möglichkeit ist zu verwenden *eshell*.

  • M-x eshell
  • cd /ssh:<server_name>:~
  • run-python /usr/bin/ipython
  • Zum *Python*Puffer wechseln.
PythonNut
quelle
3
Das ist schön, aber das macht es nicht möglich, Code an den Python- Puffer zu senden . Ist das korrekt?
BakaKuna
@BakaKuna Ich habe das gelöst und meine Antwort überprüft
atevm
4

@ serv-inc answear ist hier der beste Ansatz:

(setq Python-Shell-Interpreter "ssh yourhost ipython" Python-Shell-Interpreter-Argumente "--simple-prompt -i")

aber es wird immer noch mit dem Fehler fehlschlagen:

No such file or directory, ssh\

Sie müssen auf eine ausführbare Datei in Ihrem Pfad verweisen, damit direkte Shell-Befehle nicht abgespielt werden. Wenn Sie jedoch ein Wrapper-Skript schreiben, wird dies behoben. Nennen wir es remote-python:

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

-t erzwingt die Zuweisung von Pseudo-Terminals.

$@ delegiert alle empfangenen Argumente an das Remote-Ipython.

Dieses Skript muss sich in einem Verzeichnis befinden, das in Ihrer PATHVariablen definiert ist. Sie können dies in Emacs überprüfen mit:

(getenv "PATH")

dann können Sie remot-pythonals Ihren Dolmetscher festlegen :

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

Wenn Sie eine Warnung zur Redline-Unterstützung erhalten:

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

Hinweis:

Das Schöne an dieser Methode ist, dass sie mit fast jedem Dolmetscher funktionieren sollte. Ich habe es auch mit REPL von julia-mode getestet und Sie können eine interaktive Funktion schreiben, um Ihre Remote- / lokalen Interpreter zu wechseln.

atevm
quelle
Gut zu wissen, dass es ein bisschen geholfen hat. Danke
serv-inc
0

Versuchen Sie zu bewerten (oder sogar in .emacs)

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

und verwenden Sie wie Ihre lokale Bewertung für jede Python-Datei.

In der ersten Zeile wird die Fernbedienung ipythonals Standardinterpreter festgelegt. Die zweite Zeile behebt ein Ipython-Problem.

serv-inc
quelle