动态模块未定义初始化函数 (PyInit_fuzzy)

dynamic module does not define init function (PyInit_fuzzy)

我正在使用 Python3.4,我正在尝试安装模糊模块

https://pypi.python.org/pypi/Fuzzy. 

由于提到它仅适用于 Python2,我尝试使用 cython 对其进行转换。这些是我遵循的步骤:

  1. 赛通fuzzy.pyx
  2. gcc -g -02 -fpic python-config --cflags -c fuzzy.c -o fuzzy.o
  3. 对double_metaphone.c
  4. 做了同样的事情
  5. gcc -shared -o fuzzy.so fuzzy.o double_metaphone.o python-config --libs

当我尝试导入模糊时出现错误:

dynamic module does not define init function (PyInit_fuzzy)

这是什么问题?这是因为 python2 和 python3 冲突吗?如何解决?

这已通过快速评论解决,但为了提供更多细节而作为答案发布...

非常简短的答案是将 python-config 的所有实例替换为 python3-configpython3.4-config

后面是不必要的细节

OP 试图在 Python 3 中使用 Pyrex 模块(这在问题中不是特别清楚),因此在 Cython 中重建它是一种明智的方法,因为 Cython 最初是基于在 Pyrex 上。

Cython 生成的代码应编译为在 Python 2 或 3 中工作,具体取决于包含哪些 headers。 python-config 为系统上 Python 的默认版本生成相关的 compiler/linker 选项,在撰写本文时通常是 Python 2(在我的系统上它包括 -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7).因此它为 Python 2 构建模块。使用 python3.4-config 确保包含正确的版本。

在从 Python 2 到 Python 3 的转换中,导入 C 模块时调用的函数从 init<modulename> 更改为 PyInit_<modulename>,大概是为了帮助确保您只能导入为正确版本构建的模块。因此,当使用 Python 2 构建模块时,它只会创建 initfuzzy,因此无法在导入时找到 PyInit_fuzzy