質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

1439閲覧

PyObject_CallObjectでsklearnをimportするpythonの関数をコールすると応答しなくなる

koi_yuto

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/06/21 01:15

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
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すると正常に動きます。
ヒントだけでも良いので何卒よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

void
test_c(){
Py_Initialize();

<コード>

Py_Finalize();

を追加すれば、解決するかもしれません。

投稿2020/07/13 08:41

shunsuuuuuuu

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

全く同じ件で悩んでおります。
もしすでに解決しておりましたら、解決法を教えて頂けませんでしょうか。

投稿2020/07/10 02:14

shunsuuuuuuu

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問