Как встроить Python matplotlib в C++?
Привет,
я пытаюсь разработать библиотеку dll, которая встраивает python. Я использую boost 1.72 и python 3.7
Dll экспортирует некоторую функцию для инициализации python, добавляет некоторый массив numpy и запускает скрипт. Я создал макрос VBA в excel, который вызывает функцию dll.
функции таковы:
long __stdcall Init(); //initialize python long __stdcall AddInput(double* data, long nRows, long nCols, const char* label); //adds input long __stdcall ExecFile(const char* file); //execs a python script void __stdcall Clear();
все работает нормально, пока я не импортирую matplotlib.
Фактически, если я попытаюсь импортировать matplotlib.pyplot в скрипт python и построить массив, то возникнет исключение.
Как я могу использовать matplotlib.pyplot в скрипте, вызываемом из библиотеки dll, встраивающей python?
сценарий, который я пытаюсь выполнить, таков
import numpy as np import matplotlib.pyplot as plt import sys def main(): try: sys.stdout = open("outPy.log","w") plt.plot([1,2,4],[1,2,3]) plt.show() except: print("Unexpected error:", sys.exc_info()[0]) print("Unexpected error:", sys.exc_info()[1]) print("Unexpected error:", sys.exc_info()[2]) finally: sys.stdout.close() if __name__ == '__main__': main()
исключение составляет:
Unexpected error: <class 'IndexError'> Unexpected error: list index out of range Unexpected error: <traceback object at 0x2061C030>
Что я уже пробовал:
Это потому, что я вызываю dll из VBA?
Это вопрос нитей?
Richard MacCutchan
Вам нужно определить, какая строка кода вызывает исключение. Тогда какое значение индекса находится вне диапазона.
Optimistic76
линия такая
plt.plot([1,2,4],[1,2,3])
Optimistic76
Эврика!! Ричард ваше предложение заставило меня задуматься, и я обнаружил, что не вызывал PySys_setArg в инициализации python!!!
Я просто добавил в сценарий
если len(sys.argv) < 1:
представление sys.агду.добавить("")
и все работает отлично!!!