Массив Numpy не инициализируется при попытке вызвать скрипт Python из кода CC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Массив Numpy не инициализируется при попытке вызвать скрипт Python из кода C

Сообщение Anonymous »

Я работаю над проектом, в котором мне нужно интегрировать модели нейронных сетей с более крупным проектом, созданным в основном с использованием C и C++.
Теперь я хочу интегрировать массив numpy, и согласно официальным документам мне нужно вызвать функцию import_array() под заголовком numpy/arrayobject.h. Я успешно скомпилировал и связал все файлы вместе, и все компилируется без ошибок.
Но как только вызывается функция import_array(), моя программа вылетает. Я не могу найти хорошую документацию по этой проблеме, которая могла бы мне помочь. Код, запускающий программу, генерирует файл обратной трассировки журнала сбоев, который предполагает, что во время вызова import_array() произошла ошибка длинного деления. Я пробовал запустить это на MacOs (чип M2) и Linux, но безуспешно.
Это мой файл C
#include
#include // Include NumPy header for array support

int call_python() {
// Initialize the Python interpreter
Py_Initialize();

// Set the Python path to include the virtual environment's site-packages
PyObject* sysPath = PySys_GetObject("path");

// Path to your virtual environment's site-packages
PyObject* venvPath = PyUnicode_DecodeFSDefault("path/to/venv");
PyList_Append(sysPath, venvPath);
Py_DECREF(venvPath);

import_array();

// Import the Python module
PyObject* pathValue = PyUnicode_DecodeFSDefault("path/to/workspace");
PyList_Append(sysPath, pathValue);
Py_DECREF(pathValue);

PyObject* pName = PyUnicode_DecodeFSDefault("my_python_module");
PyObject* pModule = PyImport_Import(pName);
Py_DECREF(pName);

if (pModule != NULL) {
// Get the function from the module
PyObject* pFunc = PyObject_GetAttrString(pModule, "my_function");

if (pFunc && PyCallable_Check(pFunc)) {
// Call the Python function
PyObject* pArgs = PyTuple_New(0); // No arguments
PyObject* pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);

if (pValue != NULL) {
// Process the returned value
printf("Result: %ld\n", PyLong_AsLong(pValue));
Py_DECREF(pValue);
} else {
PyErr_Print();
}
Py_DECREF(pFunc);
} else {
PyErr_Print();
}
Py_DECREF(pModule);
} else {
PyErr_Print();
}

// Finalize the Python interpreter
Py_FinalizeEx();
return 0;
}


Это мой скрипт Python (my_python_module.py)
import numpy as np

def my_function():
arr = np.array([1, 2, 3])
print(arr)
return 42


Подробнее здесь: https://stackoverflow.com/questions/791 ... rom-c-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»