Python+SWIG+MinGW - setup.py构建源代码和pyd文件,python“找不到模块”

1 投票
3 回答
2602 浏览
提问于 2025-04-15 19:16

我正在使用MinGW来构建一个Python的C模块,使用的是Swig工具。当我让Python加载这个模块时,它失败了,并且抱怨说找不到这个模块。

有趣的是,这个模块和我运行Python的目录是同一个,而且这个模块的名字是_mod.pyd。(我还在同一个路径下生成了一个mod.py文件,它使用了_mod.pyd。)

这真让人感到沮丧,简直无法相信!

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "mod.py", line 25, in <module>
    _mod = swig_import_helper()
  File "mod.py", line 21, in swig_import_helper
    _mod = imp.load_module('_mod', fp, pathname, description)
ImportError: DLL load failed: The specified module could not be found.

构建过程很顺利(我使用的是distutils),而且我的所有dll文件都放在一个已经添加到PATH环境变量中的目录里。

我使用的是Windows XP和最新稳定版的MinGW。

谢谢!

3 个回答

0

你试过这个吗:

python setup.py build --compiler=mingw32

?

0

我在MinGW网站上看到了一篇关于“如何创建Python扩展”的文章。

http://www.mingw.org/wiki/FAQ

我知道有个技巧叫做pexports,但我试过几次,结果都不太成功(我记得的情况是这样)。有没有其他人成功做到过这个?

谢谢,

ct

更新

我还找到了一些教程 -> http://boodebr.org/main/python/build-windows-extensions

还有这个教程 -> http://www.mail-archive.com/modwsgi@googlegroups.com/msg04655.html

我觉得可能只需要运行这个命令:“setup.py build -c mingw32”就可以了。

1

这是一个常见的问题。你可能在使用Windows的Python二进制版本,这个版本是用MSC编译的,而不是用MinGW编译的。你可以通过在命令行运行Python时查看解释器的提示来确认这一点。如果确实是这样,你有两个选择:

  • 用MSC编译这个模块,或者
  • 用MinGW编译Python解释器。

对于第二个选项,祝你好运。我从来没有成功过。

撰写回答