スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

組み込みPython/パッケージ名つきでimportする

SWIGで単純にC/C++のラッパーを作ると、1階層のモジュールしかできない。

これをパッケージ名つきでimportするには、xxxx_wrap.cxx を以下のように修正する。

例)helloモジュールをaaa.bbb.hello としたい場合

hello_wrap.cxx
#define SWIG_name    "_hello"
#define SWIG_name    "aaa.bbb._hello"

  m = Py_InitModule((char *) SWIG_name, SwigMethods);
#endif
d = PyModule_GetDict(m);

PyObject* m_aaa = Py_InitModule("aaa", NULL); // aaa を作る
PyObject* m_bbb = Py_InitModule("aaa.bbb", NULL); // aaa.bbb を作る
m = Py_InitModule((char *) SWIG_name, SwigMethods); // aaa.bbb.hello を作る

#endif
PyObject* d_aaa = PyModule_GetDict(m_aaa);
PyObject* d_bbb = PyModule_GetDict(m_bbb);
d = PyModule_GetDict(m);

PyDict_SetItemString(d_aaa, "bbb", m_bbb); // aaa.bbb(変数) に bbb(モジュール) を登録
PyDict_SetItemString(d_bbb, "_hello", m); // aaa.bbb.hello(変数) に _hello(モジュール) を登録

上位のモジュールがすでに存在する場合は、Py_InitModuleの代わりにPyImport_AddModuleを使う。
スポンサーサイト

コメント

非公開コメント

プロフィール

fchiba

Author:fchiba
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。