ipython没有重装模块

时间:2016-02-09 21:57:19

标签: python shell ipython reload

我使用以下命令在emacs shell中运行IPython:

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

然后:

  1. 使用M-x run-python
  2. 启动IPython
  3. 使用%run myprog.py在IPython中运行程序。 myprog.py导入名为mymodule的模块。
  4. 我对mymodule进行了更改,但当我再次运行%run myprog.py时,它会运行原始mymodule,而不是更改的代码。

    FWIW,我正在使用emacs 24.5前奏,在Windows 10上使用Anaconda和Python 3.5。

1 个答案:

答案 0 :(得分:0)

事实证明IPython's %run command does not reload modules

我目前的解决方法是:

  1. 将以下代码添加到~/.ipython/profile_default/ipython_config.py
  2. 使用$run myprog.py args
  3. # 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环境变量,以便run-python中的emacs命令可以读取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"))))