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?

Jawaban:


5

Salah satu caranya adalah menggunakan *eshell*.

  • M-x eshell
  • cd /ssh:<server_name>:~
  • run-python /usr/bin/ipython
  • Beralih ke *Python*buffer.

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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.