我在安装使用traj-dist
https://github.com/bguillouet/traj-dist的python包时遇到了问题。它可以在Linux上安装,可以用gcc来安装,但不能在winodws中用mingw64 gcc安装。
我使用Python3.8,Cython 0.29.21。
python setup.py build_ext --inplace --force
完整的输出错误消息是这里
Error compiling Cython file:
------------------------------------------------------------
...
q=len(Q)
cc=_compute_critical_values(P,Q,p,q)
eps=cc[0]
while(len(cc)!=1):
m_i=len(cc)/2-1
^
------------------------------------------------------------
traj_dist\cydist\frechet.pyx:535:21: Cannot assign type 'double' to 'int'
编译错误的文件是dist/cydist/frechet.pyx。
如何在windows中编译它?
发布于 2020-11-20 17:37:44
我认为您在Windows和Linux上使用了不同的Cython版本。下面是一个简化的示例:
def f():
cdef int a = 3/2
Python 3行为将返回1.5,而Python 2行为将返回1。
Cython可以同时模拟Python2和Python3。详细信息请参见这个答案。对于Cython0.29.x,默认情况下它将模拟Python 2(但警告您应该显式设置级别),因此文件将编译。对于Cython3.0alpha(和更高的版本)--我怀疑您在Windows上也有--默认情况下它将模仿Py3 (使用字符串的小例外)。
当遵循Py3行为时,Cython并不乐意将一个C双值分配给一个C整数,因为并不是所有的双值都适合于一个整数。
您可以做两个更改,使其能够编译。你只需要做一个
//
而不是/
进行强制整数除法。# cython: language_level=2
的文件顶部将Cython语言级别设置为2您还应该向包的维护人员提交一个bug报告,告诉他们这个包将被即将发布的Cython3.0版本破坏,并且他们可以使用这些方法之一修复它。
发布于 2020-11-20 16:46:28
您使用的是什么版本的Python?看来>= 3.6是必需的。我不知道这个更改是从哪个版本开始的,但是整数数学从Python2.7变成Python3.6。
例如,在Python 2.7中:
>>> 4/3
1
在Python 3.6中:
>>> 4/3
1.3333333333333333
https://stackoverflow.com/questions/64932145
复制相似问题