ubuntu 9.04でBlender(その2)
前回はPython2.6のモジュール__init__.pyを書き換えることで対応しましたが、今回はBlenderのソースを修正することで対応する方法について。
encodesモジュールをimportしたときにエラーになるのは、Blender側のメソッドがキーワード引数の形式に対応していないのが原因ですので、BlenderのPythonインターフェース部分のソースを修正することにします。
エラーメッセージに出てくる「blimport()」はsource/blender/python/BPY_interface.cの中でblender_import()にマップされています。
static PyMethodDef bimport[] = {
{"blimport", blender_import, METH_VARARGS, "our own import"}
};
キーワード引数を使う場合、METH_VARARGSに加えてMETH_KEYWORDS指定が必要となります。
{"blimport", (PyCFunction)blender_import, METH_VARARGS|METH_KEYWORDS, "our own import"},
{NULL, NULL} /* sentinel */
METH_KEYWORDSは第3引数にキーワードの辞書が渡されますので、blender_importの引数にkeywdsを追加します。170行目で定義されている関数プロトタイプも同様に変更しておきます。
static PyObject *blender_import( PyObject * self, PyObject * args, PyObject *keywds )
受け取るキーワードと順序をkwlist[]に作成しておきます。
static char *kwlist[] = {"name", "globals", "locals", "fromlist", "level", NULL};
引数の解析関数PyArg_ParseTupleをPyArg_ParseTupleAndKeywordsに変更します。
if( !PyArg_ParseTupleAndKeywords( args, keywds, "s|OOOi:bimport", kwlist,
&name, &globals, &locals, &fromlist, &dummy_val) )
以上の変更で、キーワード引数に対応することができます。
static PyMethodDef bimport[] = {
{"blimport", (PyCFunction)blender_import, METH_VARARGS|METH_KEYWORDS, "our own import"},
{NULL, NULL} /* sentinel */
};
static PyObject *blender_import( PyObject * self, PyObject * args, PyObject *keywds )
{
PyObject *exception, *err, *tb;
char *name;
PyObject *globals = NULL, *locals = NULL, *fromlist = NULL;
PyObject *m;
//PyObject_Print(args, stderr, 0);
#if (PY_VERSION_HEX >= 0x02060000)
int dummy_val; /* what does this do?*/
static char *kwlist[] = {"name", "globals", "locals", "fromlist", "level", NULL};
if( !PyArg_ParseTupleAndKeywords( args, keywds, "s|OOOi:bimport", kwlist,
&name, &globals, &locals, &fromlist, &dummy_val) )
return NULL;
#else
static char *kwlist[] = {"name", "globals", "locals", "fromlist", NULL};
if( !PyArg_ParseTupleAndKeywords( args, keywds, "s|OOO:bimport", kwlist,
&name, &globals, &locals, &fromlist ) )
return NULL;
#endif
最終的にはこんな感じのソースになります。
あとは普通にコンパイルしてインストールすればencodesモジュールをimportしてもエラーは出なくなります。
今回の修正のパッチファイルは↓です。
| 固定リンク
「Blender」カテゴリの記事
- Blenderで首飾りを作成する(2013.09.06)
- 勢いよく噴出する流体(2013.07.21)
- CyclesでSSSを使う(2013.04.13)
- 肌のマテリアル(設定編)(2013.03.26)
- 肌のマテリアル(準備編)(2013.03.25)
この記事へのコメントは終了しました。
コメント