在emacs Python shell中(我正在运行2. * Python)我正在导入我正在使用的.py文件并测试代码。如果我更改代码,但我不知道如何再次导入它。
从我的阅读到现在为止似乎
reload(modulename)
应该有用,但似乎没有。
也许只是关闭python shell并重启它就足够了,是否有一个命令或你只是手动执行它?
编辑:看起来像python-send-defun和python-send-buffer是理想的,但是变化似乎没有传播。
答案 0 :(得分:15)
虽然reload()
确实有效,但它不会更改对类,函数和其他对象的引用,因此很容易看到旧版本。最一致的解决方案是将reload()
替换为exec
(这意味着首先不使用import
)或完全重新启动解释器。
如果您确实想继续使用重新加载,请非常小心如何从该模块引用内容,并始终使用全名。例如。 import module
并使用module.name
代替from module import name
。而且,即使小心,你仍然会遇到旧对象的问题,这是reload()
不在3.x中的一个原因。
答案 1 :(得分:5)
这似乎对我有用:
创建一个名为test.py
的文件(在PYTHONPATH中)def foo():
print('bar')
然后在emacs python shell中(或者更好的是ipython shell),输入
>>> import test
>>> test.foo()
bar
现在修改test.py:
def foo():
print('baz')
>>> reload(test)
<module 'test' from '/home/unutbu/pybin/test.py'>
>>> test.foo()
baz
答案 2 :(得分:0)
在查看这个问题相当长的时间之后,我得出的结论是,实现的最佳解决方案是基于python解释器的初始化文件(例如ipython),或者使用python构建-in模块“imp”及其功能“重载”。例如,在代码的开头:
import my_module
import imp
imp.reload(my_module)
#your code