前提・実現したいこと
ここに質問の内容を詳しく書いてください。
CのアプリケーションからPyObject_CallObjectでPythonの関数をコールするシステムを作っています。
コールされるPython側でsklearnをimportする処理を追加すると、PyObject_CallObjectの応答が帰って
来なくなりました。
発生している問題・エラーメッセージ
エラーメッセージは出力されず、応答が帰ってこない状態です。
該当のソースコード
C
1#include <stdlib.h> 2#include <math.h> 3#include <Python.h> 4 5void 6test_c(){ 7 8 int i; 9 PyObject *pModule, *pFunc, *pName; 10 PyObject *pValue; 11 PyObject *pArg[2]; 12 PyObject *pArgs = PyTuple_New(2); 13 14 PyObject *sys = PyImport_ImportModule("sys"); 15 PyObject *sys_path = PyObject_GetAttrString(sys, "path"); 16 PyList_Append(sys_path, PyUnicode_DecodeFSDefault(".")); 17 18 pName = PyUnicode_DecodeFSDefault("pytest");//ファイル名 19 pModule = PyImport_Import(pName); 20 Py_DECREF(pName); 21 if(pModule != NULL){ 22 pFunc = PyObject_GetAttrString(pModule, "multiply");//関数名 23 } 24 25 pArg[0] = PyFloat_FromDouble(1.998); 26 pArg[1] = PyFloat_FromDouble(0.998); 27 28 for( i = 0; i < 2 ; i++){ 29 PyTuple_SetItem(pArgs, i, pArg[i]);//引数リストに引数をセット 30 } 31 32 pValue = PyObject_CallObject(pFunc, pArgs); 33 int result_p = PyArg_ParseTuple(pValue, "l", &num); 34 return; 35}
Python
1import sys 2import numpy 3from sklearn.svm import SVC 4 5def multiply(a, b): 6 c = a*b 7 return (c,)
試したこと
Python側のsklearn.svm import SVCを除くと正常に動作します。
sklearnが存在し、Python単体で実行した時は問題ないことを確認しています。
(sklearnが存在せずimportに失敗した場合はエラーが帰ってきて、応答が無い状態にはなりません。)
補足情報(FW/ツールのバージョンなど)
Python3で、コマンドプロンプトからPythonを起動しsklearnをimportすると正常に動きます。
ヒントだけでも良いので何卒よろしくお願い申し上げます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。