ipython 没有重新加载模块

ipython not reloading modules

我在 emacs shell 中 运行ning 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.
  3. 的模块

我对 mymodule 进行了更改,但是当我再次 运行 %run myprog.py 时,它 运行 是原始 mymodule,而不是更改后的代码。

FWIW,我正在使用 emacs 24.5 prelude,在 Windows 10 上使用 Anaconda 和 Python 3.5.

原来是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 不会重新加载模块,因为我习惯使用 Spyder 的 runfile 命令,而它会。 %run 没有,我想提交一个补丁来修复它。

在 Windows 上,必须设置 HOME 环境变量,以便 emacs 中的 run-python 命令可以读取 IPython 配置文件。如果未设置 HOME,您可以将其添加到您的 init.el:

(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"))))