Запуск 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

@ сервісний одяг - найкращий підхід тут:

(setq python-shell-interpreter "ssh yourhost ipython" python-shell-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")

Якщо ви отримаєте попередження про підтримку червоної лінії:

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

Примітка:

Краса цього методу в тому, що він повинен працювати майже з кожним перекладачем. Я також перевірив його за допомогою REPL-режиму julia-mode, і ви можете написати інтерактивну функцію для переключення віддалених / локальних перекладачів.


Приємно знати, що це трохи допомогло. Спасибі
серв-інк

0

Спробуйте оцінити (або навіть в .emacs)

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

і використовувати, як ваш локальний eval, на будь-якому файлі python.

Перший рядок встановлює пульт ipythonяк ваш інтерпретатор за замовчуванням. Другий рядок виправляє проблему ipython.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.