我使用以下命令在emacs shell中运行IPython:
;; Set IPython interpreter in my init.el
(defvar python-shell-interpreter "ipython")
(defvar python-shell-interpreter-args "-i")
然后:
M-x run-python
%run myprog.py
在IPython中运行程序。 myprog.py导入名为mymodule
的模块。我对mymodule
进行了更改,但当我再次运行%run myprog.py
时,它会运行原始mymodule
,而不是更改的代码。
FWIW,我正在使用emacs 24.5前奏,在Windows 10上使用Anaconda和Python 3.5。
答案 0 :(得分:0)
事实证明IPython's %run
command does not reload modules。
我目前的解决方法是:
~/.ipython/profile_default/ipython_config.py
$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环境变量,以便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"))))