Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Py_初始化、Py_最终确定和MatPlotlib_Python_Euler Math Toolbox - Fatal编程技术网

Python Py_初始化、Py_最终确定和MatPlotlib

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

这是一个已知的问题,但我想请专家们为我找到最好的解决方法

我有一个项目(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。那对我有帮助

为了解决这个问题,清除所有变量和导入就足够了。我可以忍受不打电话给皮尤。但是怎么做呢

如果您在每次调用后正确地释放所有引用,这应该可以正常工作。只需确保只调用一次
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
的东西,或者使用一个替代方法,让您指定代码执行的字典。