python - 如何编辑正在运行的 python 程序?

标签 python import modular

场景:一个模块化应用程序,在运行时动态加载 .py 模块。程序员(我)希望编辑模块的代码,然后将其重新加载到程序中,而不停止执行

这可以做到吗?

我尝试在更新的 module.py 上再次运行 import,但更改未生效

最佳答案

虽然 reload 确实会重新加载模块,正如另一个答案提到的那样,您需要采取一些预防措施才能使其顺利工作 - 对于某些您可能认为会很容易工作的事情,您是就实际需要的工作量而言,这是相当令人震惊的。

如果您曾经使用过 from module import afunction 形式,那么您几乎可以确定 reload 不会起作用:您必须独占如果你希望重新加载做一些有用的事情,从模块内部导入模块,从不函数,类等(否则你必须以某种方式追踪从模块各处导入的所有片段,并重新绑定(bind)它们中的每一个 - eep;-)。请注意,无论如何,我更喜欢遵循此规则,无论我是否计划进行任何重新加载,但是,对于重新加载,它是至关重要

困难的问题是:如果您在任何地方都存在模块先前版本中存在的类实例,则 reload 本身绝对不会执行任何升级这些实例的操作。 这个问题确实是一个难题; Python Cookbook(第二版)中最长、最难的食谱之一是关于如何对模块进行编码以支持这种“实际升级现有实例的重新加载”。当然,这仅在您以 OOP 风格编程时才重要,但是...任何复杂到需要“重新加载此插件”功能的 Python 程序非常很可能其中包含大量 OOP,所以它是这并不是一个小问题。

docs for reload非常完整并且确实提到了这个问题,但没有给出如何解决它的提示。 This recipe作者:Michael Hudson,来自 Python Cookbook online,更好,但这只是我们演变为打印版(第二版)的开始——菜谱 20.15,其在线版本是 here (除非您注册 O'Reilly 商业在线图书服务的限时免费预览,否则这是不完整的)。

关于python - 如何编辑正在运行的 python 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2894235/

相关文章:

python - CNN 模型训练 - 资源耗尽(Python 和 Tensorflow)

python - 使用 imp 动态导入模块

java - 如何标记输出并去除零?

c - 如何在模块化编程中使用结构?

Java+JavaFX2 项目 : modular content

javascript - 如何编写模块化 JavaScript 代码(库)

python - 元素树python中具有属性的xpath表达式

python:两种方式的部分信用卡存储加密

python - 使用Python更新二进制文件中的值

java - 将现有项目导入eclipse时,Maven根pom.xml标记为红色