ใช้ 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สามารถเรียกใช้ตัวแปลระยะไกลด้วยวิธีนี้ได้หรือไม่?

คำตอบ:


5

*eshell*วิธีหนึ่งคือการใช้งาน

  • M-x eshell
  • cd /ssh:<server_name>:~
  • run-python /usr/bin/ipython
  • เปลี่ยนเป็น*Python*บัฟเฟอร์

3
นี่เป็นสิ่งที่ดี แต่สิ่งนี้ไม่สามารถส่งรหัสไปยังบัฟเฟอร์Pythonได้ ถูกต้องไหม
BakaKuna

@BakaKuna ฉันแก้ไขได้แล้วตรวจสอบคำตอบของฉัน
atevm

4

@ serv-inc คำตอบเป็นวิธีที่ดีที่สุดที่นี่:

(setq python-shell-interpreter "ssh yourhost ipython" python-shell-interpreter-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 และคุณสามารถเขียนฟังก์ชั่นอินเทอร์แอคทีฟเพื่อสลับล่ามระยะไกล / ท้องถิ่นของคุณ


ดีใจที่ได้ทราบว่ามันช่วยได้เล็กน้อย ขอบคุณ
serv-inc

0

ลองประเมิน (หรือแม้แต่ใน.emacs)

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

และใช้เช่น eval ท้องถิ่นของคุณในไฟล์หลามใด ๆ

บรรทัดแรกตั้งค่ารีโมตipythonเป็นล่ามเริ่มต้นของคุณ บรรทัดที่สองแก้ไขปัญหา ipython

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.