Optimistic76 Ответов: 0

Как встроить 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.агду.добавить("")
и все работает отлично!!!

0 Ответов