1

私は C++ アプリケーションに埋め込む Python を書いています。以下のように埋め込む必要があるpython(ユーザー定義のもの)のモジュールを宣言する関連コードスニペット:

boost::python::object main_module = boost::python::import("__main__");
boost::python::object main_namespace = main_module.attr("__dict__");
boost::python::exec("import python_module", main_namespace); //This line is the culprit

ただし、次のエラーが表示されると行き詰まります。

terminate called after throwing an instance of 'boost::python::error_already_set'

ユーザー定義の Python モジュールは、C++ コードと同じディレクトリにあります。それを使用しようとするとnumpy、問題は、ユーザー定義のものだけでは機能しないことです。それをデバッグするために何ができますか?

編集:

コードを try/catch ブロックに含めた後、次のコンパイル エラーが発生しました。

ImportError: No module named python_module

私もこれを追加しようとします:

boost::python::exec("import sys; sys.path.append('/path/to/python_module.py');",  main_namespace);

boost::python::exec("import python_module", main_namespace);

しかし、まだ機能していません。

問題は、C++ コードにどのように認識させるかです。

4

1 に答える 1

1

あなたはいくつかのことを試すことができます:

  1. C ++アプリの場合:boost::python::exec("import sys; sys.path.append('/path/to'); import python_module; del sys"), main_namespace);、または

  2. シェル内:cd /path/to; call-your-c++-app。次に、C ++では、、boost::python::exec("import python_module");または

  3. 環境変数をに設定export PYTHONPATH=/path/to:${PYTHONPATH}し、プログラムを実行します。この場合のC++はboost::python::exec("import python_module");、上記のソリューションの場合と同じようにする必要があります。

問題:モジュールファイル自体へのパスではsys.pathなくモジュールにつながるパスを追加する必要があります。

別のヒント:デフォルトでは、Pythonは現在のディレクトリからモジュールをロードします。そこcdにいて、そのディレクトリからアプリケーションを実行すると、現在のディレクトリでモジュールが見つかるはずです。

于 2013-02-11T21:31:51.447 に答える