Python Py_初始化、Py_最终确定和MatPlotlib
这是一个已知的问题,但我想请专家们为我找到最好的解决方法 我有一个项目(Euler Math Toolbox),它将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期间会损坏 为了解决这个问题,清除所有变量和导入就足够了。我可以忍受不打电话给皮尤。但是怎么做呢 PS:您可能会想,为什么我不直接将euler.exe链接到Python。原因是,如果未安装Python,即使从未需要它,这也会阻止Euler启动 谢谢你的回答!如果你愿意,你可以在gmail把你的答案复制给renegrothmann。那对我有帮助 为了解决这个问题,清除所有变量和导入就足够了。我可以忍受不打电话给皮尤。但是怎么做呢 如果您在每次调用后正确地释放所有引用,这应该可以正常工作。只需确保只调用一次Python Py_初始化、Py_最终确定和MatPlotlib,python,euler-math-toolbox,Python,Euler Math Toolbox,这是一个已知的问题,但我想请专家们为我找到最好的解决方法 我有一个项目(Euler Math Toolbox),它将Python作为脚本语言运行。为此,在运行时加载一个库模块“python.dll”,该模块与“python27.lib”链接。然后调用Py_Initialize。这一切都很好 但是用户可以使用新会话和笔记本重新启动Euler。然后我希望Python清除所有变量和导入。为此,我调用Py_Finalize并卸载“python.dll”。当需要Python时,加载和初始化会再次启动Pyt
Py\u Initialize
,而不要调用Py\u Finalize
。使用单独的字典运行每个“会话”,并始终在使用完引用计数后适当地减少引用计数(这将在运行代码后释放这些变量)
另一方面,这是一个常见的问题。如果使用
Py\u Finalize
,如何使用“单独的字典”运行,许多其他包(如numpy)或任何使用Boost::Python编写的包都会显示相同的行为?我正在加载带有“pModule=PyImport_AddModule(“main”);”的主模块。然后我使用这个模块,例如用于PyRun\u SimpleString(string)。@Rene您不能使用PyRun\u SimpleString
-您需要使用类似PyEval\u EvalCode
的东西,或者使用一个替代方法,让您指定代码执行的字典。