我正在使用Python3.4,我正在尝试安装模糊模块
https://pypi.python.org/pypi/Fuzzy.
由于提到它仅适用于 Python2,因此我尝试使用 cython 对其进行转换。这些是我遵循的步骤:
- cython 模糊.pyx
- 海湾合作委员会-g -02 -fpic
python-config --cflags
-c 模糊.c -o 模糊.o
- 对 double_metaphone.c 做了同样的事情
- 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
for python3-config
or python3.4-config
.
不必要的细节如下
OP 试图在 Python 3 中使用 Pyrex 模块(这从问题中并不是特别清楚),因此在 Cython 中重建它是一种明智的方法,因为 Cython 最初是基于 Pyrex 的。
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>
to PyInit_<modulename>
,大概是为了帮助确保您只能导入为正确版本构建的模块。因此,当使用 Python 2 构建模块时,它只会创建initfuzzy
,因此无法找到PyInit_fuzzy
关于进口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)