Chạy ipython từ xa


9

Tôi đang cố gắng chạy trình thông dịch ipython từ xa (với Emacs 24.5 và bản địa python.el), nhưng tôi không chắc mình có cách tiếp cận đúng: bất cứ khi nào tôi cố gắng chạy một lệnh như vậy (được kích hoạt bằng C-c C-c):

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

(với <server_name>một mục nhập hợp lệ trong tôi ~/.ssh/configipythoncó sẵn tại địa điểm từ xa đó), tôi gặp một lỗi như:

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'

cũng như:

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

trong một *Python*bộ đệm .. Điều này có sử dụng tramppython.elcó thể chạy trình thông dịch từ xa theo cách như vậy không?

Câu trả lời:


5

Một cách là sử dụng *eshell*.

  • M-x eshell
  • cd /ssh:<server_name>:~
  • run-python /usr/bin/ipython
  • Chuyển sang *Python*bộ đệm.

3
Điều này là tốt, nhưng điều này không làm cho nó có thể gửi mã đến bộ đệm Python . Đúng không?
BakaKuna

@BakaKuna Tôi đã giải quyết mà kiểm tra câu trả lời của tôi
atevm

4

@ serv-inc trả lời là cách tiếp cận tốt nhất ở đây:

(setq python-shell-phiên dịch "ssh yourhost ipython" python-shell-phiên dịch-args "--simple-prompt -i")

nhưng nó vẫn sẽ thất bại với lỗi:

No such file or directory, ssh\

Bạn phải tham chiếu một tệp thực thi trên đường dẫn của mình, vì vậy các lệnh shell trực tiếp không phát, nhưng viết tập lệnh bao bọc sẽ giải quyết điều đó, hãy đặt tên cho nó remote-python:

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

-t sẽ buộc phân bổ thiết bị đầu cuối giả.

$@ sẽ ủy thác tất cả các đối số nhận được cho ipython từ xa.

Kịch bản này phải nằm trong một thư mục được xác định trong PATHbiến của bạn . Bạn có thể kiểm tra điều này bên trong Emacs với:

(getenv "PATH")

sau đó bạn có thể đặt remot-pythonlàm thông dịch viên của mình:

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

Nếu bạn nhận được cảnh báo về hỗ trợ đường dây đỏ:

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

Ghi chú:

Vẻ đẹp của phương pháp này, nó nên hoạt động với hầu hết mọi phiên dịch viên. Tôi cũng đã thử nghiệm nó với REPL của chế độ julia và Bạn có thể viết một chức năng tương tác để chuyển đổi trình thông dịch từ xa / cục bộ của bạn.


Thật tốt khi biết rằng nó đã giúp một chút. Cảm ơn
serv-inc

0

Hãy thử đánh giá (hoặc thậm chí trong .emacs)

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

và sử dụng như eval cục bộ của bạn trên bất kỳ tập tin python.

Dòng đầu tiên đặt điều khiển từ xa ipythonlàm trình thông dịch mặc định của bạn. Dòng thứ hai sửa một vấn đề ipython.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.