这是一个已知问题,但我想请教专家为我解决它的最佳方法。
我有一个项目(欧拉数学工具箱),它将 Python 作为脚本语言运行。为此,在运行时加载了一个库模块“python.dll”,它与“python27.lib”链接。然后调用 Py_Initialize。这一切都很好。
但是用户可以使用新的会话和笔记本重新启动 Euler。然后我希望 Python 清除所有变量和导入。为此,我调用 Py_Finalize 并卸载“python.dll”。当需要 Python 时,加载和初始化会再次启动 Python。
这行得通。但是如果在前一个会话中导入了 MatPlotlib,Python 在第一次调用时就会崩溃。似乎 Py_Finalize 并没有完全清除 Python,也没有卸载我的“python.dll”。我尝试卸载“python27.dll”(Python DLL),但这无济于事。最有可能的是,另一个 DLL 保持活动状态,但在 Py_Finalize 期间损坏。
为了解决这个问题,清除所有变量和导入就足够了。我可以忍受不调用 Py_Finalize。但是怎么做?
PS:你可能想知道,为什么我不直接将euler.exe链接到Python。原因是这会阻止 Euler 表单启动,如果没有安装 Python,即使它从不需要。
感谢您的任何回答!如果你愿意,你可以在 gmail 复制你对 renegrothmann 的回答。那会帮助我。