提供Python内核重启机制是什么启发了这个愿望清单请求?
开发在 JMP 中运行的 Python 代码通常涉及克隆 Github 存储库并将 JMP 指向代码的本地副本,如下所示:
jmputils.jpip('install','myrepo c:\\pathto\\myrepo')
您希望看到什么改进?
为用户提供一种机制(按钮、API、??)来重新启动 Python 内核,而无需关闭并重新打开 JMP。
这个想法为什么重要?
在代码开发过程中,本地代码会发生多次更改,每次更改都需要将新代码加载到 Python 内核中。目前,将新本地代码加载到 Python 内核的唯一方法是关闭并重新启动 JMP。这会大大减慢开发速度,并可能对某些开发人员造成阻碍。
自动化和脚本回复:提供 Python 内核重启机制首先在编辑器中更改代码并重新运行,并按照更改运行。
如果你导入了代码
导入我的代码
# 当你需要强制重新加载“mycode”包时
导入导入库
importlib.reload(mycode)
这是现有的 Python 行为。大多数情况下您看不到这种行为,因为 Python 是从命令行运行的,并且脚本和Python 在运行之间退出。由于 JMP 加载 Python 共享库,因此在这些情况下您必须将 JMP 视为 Python。如果您要在 Python 交互式控制台(即 IDLE)中执行相同的工作,而无需在更改之间退出,您将看到相同的行为。由于环境是共享的,因此 Python 环境从第一次使用开始一直保持活动状态,直到 JMP 退出。这就是JSL/Python 集成能够实现的方式。
因此,我们目前不会提供“重新启动”,因为 importlib.reload(package) 满足了这一需求。
我们正在研究启动独立 Python 子解释器的能力。这将允许许多额外的功能,例如在需要时在干净的环境中运行脚本。对子解释器的调查是 JMP 19 升级到 Python 3.13.x 的原因之一。更新和安全生命周期是更新到 3.13.x 的主要驱动因素
回复:提供 Python 内核重启机制 - 状态更改为:目前没有计划回复:提供 Python 内核重启机制嗯。我喜欢在不同的 Python 脚本窗口和后台任务之间共享所有变量的可能性。
我希望 Application Builder 有这个选项!
但我必须承认,这感觉有点“实验性”。
通过重启来重置内核是我们从 1995 年以来就习惯的做法,感觉很舒服。
许多其他 (!!!) Python IDE 都提供此功能 - 其他 IDE 运行代码然后关闭内核。
“在更干净的环境中运行脚本”
...听起来很有希望。
我猜测,这样的子解释器可以自动启动(并重新启动) 。
我不知道为什么是“否”。这为我们提供了 JMP 中缺少的功能?
回复:提供 Python 内核重启机制最大的问题是,加载到内存中的共享库无法由正在运行的进程卸载。这不仅适用于 Python 本身,也适用于具有共享库(如 NumPy)的导入 Python 包。Python 不是在另一个进程空间中运行,而是在 JMP 本身内运行并作为其一部分运行。是的,可以调用 Py_Finalize() 并随后调用 Py_Initialize() 来第二次初始化解释器。我过去遇到的问题是,在第二次解释器初始化之后,NumPy 对导入的反应不是特别好。JMP 变得不稳定并且容易崩溃,尤其是在重启后导入 NumPy 时。我还没有研究过其他IDE 如何处理 Python,但它们很可能正在运行 Python 实例而不是嵌入 Python。
我们已经清理了 JMP 18 中与以前版本相比的内存处理,因此可能值得重新审视一下,看看这样的重新启动是否可行。这可能是我们的内存处理问题,也可能是 NumPy 和其他加载共享库的软件包的问题。