Python未显示导入文件中的代码更改

5
我正在使用Linux Python Shell,每次对导入的文件进行更改后,我需要重新启动Shell(我尝试重新导入文件,但更改没有反映)。
我在一个名为handlers.py的文件中有一个定义。
def testme():
    print "Hello I am here"

我在Python shell中导入文件

>> import handlers as a
>> a.testme()

>>  "Hello I am here"

我将打印语句更改为“Hello I am there”,重新导入处理程序,但没有显示更改?

使用Python 2.7和Mint 17.1。


可能是重复的问题:如何在Python解释器中重新导入更新后的包? - fredtantini
3个回答

9

你需要显式地reload模块,如下所示:

import lib # first import
# later ....
import imp
imp.reload(lib)  # lib being the module which was imported before

请注意,imp 模块即将被弃用,推荐使用 importlib,在 Python 3.4 中应该使用 importlib.reload

在Python 2中,“reload”函数是一个内置函数。无需导入imp,只需使用“reload(lib)”即可。 - Nagasaki45
2
@Nagasaki45,也许有一些原因导致它从Python 3中被移除。无论哪种情况,选择更具跨平台性的代码会更好。 - behzad.nouri

1

每次更改后,您应该使用reload并重新导入:

reload( handlers )
import handlers a a

1
作为reload的替代方案,您可以使用watchdog
一个简单的程序使用看门狗监视作为命令行参数指定的目录并记录生成的事件:
从网站中:
支持的平台
- Linux 2.6(inotify) - Mac OS X(FSEvents,kqueue) - FreeBSD/BSD(kqueue) - Windows(ReadDirectoryChangesW with I/O completion ports; ReadDirectoryChangesW worker threads) - 操作系统无关(轮询磁盘以获取目录快照并定期比较它们;速度慢,不建议)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接