Python dll拡張機能のインポート

dll python
Python dll拡張機能のインポート

Pythonの拡張機能を作成し、「abcPython.dll」を作成しました。 このdllをPythonスクリプトにインポートするにはどうすればよいですか?

次のコマンドを使用してインポートしようとするとエラーメッセージが表示されます

>>>import abcPython
>>>Traceback (most recent call last):
     File "", line 1, in
     ImportError: No module named abcPython
>>>

abcPython.dll`へのパスを保存する PYTHONPATH`という名前のシステム環境変数を手動で作成しましたが、それでもエラーは残ります。

どうすればこれを修正できますか?

  3  4


ベストアンサー

WindowsでのCおよびC ++拡張機能の構築を慎重に実行してください-サブセクション7では、

_
出力ファイルの名前は、spam.pyd(リリースモード)またはspam_d.pyd(デバッグモード)です。 * extension .pyd *は、モジュールがPythonインターフェースになるシステムライブラリspam.dllとの混乱を避けるために選択されました+
.
_バージョン2.5での変更:_以前は、spam.dll(リリースモード)またはspam_d.dll(デバッグモード)などのファイル名も認識されていました。
_

.dll`の代わりに .pyd`拡張子を使用するように `DLL`の名前を変更してみてください。

(ありがとう、https://stackoverflow.com/users/221537/peter-hansen [Peter Hansen])

参照は、明示的にINIT関数 `PyMODINIT_FUNC initexample( void) `。 結果のDLLは `example.pyd`に名前を変更する必要があります:

#include "Python.h"

static PyObject *
ex_foo(PyObject *self, PyObject *args)
{
    printf("Hello, world\n");
    Py_INCREF(Py_None);
    return Py_None;
}

static PyMethodDef example_methods[] = {
    {"foo", ex_foo, METH_VARARGS, "foo() doc string"},
    {NULL, NULL}
};

PyMODINIT_FUNC
initexample(void)
{
    Py_InitModule("example", example_methods);
}

12


ああ! さらに別の2.X / 3.Xの落とし穴。 RTFErrorMessage:

ImportError:動的モジュールはinit関数を定義しません(PyInit_abcPython)

プレフィックスに注意してください:* init ではなく、 PyInit_ *です

3.1 docsを参照してください…​ 「初期化関数の名前はPyInit_name()でなければなりません。nameはモジュールの名前です」

2


1


例として、OpenCVをコンパイルし、*。dllとcv2.pydファイルがいくつかあるとします。

これらのファイルをpythonディレクトリ内の「DLLs」フォルダーにコピーする必要があります。

次に、モジュールをインポートして、問題ないかどうかを確認します。

0


タイトルとURLをコピーしました