我正在使用Python3.4,我正在尝试安装fuzzy模块
https://pypi.python.org/pypi/Fuzzy.
因为上面提到它只对Python2有效,所以我尝试使用cython来转换它。以下是我遵循的步骤:
python-config --cflags
-c模糊.c-o模糊.opython-config --libs
当我试图导入fuzzy时,出现了一个错误:
dynamic module does not define init function (PyInit_fuzzy)
怎么了?这是因为Python2号和Python3号的冲突吗?如何解决这个问题?
这是解决了一个快速的评论,但张贴作为一个答案,以便提供更多的细节。。。
最简单的答案是将
python-config
的所有实例替换为python3-config
或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>
更改为PyInit_<modulename>
,这大概有助于确保您只能导入为正确版本构建的模块。因此,当使用Python 2构建模块时,它只创建initfuzzy
,因此在导入时找不到PyInit_fuzzy
。相关问题 更多 >
编程相关推荐