我正在使用Python3.4,我正在尝试安装模糊模块
https://pypi.python.org/pypi/Fuzzy.
因为它被提到它只适用于Python2,我试图使用cython转换它。这些是我遵循的步骤:
python-config --cflags
-c fuzzy.c -o fuzzy.o python-config --libs
当我尝试导入模糊时出现错误:
dynamic module does not define init function (PyInit_fuzzy)
问题是什么?这是因为python2和python3的冲突吗?如何解决这个问题?
答案 0 :(得分:13)
这是通过快速评论解决的,但是为了给出更多细节而作为答案发布...
非常简短的回答是替换python-config
或python3-config
的{{1}}的所有实例。
不必要的细节如下
OP试图在Python 3中使用Pyrex模块(这个问题并不是特别清楚),因此在Cython中重建它是一种明智的方法,因为Cython最初是基于Pyrex。 / p> Cython生成的代码应该编译为在Python 2或3中工作,具体取决于包含的头。 python3.4-config
为系统上的默认Python版本生成相关的编译器/链接器选项,在编写本文时,它通常是Python 2(在我的系统上它包括python-config
)。因此,它为Python 2构建模块。使用-I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7
确保包含正确的版本。
在从Python 2到Python 3的转换中,导入C模块时调用的函数已从python3.4-config
更改为init<modulename>
,可能有助于确保您只能导入为正确版本构建的模块。因此,当使用Python 2构建模块时,它只会创建PyInit_<modulename>
,因此无法在导入时找到initfuzzy
。