奇怪的 IronPython 问题

Strange IronPython issue

我注意到 IronPython 有一个奇怪的问题。这是一个非常简单的脚本,我的应用程序 运行s:-

import globals
x = globals.x * globals.y

文件 "globals.py" 位于 ScriptEngine 的搜索路径中,仅包含一系列 name=value 行(基本上是我们可能需要的 "global constants"脚本),例如:-

x=5
y=10
..etc..

通常,应用程序的脚本每次执行 运行s 时都可以正常执行,但是如果我执行以下操作,我会遇到问题:-

首先,在 globals.py 中添加一个新行(例如 z=15)。接下来,编辑我的应用程序脚本以使用新变量:-

import globals
x = globals.x * globals.y + globals.z

接下来执行脚本时(假设我没有关闭我的应用程序)然后我收到以下错误消息:-

'module' object has no attribute 'z'

如果我重新启动我的应用程序 然后 执行脚本,它工作正常。我的应用程序使用单例 ScriptEngine,并且只能假设正在缓存某些内容会导致此问题(例如 globals.py 文件的旧版本,不知何故?)。

我现在已经通过在每次执行脚本时创建一个新的 ScriptEngine 实例来解决这个问题,但我很想知道是什么导致了这个问题,以及我是否可以做些什么 "clear down",而不必每次都实例化一个新的 ScriptEngine。

仅供参考,我的应用程序正在执行的脚本未编译。它只是 运行 使用:-

_engine.CreateScriptSourceFromString(
                myScript,
                SourceCodeKind.Statements);

没关系,刚找到这篇文章:IronPython hosting caching imported module?

指出 IronPython 确实缓存了导入的模块。

执行后可以关闭引擎

_engine.Runtime.Shutdown();