【问题标题】:Python 2.7 runtime code changesPython 2.7 运行时代码更改
【发布时间】:2014-12-02 11:56:51
【问题描述】:

对于我的硕士论文,我试图利用 Python 作为脚本语言的特性,以便允许在运行时更改源代码。源代码本身使用特殊的用户界面建模并在保存时生成。启动时,生成的代码被发送到引擎并导入。这个过程可以正常工作,直到源代码发生更改,而无需在两次运行之间重新启动引擎(但重新启动不是选项)。

问题在于,即使文件已更改,引擎仍保留对旧源代码的引用。

我花了很长时间寻找解决方案,发现 reload() 作为一种选择 (ref)。不幸的是,由于某种原因,这不起作用。以下是相关部分的当前版本(每次收到源代码更改时执行):

package = __import__("tmp", fromlist=["tmp"])
reload(package) # this seems to have no effect
clsmembers = inspect.getmembers(package, lambda member: inspect.isclass(member) and member.__module__ == package.__name__)
beclass = clsmembers[0][1]
be = beclass()

我正在使用 Python 2.7(我必须这样做,我知道以后的 Python 版本会为这个特性提供更​​好的支持)。不一定非要reload(),我只需要任何方式重新导入代码更改即可。

感谢任何帮助! :)

【问题讨论】:

    标签: python import runtime


    【解决方案1】:

    我终于自己解决了这个问题。尽管我多次阅读过无法删除导入的模块,但以下解决方案似乎非常简单且显而易见。

    执行代码后,我删除了导入引用:

    del(sys.modules["tmp"])
    

    这可确保我为下一次执行完全重置,并且可以像第一次执行一样导入源代码文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      相关资源
      最近更新 更多