Menjalankan ipython dari jarak jauh

9

Saya mencoba menjalankan interpreter ipython jarak jauh (dengan Emacs 24.5 dan asli python.el), tapi saya tidak yakin saya memiliki pendekatan yang tepat: setiap kali saya mencoba menjalankan perintah seperti misalnya (yang dipicu dengan C-c C-c):

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

(dengan <server_name>entri yang valid di saya ~/.ssh/config, dan ipythontersedia di lokasi terpencil itu), saya mendapatkan kesalahan seperti:

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'

sebaik:

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

dalam *Python*buffer .. Apakah ini memanfaatkan tramp, dan python.eldapat menjalankan interpreter jarak jauh sedemikian rupa?

cjauvin
sumber

Jawaban:

5

Salah satu caranya adalah menggunakan *eshell*.

  • M-x eshell
  • cd /ssh:<server_name>:~
  • run-python /usr/bin/ipython
  • Beralih ke *Python*buffer.
PythonNut
sumber
3
Ini bagus, tetapi ini tidak memungkinkan untuk mengirim kode ke buffer Python . Apakah itu benar?
BakaKuna
@BakaKuna Saya telah memecahkan yang memeriksa jawaban saya
atevm
4

@ serv-inc jawab adalah pendekatan terbaik di sini:

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

tetapi masih akan gagal dengan kesalahan:

No such file or directory, ssh\

Anda harus mereferensikan executable di path Anda, jadi perintah shell langsung tidak bisa dimainkan, tetapi menulis skrip wrapper akan menyelesaikannya, beri nama remote-python:

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

-t akan memaksa alokasi terminal semu.

$@ akan mendelegasikan semua argumen yang diterima ke ipython jarak jauh.

Skrip ini harus berada di direktori yang didefinisikan dalam PATHvariabel Anda . Anda dapat memeriksa ini di dalam Emacs dengan:

(getenv "PATH")

maka Anda dapat menetapkan remot-pythonsebagai juru bahasa Anda:

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

Jika Anda mendapat peringatan tentang dukungan redline:

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

catatan:

Keindahan metode ini, bahwa itu harus bekerja dengan hampir setiap penerjemah. Saya juga mengujinya dengan REPL julia-mode dan Anda dapat menulis fungsi interaktif untuk mengganti penerjemah jarak jauh / lokal Anda.

atevm
sumber
Senang mengetahui bahwa itu sedikit membantu. Terima kasih
serv-inc
0

Coba evaluasi (atau bahkan dalam .emacs)

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

dan gunakan seperti eval lokal Anda pada file python apa pun.

Baris pertama menetapkan remote ipythonsebagai penerjemah default Anda. Baris kedua memperbaiki masalah ipython.

serv-inc
sumber