我在安装traj-dist 使用Cython. 在Linux下使用gcc编译后可以安装,但在winodws下使用mingw64 gcc编译后无法安装。
我使用Python 3.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'
Run Code Online (Sandbox Code Playgroud)
有编译错误的文件是https://github.com/bguillouet/traj-dist/blob/master/traj_dist/cydist/frechet.pyx
我怎样才能在windows下编译它?
我认为您在 Windows 和 Linux 上使用不同的 Cython 版本。这是一个简化的示例:
def f():
cdef int a = 3/2
Run Code Online (Sandbox Code Playgroud)
Python 3 的行为将返回 1.5,而 Python 2 的行为将返回 1。
Cython 可以模拟 Python 2 和 Python 3。有关详细信息,请参阅此答案。对于 Cython 0.29.x,它将默认模拟 Python 2(但会警告您应显式设置级别),因此文件将进行编译。对于 Cython 3.0alpha (及更高版本) - 我怀疑您在 Windows 上有 - 它默认会模拟 Py3 (字符串有一个小例外)。
当遵循 Py3 行为时,Cython 不乐意将 C double 分配给 C 整数,因为并非所有 double 值都适合整数。
您可以进行两项更改来使其编译。你只需要制作其中之一
//而不是/强制整数除法。# cython: language_level=2您还应该向包的维护者提交一份错误报告,告诉他们该包将被即将发布的 Cython 3.0 版本破坏,并且他们可以使用其中一种方法来修复它。