我有一个在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));