Я работаю над проектом, в котором мне нужно интегрировать модели нейронных сетей с более крупным проектом, созданным в основном с использованием 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
Массив Numpy не инициализируется при попытке вызвать скрипт Python из кода C ⇐ C++
Программы на C++. Форум разработчиков
1769239701
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79122980/numpy-array-not-initializing-when-trying-to-call-python-script-from-c-code[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия