首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态模块不定义init函数(PyInit_fuzzy)

动态模块不定义init函数(PyInit_fuzzy)
EN

Stack Overflow用户
提问于 2015-04-15 17:51:53
回答 1查看 11.6K关注 0票数 10

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

代码语言:javascript
复制
https://pypi.python.org/pypi/Fuzzy. 

由于提到它只适用于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 Fuzz.o double_metaphone.o python-config --libs

当我试图导入模糊时,我得到了一个错误:

代码语言:javascript
复制
dynamic module does not define init function (PyInit_fuzzy)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-16 20:49:24

这是通过一个快速的评论来解决的,但为了给出更多的细节,张贴作为一个答复.

简单地说,就是将python-config的所有实例替换为python3-configpython3.4-config

不必要的细节如下

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

Cython生成在Python 2或3中应该编译的代码,这取决于包含了哪些标头。python-config为系统上的默认版本生成相应的编译器/链接器选项,在编写本报告时它通常是Python2(在我的系统中,它包括-I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7)。因此,它为Python2构建了模块。使用python3.4-config可以确保包含正确的版本。

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

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29657319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档