emuio
1
大家在Emacs中调试python代码时有没有遇到这样一个问题:
比如test.py中import了另一个文件test1.py中的test1函数,在test.py中直接C-c C-c可以执行代码并调用test1.test1()函数,但每次修改test.py中的代码时会即时生效,修改test1.py中的代码时,并不会生效,必须用C-c C-p重新启动一个python的buffer才可以加载test1.py中的代码。
test.py:
import test1
test1.test()
test1.py:
def test():
print 'test1'
- 在test.py中按C-c C-c ,输出test1
- 修改test1.py,print ‘test2’
- 在test.py中按C-c C-c,还是输出test1
你应该交代清楚,是在什么模式下,C-c C-c绑定的是什么函数。
1 个赞
emuio
5
python-mode
C-c C-c 绑定的是
It is bound to C-c C-c, <menu-bar> <Python> <Eval buffer>.
(python-shell-send-buffer &optional SEND-MAIN MSG)
emuio
6
好像是同样的问题,要用ipython来解决这个问题。
方法很多,除了改为 ipython
之外,还可以:
-
方法1: 在 python 代码里强制 reload:
import test1
import imp # 添加这
imp.reload(test1) # 两行
test1.test()
-
方法2: 重载 python-shell-send-buffer
:
用编程的方式实现类似手动 C-c C-p 重启一个 *Python*
的效果
1 个赞
不懂 Python,看起来跟 Emacs 没什么关系,你用 Python REPL 应该会有同样的问题。