Cython编译文件出错
报错信息:
(rpc) stu@amax:~/segment/dss_crf$ python setup.py install
Compiling pydensecrf/eigen.pyx because it changed.
Compiling pydensecrf/densecrf.pyx because it changed.
[1/2] Cythonizing pydensecrf/densecrf.pyx
/home/stu/anaconda3/envs/rpc/lib/python3.6/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /home/stu03/kdy/rpc/segment/dss_crf/pydensecrf/densecrf.pxd
tree = Parsing.p_module(s, pxd, full_module_name)
Error compiling Cython file:
------------------------------------------------------------
...
from eigen cimport *
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:1:0: 'eigen.pxd' not found
Error compiling Cython file:
------------------------------------------------------------
...
cdef cppclass PottsCompatibility(LabelCompatibility):
PottsCompatibility(float) except +
cdef cppclass DiagonalCompatibility(LabelCompatibility):
DiagonalCompatibility(const c_VectorXf&) except +
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:12:36: 'c_VectorXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
cdef cppclass DiagonalCompatibility(LabelCompatibility):
DiagonalCompatibility(const c_VectorXf&) except +
cdef cppclass MatrixCompatibility(LabelCompatibility):
MatrixCompatibility(const c_MatrixXf&) except +
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:15:34: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
cdef extern from "densecrf/include/unary.h":
cdef cppclass UnaryEnergy:
pass
cdef cppclass ConstUnaryEnergy(UnaryEnergy):
ConstUnaryEnergy(const c_MatrixXf& unary) except +
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:23:31: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
cdef cppclass ConstUnaryEnergy(UnaryEnergy):
ConstUnaryEnergy(const c_MatrixXf& unary) except +
cdef cppclass LogisticUnaryEnergy(UnaryEnergy):
LogisticUnaryEnergy(const c_MatrixXf& L, const c_MatrixXf& feature) except +
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:26:34: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
cdef cppclass ConstUnaryEnergy(UnaryEnergy):
ConstUnaryEnergy(const c_MatrixXf& unary) except +
cdef cppclass LogisticUnaryEnergy(UnaryEnergy):
LogisticUnaryEnergy(const c_MatrixXf& L, const c_MatrixXf& feature) except +
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:26:55: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
c_DenseCRF(int N, int M) except +
# Setup methods.
# TODO
#void addPairwiseEnergy(PairwisePotential *potential)
void addPairwiseEnergy(const c_MatrixXf &features, LabelCompatibility*, KernelType, NormalizationType)
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:54:37: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
# Setup methods.
# TODO
#void addPairwiseEnergy(PairwisePotential *potential)
void addPairwiseEnergy(const c_MatrixXf &features, LabelCompatibility*, KernelType, NormalizationType)
void setUnaryEnergy(UnaryEnergy *unary)
void setUnaryEnergy(const c_MatrixXf &unary)
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:56:34: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
# TODO
#void addPairwiseEnergy(PairwisePotential *potential)
void addPairwiseEnergy(const c_MatrixXf &features, LabelCompatibility*, KernelType, NormalizationType)
void setUnaryEnergy(UnaryEnergy *unary)
void setUnaryEnergy(const c_MatrixXf &unary)
void setUnaryEnergy(const c_MatrixXf &L, const c_MatrixXf &feature)
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:57:34: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
# TODO
#void addPairwiseEnergy(PairwisePotential *potential)
void addPairwiseEnergy(const c_MatrixXf &features, LabelCompatibility*, KernelType, NormalizationType)
void setUnaryEnergy(UnaryEnergy *unary)
void setUnaryEnergy(const c_MatrixXf &unary)
void setUnaryEnergy(const c_MatrixXf &L, const c_MatrixXf &feature)
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:57:55: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
void setUnaryEnergy(UnaryEnergy *unary)
void setUnaryEnergy(const c_MatrixXf &unary)
void setUnaryEnergy(const c_MatrixXf &L, const c_MatrixXf &feature)
# Inference methods.
c_MatrixXf inference(int n_iterations)
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:60:8: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
c_MatrixXf inference(int n_iterations)
# TODO: Not enabled because it would require wrapping VectorXs (note the `s`)
#c_VectorXs map(int n_iterations)
# Step-by-step inference methods.
c_MatrixXf startInference() const
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:65:8: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
# TODO: Not enabled because it would require wrapping VectorXs (note the `s`)
#c_VectorXs map(int n_iterations)
# Step-by-step inference methods.
c_MatrixXf startInference() const
void stepInference(c_MatrixXf &Q, c_MatrixXf &tmp1, c_MatrixXf &tmp2) const
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:66:27: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
# TODO: Not enabled because it would require wrapping VectorXs (note the `s`)
#c_VectorXs map(int n_iterations)
# Step-by-step inference methods.
c_MatrixXf startInference() const
void stepInference(c_MatrixXf &Q, c_MatrixXf &tmp1, c_MatrixXf &tmp2) const
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:66:42: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
# TODO: Not enabled because it would require wrapping VectorXs (note the `s`)
#c_VectorXs map(int n_iterations)
# Step-by-step inference methods.
c_MatrixXf startInference() const
void stepInference(c_MatrixXf &Q, c_MatrixXf &tmp1, c_MatrixXf &tmp2) const
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:66:60: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
# Step-by-step inference methods.
c_MatrixXf startInference() const
void stepInference(c_MatrixXf &Q, c_MatrixXf &tmp1, c_MatrixXf &tmp2) const
#double gradient( int n_iterations, const ObjectiveFunction & objective, c_VectorXf * unary_grad, c_VectorXf * lbl_cmp_grad, c_VectorXf * kernel_grad=NULL ) const;
double klDivergence(const c_MatrixXf &Q) const
^
------------------------------------------------------------
pydensecrf/densecrf.pxd:69:34: 'c_MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
return eigen.MatrixXf().wrap(self._this.inference(niter))
def startInference(self):
return eigen.MatrixXf().wrap(self._this.startInference()), eigen.MatrixXf(), eigen.MatrixXf()
def stepInference(self, MatrixXf Q, MatrixXf tmp1, MatrixXf tmp2):
^
------------------------------------------------------------
pydensecrf/densecrf.pyx:85:28: 'MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
return eigen.MatrixXf().wrap(self._this.inference(niter))
def startInference(self):
return eigen.MatrixXf().wrap(self._this.startInference()), eigen.MatrixXf(), eigen.MatrixXf()
def stepInference(self, MatrixXf Q, MatrixXf tmp1, MatrixXf tmp2):
^
------------------------------------------------------------
pydensecrf/densecrf.pyx:85:40: 'MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
return eigen.MatrixXf().wrap(self._this.inference(niter))
def startInference(self):
return eigen.MatrixXf().wrap(self._this.startInference()), eigen.MatrixXf(), eigen.MatrixXf()
def stepInference(self, MatrixXf Q, MatrixXf tmp1, MatrixXf tmp2):
^
------------------------------------------------------------
pydensecrf/densecrf.pyx:85:55: 'MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
return eigen.MatrixXf().wrap(self._this.startInference()), eigen.MatrixXf(), eigen.MatrixXf()
def stepInference(self, MatrixXf Q, MatrixXf tmp1, MatrixXf tmp2):
self._this.stepInference(Q.m, tmp1.m, tmp2.m)
def klDivergence(self, MatrixXf Q):
^
------------------------------------------------------------
pydensecrf/densecrf.pyx:88:27: 'MatrixXf' is not a type identifier
Error compiling Cython file:
------------------------------------------------------------
...
def addPairwiseEnergy(self, float[:,::1] features not None, compat, KernelType kernel=DIAG_KERNEL, NormalizationType normalization=NORMALIZE_SYMMETRIC):
self._this.addPairwiseEnergy(eigen.c_matrixXf(features), _labelcomp(compat), kernel, normalization)
def setUnary(self, Unary u):
self._this.setUnaryEnergy(u.move())
^
------------------------------------------------------------
pydensecrf/densecrf.pyx:71:33: ambiguous overloaded method
Traceback (most recent call last):
File "setup.py", line 16, in <module>
ext_modules=cythonize(['pydensecrf/eigen.pyx', 'pydensecrf/densecrf.pyx']),
File "/home/stu/anaconda3/envs/rpc/lib/python3.6/site-packages/Cython/Build/Dependencies.py", line 1154, in cythonize
cythonize_one(*args)
File "/home/stu/anaconda3/envs/rpc/lib/python3.6/site-packages/Cython/Build/Dependencies.py", line 1321, in cythonize_one
raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: pydensecrf/densecrf.pyx
(rpc) stu@amax:~/segment/dss_crf$
解决方法:
(1)尝试从该目录中删除__init__.py
。由于某些原因,它在尝试编译时混淆了cython。
(2)考虑使用pyximport扩展名: import pyximport; pyximport.install()
,然后import your_module
(好像是一个normal.py),如果您只想从普通python文件导入.pyx文件。
注意:在第二种情况下,__init__.py
不必删除。