title: Error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’? when building a Cython extension
body: <p>I get the following error with Python 3.8 and I don't get that error with Python 3.6. How can I make it work with Python 3.8? In order to reproduce the error, please follow along here: <a href="https://github.com/davidstutz/mesh-fusion/issues/7" rel="nofollow noreferrer">https://github.com/davidstutz/mesh-fusion/issues/7</a></p>
  <pre><code>[3645:3637 0:2090] 11:04:08 Tue Jan 12 [mona@goku:pts/0 +1] ~/mesh-fusion/libfusiongpu
  $ python setup.py build_ext --inplace
  Added OpenMP
  running build_ext
  skipping 'cyfusion.cpp' Cython extension (up-to-date)
  building 'cyfusion' extension
  x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/home/mona/venv/tsdf/lib/python3.8/site-packages/numpy/core/include -I/home/mona/venv/tsdf/include -I/usr/include/python3.8 -c cyfusion.cpp -o build/temp.linux-x86_64-3.8/cyfusion.o -ffast-math -msse -msse2 -msse3 -msse4.2 -fopenmp
  In file included from /home/mona/venv/tsdf/lib/python3.8/site-packages/numpy/core/include/numpy/ndarraytypes.h:1822,
                   from /home/mona/venv/tsdf/lib/python3.8/site-packages/numpy/core/include/numpy/ndarrayobject.h:12,
                   from /home/mona/venv/tsdf/lib/python3.8/site-packages/numpy/core/include/numpy/arrayobject.h:4,
                   from cyfusion.cpp:531:
  /home/mona/venv/tsdf/lib/python3.8/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning &quot;Using deprecated NumPy API, disable it with &quot; &quot;#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION&quot; [-Wcpp]
     17 | #warning &quot;Using deprecated NumPy API, disable it with &quot; \
        |  ^~~~~~~
  cyfusion.cpp: In function ‘PyObject* PyInit_cyfusion()’:
  cyfusion.cpp:22866:32: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22866 |   __pyx_type_8cyfusion_PyViews.tp_print = 0;
        |                                ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22866:32: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22866 |   __pyx_type_8cyfusion_PyViews.tp_print = 0;
        |                                ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22866:32: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22866 |   __pyx_type_8cyfusion_PyViews.tp_print = 0;
        |                                ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22871:33: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22871 |   __pyx_type_8cyfusion_PyVolume.tp_print = 0;
        |                                 ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22871:33: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22871 |   __pyx_type_8cyfusion_PyVolume.tp_print = 0;
        |                                 ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22871:33: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22871 |   __pyx_type_8cyfusion_PyVolume.tp_print = 0;
        |                                 ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22878:26: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22878 |   __pyx_type___pyx_array.tp_print = 0;
        |                          ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22878:26: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22878 |   __pyx_type___pyx_array.tp_print = 0;
        |                          ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22878:26: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22878 |   __pyx_type___pyx_array.tp_print = 0;
        |                          ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22883:32: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22883 |   __pyx_type___pyx_MemviewEnum.tp_print = 0;
        |                                ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22883:32: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22883 |   __pyx_type___pyx_MemviewEnum.tp_print = 0;
        |                                ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22883:32: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22883 |   __pyx_type___pyx_MemviewEnum.tp_print = 0;
        |                                ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22895:31: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22895 |   __pyx_type___pyx_memoryview.tp_print = 0;
        |                               ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22895:31: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22895 |   __pyx_type___pyx_memoryview.tp_print = 0;
        |                               ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22895:31: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22895 |   __pyx_type___pyx_memoryview.tp_print = 0;
        |                               ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22905:36: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22905 |   __pyx_type___pyx_memoryviewslice.tp_print = 0;
        |                                    ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22905:36: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22905 |   __pyx_type___pyx_memoryviewslice.tp_print = 0;
        |                                    ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp:22905:36: warning: ‘_typeobject::tp_print’ is deprecated [-Wdeprecated-declarations]
  22905 |   __pyx_type___pyx_memoryviewslice.tp_print = 0;
        |                                    ^~~~~~~~
  In file included from /usr/include/python3.8/object.h:746,
                   from /usr/include/python3.8/pytime.h:6,
                   from /usr/include/python3.8/Python.h:85,
                   from cyfusion.cpp:4:
  /usr/include/python3.8/cpython/object.h:260:30: note: declared here
    260 |     Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
        |                              ^~~~~~~~
  cyfusion.cpp: In function ‘void __Pyx__ExceptionSave(PyThreadState*, PyObject**, PyObject**, PyObject**)’:
  cyfusion.cpp:24028:21: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
  24028 |     *type = tstate-&gt;exc_type;
        |                     ^~~~~~~~
        |                     curexc_type
  cyfusion.cpp:24029:22: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
  24029 |     *value = tstate-&gt;exc_value;
        |                      ^~~~~~~~~
        |                      curexc_value
  cyfusion.cpp:24030:19: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
  24030 |     *tb = tstate-&gt;exc_traceback;
        |                   ^~~~~~~~~~~~~
        |                   curexc_traceback
  cyfusion.cpp: In function ‘void __Pyx__ExceptionReset(PyThreadState*, PyObject*, PyObject*, PyObject*)’:
  cyfusion.cpp:24037:24: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
  24037 |     tmp_type = tstate-&gt;exc_type;
        |                        ^~~~~~~~
        |                        curexc_type
  cyfusion.cpp:24038:25: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
  24038 |     tmp_value = tstate-&gt;exc_value;
        |                         ^~~~~~~~~
        |                         curexc_value
  cyfusion.cpp:24039:22: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
  24039 |     tmp_tb = tstate-&gt;exc_traceback;
        |                      ^~~~~~~~~~~~~
        |                      curexc_traceback
  cyfusion.cpp:24040:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
  24040 |     tstate-&gt;exc_type = type;
        |             ^~~~~~~~
        |             curexc_type
  cyfusion.cpp:24041:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
  24041 |     tstate-&gt;exc_value = value;
        |             ^~~~~~~~~
        |             curexc_value
  cyfusion.cpp:24042:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
  24042 |     tstate-&gt;exc_traceback = tb;
        |             ^~~~~~~~~~~~~
        |             curexc_traceback
  cyfusion.cpp: In function ‘int __Pyx__GetException(PyThreadState*, PyObject**, PyObject**, PyObject**)’:
  cyfusion.cpp:24112:24: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
  24112 |     tmp_type = tstate-&gt;exc_type;
        |                        ^~~~~~~~
        |                        curexc_type
  cyfusion.cpp:24113:25: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
  24113 |     tmp_value = tstate-&gt;exc_value;
        |                         ^~~~~~~~~
        |                         curexc_value
  cyfusion.cpp:24114:22: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
  24114 |     tmp_tb = tstate-&gt;exc_traceback;
        |                      ^~~~~~~~~~~~~
        |                      curexc_traceback
  cyfusion.cpp:24115:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
  24115 |     tstate-&gt;exc_type = local_type;
        |             ^~~~~~~~
        |             curexc_type
  cyfusion.cpp:24116:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
  24116 |     tstate-&gt;exc_value = local_value;
        |             ^~~~~~~~~
        |             curexc_value
  cyfusion.cpp:24117:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
  24117 |     tstate-&gt;exc_traceback = local_tb;
        |             ^~~~~~~~~~~~~
        |             curexc_traceback
  cyfusion.cpp: In function ‘void __Pyx__ExceptionSwap(PyThreadState*, PyObject**, PyObject**, PyObject**)’:
  cyfusion.cpp:24354:24: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
  24354 |     tmp_type = tstate-&gt;exc_type;
        |                        ^~~~~~~~
        |                        curexc_type
  cyfusion.cpp:24355:25: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
  24355 |     tmp_value = tstate-&gt;exc_value;
        |                         ^~~~~~~~~
        |                         curexc_value
  cyfusion.cpp:24356:22: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
  24356 |     tmp_tb = tstate-&gt;exc_traceback;
        |                      ^~~~~~~~~~~~~
        |                      curexc_traceback
  cyfusion.cpp:24357:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_type’; did you mean ‘curexc_type’?
  24357 |     tstate-&gt;exc_type = *type;
        |             ^~~~~~~~
        |             curexc_type
  cyfusion.cpp:24358:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_value’; did you mean ‘curexc_value’?
  24358 |     tstate-&gt;exc_value = *value;
        |             ^~~~~~~~~
        |             curexc_value
  cyfusion.cpp:24359:13: error: ‘PyThreadState’ {aka ‘struct _ts’} has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
  24359 |     tstate-&gt;exc_traceback = *tb;
        |             ^~~~~~~~~~~~~
        |             curexc_traceback
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
  19149/31772MB(tsdf) 
  
  
  </code></pre>
  <p>I have:</p>
  <pre><code>$ pip --version
  pip 20.3.3 from /home/mona/venv/tsdf/lib/python3.8/site-packages/pip (python 3.8)
  19149/31772MB(tsdf) 
  [3645:3637 0:2092] 11:06:58 Tue Jan 12 [mona@goku:pts/0 +1] ~/mesh-fusion/libfusiongpu
  $ python
  Python 3.8.5 (default, Jul 28 2020, 12:59:40) 
  [GCC 9.3.0] on linux
  Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
  &gt;&gt;&gt; import cython
  &gt;&gt;&gt; cython.__version__
  '0.29.21'
  &gt;&gt;&gt; quit()
  19149/31772MB(tsdf) 
  [3645:3637 0:2093] 11:07:14 Tue Jan 12 [mona@goku:pts/0 +1] ~/mesh-fusion/libfusiongpu
  $ lsb_release -a
  LSB Version:    core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch
  Distributor ID: Ubuntu
  Description:    Ubuntu 20.04.1 LTS
  Release:    20.04
  Codename:   focal
  19365/31772MB(tsdf) 
  </code></pre>