私はdistutilsでパッケージ化した多くのサブモジュールを持つPythonプロジェクトを持っています。私はこれらのサブモジュールのいくつかに住むためにC言語でいくつかのPython拡張をビルドしたいと思いますが、私はサブモジュールにPython拡張モジュールをインストールする方法を理解していません。以下は、私が探しているものの最も簡単な例です。Python C Extensionをビルドしてモジュールからインポートする方法
#include <Python.h>
static PyObject *
get_answer(PyObject *self, PyObject *args)
{
return Py_BuildValue("i", 42);
}
static PyMethodDef Methods[] = {
{"get_answer", get_answer, METH_VARARGS, "The meaning of life."},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initc_extension(void) {
(void) Py_InitModule("c_extension", Methods);
}
そして、ここで働くsetup.py
です:
from distutils.core import setup
from distutils.extension import Extension
setup(name='c_extension_demo',
ext_modules = [Extension('c_extension', sources = ['c_extension.c'])])
の中にインストールした後、ここで
は私のPython拡張c_extension.c
ですvirtualenv私はこれを行うことができます:
>>> import c_extension
>>> c_extension.get_answer()
42
しかし私はサブモジュールにc_extension
、つまりfoo.bar
が存在します。私はこのようなことPythonシェルで動作を取得できるようにするには、このパイプラインの変化に何が必要です:
>>> import foo.bar.c_extension
>>> foo.bar.c_extension.get_answer()
42
答えに感謝しますが、それは私のためにはうまくいかなかった。私は 'foo/bar'ディレクトリに' __init __。py'をつけて、 'foo.bar.'という接頭辞をsetupコマンドに追加しましたが、これは次のように起こります: >>> import foo.bar.c_extension トレースバック(最新の呼び出しの最後): はImportErrorで ファイル「」、行1、:C_EXTENSION –
Rich
そして、ちょうどあなたの編集を見たという名前のモジュール、私もパッケージラインを追加しました。 – Rich
あなたはどのバージョンのPythonを使用していますか?私は2.7.3でテストしています。 – nneonneo