【问题标题】:Python does not show code changes from imported filePython 不显示导入文件中的代码更改
【发布时间】:2014-11-10 01:43:58
【问题描述】:

我使用的是 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”,重新导入处理程序,它没有显示更改?

在 Mint 17.1 中使用 Python 2.7

【问题讨论】:

标签: python import


【解决方案1】:

您需要明确地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 也许有一些原因将它从 python 3 中删除。无论哪种情况,使用更多跨平台代码会更好。
【解决方案2】:

您应该在每次进行更改时使用 reload 然后再次导入:

reload( handlers )
import handlers a a

【讨论】:

    【解决方案3】:

    作为reload 内的替代答案,您可以使用 watchdog .

    一个简单的程序,它使用看门狗来监视指定为命令行参数的目录并记录生成的事件:

    来自网站

    支持的平台

    • Linux 2.6(inotify)

    • Mac OS X(FSEvents、kqueue)

    • FreeBSD/BSD(kqueue)

    • Windows(带 I/O 完成端口的 ReadDirectoryChangesW;ReadDirectoryChangesW 工作线程)

    • 独立于操作系统(轮询磁盘以获取目录快照并定期比较它们;速度慢且不推荐)

    【讨论】:

      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多