错误,在嵌入在C++程序中的 python 脚本中使用 matplotlib 时



我有一个在C++应用程序中调用的python脚本。当我导入 matplotlib 时,出现以下错误。

列出超出范围的索引。

在我的脚本中,唯一matplotlib相关的代码是

import matplotlib.pyplot as plt
f = plt.figure()

当我自行调用脚本时,它可以工作。只有当它嵌入到C++程序中时,我才会得到这个异常。当脚本使用 matplotlib 时,我需要提供一些额外的依赖项吗?

当我注释掉matplotlib函数时,我没有得到异常

更新

C++代码来自python文档链接:1.3。纯嵌入

我没有修改C++代码中的任何内容。只要没有与 matplotlib 相关的代码,它就可以工作。

原因是matplotlib使用的后端在我的情况下是tk的。tk的窗口初始化包含此代码

baseName = os.path.basename(sys.argv[0]) 

在我的情况下,argv 是空的,这就是list index out of range错误的原因。

我在这里找到的一个解决方法。我们可以像这样传递虚拟值:

wchar_t const *dummy_args[] = { L"Python", NULL };  // const is needed because literals must not be modified
wchar_t const **argv = dummy_args;
int             argc = sizeof(dummy_args) / sizeof(dummy_args[0]) - 1;
PySys_SetArgv(argc, const_cast<wchar_t **>(argv));

最新更新