Python Cython编译错误“;无法分配类型';双倍';至';int'&引用;在windows中使用mingw64,但在linux中使用ok
我在安装使用Cython的python包时遇到问题。它可以在使用gcc组合后安装在Linux中,但不能在使用mingw64 gcc的winodws中安装 我使用Python 3.8,Cython 0.29.21Python Cython编译错误“;无法分配类型';双倍';至';int'&引用;在windows中使用mingw64,但在linux中使用ok,python,cython,Python,Cython,我在安装使用Cython的python包时遇到问题。它可以在使用gcc组合后安装在Linux中,但不能在使用mingw64 gcc的winodws中安装 我使用Python 3.8,Cython 0.29.21 python setup.py build\u ext--inplace--force 完整输出错误消息为 编译Cython文件时出错: ------------------------------------------------------------ ... q=len(q) c
python setup.py build\u ext--inplace--force
完整输出错误消息为
编译Cython文件时出错:
------------------------------------------------------------
...
q=len(q)
cc=_计算_临界值(P,Q,P,Q)
每股收益=cc[0]
而(len(cc)!=1):
m_i=len(cc)/2-1
^
------------------------------------------------------------
traj_dist\cydist\frechet.pyx:535:21:无法将类型“double”分配给“int”
出现编译错误的文件是
如何在windows中编译它?您使用的是什么版本的Python?看起来>=3.6是必需的。我不知道这个变化是从哪个版本开始的,但是integer math从Python2.7变为Python3.6 例如,在Python 2.7中:
>>> 4/3
1
在Python 3.6中:
>>> 4/3
1.3333333333333333
您使用的是什么版本的Python?看起来>=3.6是必需的。我不知道这个变化是从哪个版本开始的,但是integer math从Python2.7变为Python3.6 例如,在Python 2.7中:
>>> 4/3
1
在Python 3.6中:
>>> 4/3
1.3333333333333333
我想你在Windows和Linux上使用的是不同的Cython版本。下面是一个简化的示例:
def f():
cdef int a = 3/2
Python 3的行为将返回1.5,而Python 2的行为将返回1
Cython可以同时模拟Python 2和Python 3。有关详细信息,请参阅。对于Cython0.29.x,默认情况下它将模拟Python2(但警告您应该显式设置级别),因此文件将编译。对于Cython3.0alpha(和更高版本)——我怀疑你在Windows上有——它将在默认情况下模拟Py3(使用)
当遵循Py3行为时,Cython不乐意将C double分配给C整数,因为并非所有的double值都适合一个整数
您可以进行两个更改,使其能够编译。你只需要做一个
/
代替/
强制整数除法#Cython:language_level=2将Cython语言级别设置为2
您还应该向软件包的维护人员提交一份错误报告,告诉他们即将发布的Cython 3.0版本将破坏软件包,并且他们可以使用这些方法之一来修复它。我认为您在Windows和Linux上使用的是不同的Cython版本。下面是一个简化的示例:
def f():
cdef int a = 3/2
Python 3的行为将返回1.5,而Python 2的行为将返回1
Cython可以同时模拟Python 2和Python 3。有关详细信息,请参阅。对于Cython0.29.x,默认情况下它将模拟Python2(但警告您应该显式设置级别),因此文件将编译。对于Cython3.0alpha(和更高版本)——我怀疑你在Windows上有——它将在默认情况下模拟Py3(使用)
当遵循Py3行为时,Cython不乐意将C double分配给C整数,因为并非所有的double值都适合一个整数
您可以进行两个更改,使其能够编译。你只需要做一个
/
代替/
强制整数除法#Cython:language_level=2将Cython语言级别设置为2
您还应该向软件包的维护人员提交一份错误报告,告诉他们即将发布的Cython 3.0版本将破坏软件包,并且他们可以使用这些方法之一修复它。这是Cython的错误,因此您使用的C编译器与此无关。而Cython版本可能be@DavidW我同意。我使用了Cython v0.29.21。这是来自Cython的错误,因此您使用的C编译器不相关。而Cython版本可能be@DavidW我同意。我使用了Cython v0.29.21。我认为这是正确的想法,但并不完全正确。Cython可以(在某种程度上)遵循Py2或Py3的行为,而使用的Python版本并不能真正决定这一点。在windows上使用Python3.8时会出现错误。我认为这是正确的想法,但并不完全正确。Cython可以(在某种程度上)遵循Py2或Py3的行为,而使用的Python版本并不能真正决定这一点。在windows上使用Python3.8时发生错误。