私はいくつかのPythonコードをアプリに埋め込むためにboost :: pythonを使用しています。私はprintステートメントや他の式を適切に評価することができましたが、モジュールをインポートしようとすると、インポートされず、アプリケーションが終了しています。さらに、埋め込みコード内のglobals()関数呼び出しは、ランタイムエラーも発生します。ここでboost :: python組み込みPythonコードでモジュールをインポートするにはどうすればよいですか?
#include <boost/python.hpp>
using namespace boost;
using namespace boost::python;
using namespace boost::python::api;
int main(void) {
Py_Initialize();
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
main_namespace["urllib2"] = import("urllib2");
object ignored = exec(
"print 'time'\n", main_namespace);
}
、私はブーストインポート機能を使用してurllib2のインポートしようとした、これはコンパイルし、適切に実行されますが、以下のexec文と、それはエラーになります。
object ignored = exec(
"print urllib2\n"
"print 'time'\n", main_namespace);
また、ブーストインポート機能を削除して埋め込みコードからインポートすると、エラーが発生します。 try:except:blockを使ってみましたが、どちらもうまくいきません。これは、C++アプリケーションがurllib2 pyモジュールまたは何かの場所を見つけることができないためですか?インポートしようとする前に、モジュールのパスを設定する方法はありますか?
これは内部でのみ使用できるように構築されているため、パスをハードコーディングする場合もあります。
編集:詳細:
これは起こります。 try ... catchを実行してPyErr_Print()を呼び出すと例外が発生し、モジュールのインポートや関数呼び出しがあっても常にエラーとして表示されます。エラーメッセージ:
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: 'NoneType' object does not support item assignment
何らかの理由が考えられますか?
@Jonas。あなたはそれで何をしたいですか? –
ああ。私はC++ソケットライブラリには全く病気でした。彼らは理解する時間が必要です。私はコンピュータの学生ではないので、私は理解するのに時間がかかります。だから、私は、非同期のurllib ++のようなものを、後ろのpython urllib2で作成しました。私は狂ったように聞こえる。しかし、私は今非常に便利なソリューションを持っています! – Sahas
Hehe、よろしく! –