动态模块未定义初始功能 (PyInit_fuzzy)

2024-04-29 01:03:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

因为上面提到它只对Python2有效,所以我尝试使用cython来转换它。以下是我遵循的步骤:

  1. cython模糊.pyx
  2. g c c-g-02-fpicpython-config --cflags-c模糊.c-o模糊.o
  3. 对double_metaphone.c也一样
  4. gcc-shared-o fuzzy.so fuzzy.o双变音。opython-config --libs

当我试图导入fuzzy时,出现了一个错误:

dynamic module does not define init function (PyInit_fuzzy)

怎么了?这是因为Python2号和Python3号的冲突吗?如何解决这个问题?


Tags: 模块httpsorgpypiconfig步骤cythonfuzzy
1条回答
网友
1楼 · 发布于 2024-04-29 01:03:08

这是解决了一个快速的评论,但张贴作为一个答案,以便提供更多的细节。。。

最简单的答案是将python-config的所有实例替换为python3-configpython3.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>更改为PyInit_<modulename>,这大概有助于确保您只能导入为正确版本构建的模块。因此,当使用Python 2构建模块时,它只创建initfuzzy,因此在导入时找不到PyInit_fuzzy

相关问题 更多 >