动态模块没有定义init函数(PyInit_fuzzy)

bla*_*mba 9 python cython

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

https://pypi.python.org/pypi/Fuzzy. 
Run Code Online (Sandbox Code Playgroud)

因为它被提到它只适用于Python2,我试图使用cython转换它.这些是我遵循的步骤:

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

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

dynamic module does not define init function (PyInit_fuzzy)
Run Code Online (Sandbox Code Playgroud)

有什么问题?这是因为python2和python3的冲突吗?怎么解决这个?

Dav*_*idW 14

这是通过快速评论解决的,但为了给出更多细节而发布作为答案...

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

随后有不必要的细节

OP试图用在Python 3耐热玻璃模块(这是不是从这个问题尤其明显),因此在用Cython重建它是采取一个明智的做法,因为用Cython最初基于高硼硅.

Cython生成的代码应编译为在Python 2或3中工作,具体取决于包含的头.python-config为系统上的默认Python版本生成相关的编译器/链接器选项,在撰写本文时,它通常是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在导入时找到.