当前位置:  开发笔记 > 编程语言 > 正文

在emacs python shell中重新加载已更改的python文件

如何解决《在emacspythonshell中重新加载已更改的python文件》经验,为你挑选了2个好方法。

在emacs Python shell(我正在运行2.*Python)我正在导入我正在使用的.py文件并测试代码.如果我更改代码,但我不知道如何再次导入它.

从我到目前为止的阅读看来

reload(modulename)

应该工作,但似乎没有.

也许只是关闭python shell并重新启动它就足够了,是否有一个命令,或者你只是手动执行它?

编辑:看起来像python-send-defun和python-send-buffer是理想的,但变化似乎没有传播.



1> 小智..:

虽然reload()确实有效,但它不会更改对类,函数和其他对象的引用,因此很容易看到旧版本.最一致的解决方案是替换reload()exec(这意味着不import首先使用)或完全重新启动解释器.

如果您确实想继续使用重新加载,请非常小心如何从该模块引用内容,并始终使用全名.例如import module,module.name而不是使用from module import name.而且,即使小心,你仍然会遇到旧对象的问题,这是一个reload()不在3.x中的原因.


只修复导入的方法不会使重载工作在一般情况下.如果您已从导入的模块(例如,类实例)中存储了任何内容,则不会重新加载.要使重新加载工作一般,您必须递归地重新加载其所有用户.重新加载很脆弱,我强烈建议不要在测试时使用它 - 在调试时,任何人都需要的最后一件事就是部分重新加载,这会导致重新启动shell时出现的神秘错误.

2> unutbu..:

它似乎对我有用:

创建一个名为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)

>>> test.foo()
baz

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有