2016-02-09 2 views
0

Я бегу IPython В одном из Emacs Shell с помощью:IPython не перегрузочных модулей

;; Set IPython interpreter in my init.el 
(defvar python-shell-interpreter "ipython") 
(defvar python-shell-interpreter-args "-i") 

Тогда:

  1. Начало IPython с M-x run-python
  2. запустить программу в IPython с %run myprog.py. myprog.py импортирует модуль с именем mymodule.

внести изменения в mymodule, но когда я снова запустить %run myprog.py, он запускает оригинальный mymodule, не измененный код.

FWIW, я использую emacs 24.5 prelude, в Windows 10 с Anaconda и Python 3.5.

+0

Не видите кэш со стороны Emacs. Предположите, что неправильный файл был отредактирован. –

ответ

0

Получается, что IPython's %run command does not reload modules.

Мой текущий обходной путь является:

  1. Добавьте приведенный ниже код в ~/.ipython/profile_default/ipython_config.py
  2. Использование $run myprog.py args

.

# this code in `~/.ipython/profile_default/ipython_config.py` 
# get_config() is injected into the global namespace whilst 
# config files are loaded 
c = get_config() 

# Autoreload modules 
c.InteractiveShellApp.extensions = ['autoreload'] 
c.InteractiveShellApp.exec_lines = ['%autoreload 2'] 

Я не понимаю, что %run не перегружать модули, потому что я привык использовать runfile команду Spyder, которая делает. Это гайки, что %run нет, и я хотел бы отправить патч, чтобы исправить его в какой-то момент.

В Windows переменная среды HOME должна быть установлена ​​так, чтобы команда run-python в emacs могла читать профиль IPython. Если HOME не установлен, вы можете добавить его к своему:

(add-hook 'inferior-python-mode-hook (lambda() 
             (progn 
             (python-shell-send-string-no-output "%load_ext autoreload") 
             (python-shell-send-string-no-output "%autoreload 2")))) 
Смежные вопросы