动态模块没有定义模块导出函数(PyInit_example)
Dynamic module does not define module export function(PyInit_example)
我最近使用 swig.
为 python 构建了一个 C 扩展
起初,我 运行 :
swig -python example.i
然后生成了example.py
& example_wrap.c
我运行之后:
gcc -c example.c example_wrap.c -I D:/path_to_python/Python/include
好的,然后它生成了对象 example.o & example_wrap.o
在我想创建一个共享目标文件之后 运行 :
gcc -o example.dll -s -shared example.o -Wl,--subsystem,windows
生成了example.dll
。
我将 example.dll
的扩展名重命名为 example.pyd
。然后将 example.pyd
& example.py
分别复制并粘贴到 Python\DLLs
& Python\Lib
文件夹。
直到一切顺利。
但是当我打开 python.exe
并写入 import example
时发生错误。它说:
Dynamic module does not define module export function(PyInit_example)
.
我尝试了各种方法但没有用。我想从 .dll
.
生成 .pyd
我用过:
-Windows 10
-Python310
-GCC MinGW 64
感谢那些帮助过我的人。
最终名称应为_example.pyd
(带下划线)。您 import example
加载生成的 example.py
,然后 import _example
并加载 _example.pyd
。无需将任何内容复制到 Python 子目录中。
确保 example.i
文件以 %module example
开头。
我没有安装 MingGW,但这是使用 VS2019 构建的命令行:
example.i
%module example
%inline %{
int add(int a, int b) {
return a + b;
}
%}
演示如下。注意 /Fe
命名输出文件,/LD
创建一个 DLL。
C:\demo>swig -python example.i
C:\demo>cl /LD /Fe_example.pyd /Ic:\python38\include example_wrap.c -link -libpath:c:\python38\libs
Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30136 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
example_wrap.c
Microsoft (R) Incremental Linker Version 14.29.30136.0
Copyright (C) Microsoft Corporation. All rights reserved.
/dll
/implib:_example.lib
/out:_example.pyd
-libpath:c:\python38\libs
example_wrap.obj
Creating library _example.lib and object _example.exp
C:\demo>py
Python 3.8.10 (tags/v3.8.10:3d8993a, May 3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import example
>>> example.add(5,6)
11
这是我对 MingGW 的最佳猜测(未经测试,因为我没有安装它):
swig -python example.i
gcc -c -fpic example.c example_wrap.c -Ipython3.9
gcc -shared example.o example_wrap.o -o _example.pyd
我最近使用 swig.
为 python 构建了一个 C 扩展起初,我 运行 :
swig -python example.i
然后生成了example.py
& example_wrap.c
我运行之后:
gcc -c example.c example_wrap.c -I D:/path_to_python/Python/include
好的,然后它生成了对象 example.o & example_wrap.o
在我想创建一个共享目标文件之后 运行 :
gcc -o example.dll -s -shared example.o -Wl,--subsystem,windows
生成了example.dll
。
我将 example.dll
的扩展名重命名为 example.pyd
。然后将 example.pyd
& example.py
分别复制并粘贴到 Python\DLLs
& Python\Lib
文件夹。
直到一切顺利。
但是当我打开 python.exe
并写入 import example
时发生错误。它说:
Dynamic module does not define module export function(PyInit_example)
.
我尝试了各种方法但没有用。我想从 .dll
.
.pyd
我用过:
-Windows 10
-Python310
-GCC MinGW 64
感谢那些帮助过我的人。
最终名称应为_example.pyd
(带下划线)。您 import example
加载生成的 example.py
,然后 import _example
并加载 _example.pyd
。无需将任何内容复制到 Python 子目录中。
确保 example.i
文件以 %module example
开头。
我没有安装 MingGW,但这是使用 VS2019 构建的命令行:
example.i
%module example
%inline %{
int add(int a, int b) {
return a + b;
}
%}
演示如下。注意 /Fe
命名输出文件,/LD
创建一个 DLL。
C:\demo>swig -python example.i
C:\demo>cl /LD /Fe_example.pyd /Ic:\python38\include example_wrap.c -link -libpath:c:\python38\libs
Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30136 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
example_wrap.c
Microsoft (R) Incremental Linker Version 14.29.30136.0
Copyright (C) Microsoft Corporation. All rights reserved.
/dll
/implib:_example.lib
/out:_example.pyd
-libpath:c:\python38\libs
example_wrap.obj
Creating library _example.lib and object _example.exp
C:\demo>py
Python 3.8.10 (tags/v3.8.10:3d8993a, May 3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import example
>>> example.add(5,6)
11
这是我对 MingGW 的最佳猜测(未经测试,因为我没有安装它):
swig -python example.i
gcc -c -fpic example.c example_wrap.c -Ipython3.9
gcc -shared example.o example_wrap.o -o _example.pyd