2024-04-18 23:38:33 发布
网友
在emacs Python shell(我正在运行2.*Python)中,我正在导入一个正在使用和测试代码的.py文件。如果我改变了代码,但我不确定如何再次导入它。
从我目前的阅读来看
reload(modulename)
应该有用,但似乎不行。
也许仅仅关闭python shell并重新启动它就足够了,是否有一个用于此操作的命令,或者您只是手动执行它?
编辑:看起来python send defun和python send buffer比较理想,但是更改似乎没有传播。
在对这个问题进行了相当长时间的研究之后,我得出结论,最好的实现方案是,要么基于python解释器的初始化文件(例如ipython),要么使用python内置模块“imp”及其函数“reload”。例如,在代码的开头:
import my_module import imp imp.reload(my_module) #your code
我从这一页找到了这个解决方案:https://emacs.stackexchange.com/questions/13476/how-to-force-a-python-shell-to-re-import-modules-when-running-a-buffer
似乎对我有用:
在PYTHONPATH中创建一个名为test.py的文件
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
虽然reload()可以工作,但它不会更改对类、函数和其他对象的引用,因此很容易看到旧版本。最一致的解决方案是将reload()替换为exec(这意味着首先不要使用import),或者完全重新启动解释器。
reload()
exec
import
如果确实要继续使用reload,请非常小心如何引用该模块中的内容,并始终使用全名。E、 用import module代替from module import name。而且,即使小心,您仍然会遇到旧对象的问题,这也是reload()不在3.x中的原因之一
import module
from module import name
在对这个问题进行了相当长时间的研究之后,我得出结论,最好的实现方案是,要么基于python解释器的初始化文件(例如ipython),要么使用python内置模块“imp”及其函数“reload”。例如,在代码的开头:
我从这一页找到了这个解决方案:https://emacs.stackexchange.com/questions/13476/how-to-force-a-python-shell-to-re-import-modules-when-running-a-buffer
似乎对我有用:
在PYTHONPATH中创建一个名为test.py的文件
然后在emacs python shell(或者更好的是,ipython shell)中,输入
现在修改test.py:
虽然
reload()
可以工作,但它不会更改对类、函数和其他对象的引用,因此很容易看到旧版本。最一致的解决方案是将reload()
替换为exec
(这意味着首先不要使用import
),或者完全重新启动解释器。如果确实要继续使用reload,请非常小心如何引用该模块中的内容,并始终使用全名。E、 用
import module
代替from module import name
。而且,即使小心,您仍然会遇到旧对象的问题,这也是reload()
不在3.x中的原因之一相关问题 更多 >
编程相关推荐