4

swig 2.0.8 と python 3.2 を使用して実行中

swig -python -modern -py3 -o mymodule_wrap.c mymodule.i

を持つラッパーファイルを生成します

#  define SWIG_init    PyInit__mymodule

そこにあります (PyInit と mymodule の間の 2 つのアンダースコアに注意してください)。

インポートが失敗する

python3 -c "import mymodule"
Traceback (most recent call last):
   File "<string>", line 1, in <module>
ImportError: dynamic module does not define init function (PyInit_mymodule)

(単一のアンダースコアに注意してください)。

アンダースコアを手動で削除しmymodule_wrap.cて再コンパイルすると、モジュールが動作します。

この質問: SWIG and Python3 Import Errorでは、Python インタープリターが見つからないことについて不平を言いましたPyInit__module

どうしたの?

4

1 に答える 1

4

拡張モジュールの名前が_mymodule.pydnotであることを確認してくださいmymodule.pyd

説明:

宣言を含むSWIG.iファイルが与えられた場合:

%module mymodule

SWIG は 2 つのファイルを生成します。

  • mymodule.py
  • mymodule_wrap.c

mymodule.pyimport mymoduleおよび を介して Python にインポートされます_mymodule.pyd

mymodule_wrap.cエントリ ポイント関数が含まれていますPyInit__mymodule。このソース ファイルは、最終的な_mymodule.pyd.

Python のimport <module>ステートメントは次を探します。

  1. <module>.pydエントリーポイント付きPyInit_<module>
  2. <module>.py.

SWIG によって生成された拡張機能の場合、は をimport mymoduleロードします。mymodule.pyこれは をロード_mymodule.pydして正しく検索しPyInit__mymoduleます。

間違った拡張名が使用されている場合、import mymoduleは読み込まれ、 がmymodule.pyd正しく検索されませんPyInit_mymodule

于 2012-09-11T23:39:29.213 に答える