Reputation: 38255
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: https://github.com/davidstutz/mesh-fusion/issues/7
[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 "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
17 | #warning "Using deprecated NumPy API, disable it with " \
| ^~~~~~~
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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->exc_traceback = *tb;
| ^~~~~~~~~~~~~
| curexc_traceback
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
19149/31772MB(tsdf)
I have:
$ 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 "help", "copyright", "credits" or "license" for more information.
>>> import cython
>>> cython.__version__
'0.29.21'
>>> 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)
Upvotes: 9
Views: 11310
Reputation: 11
my problem solved by changing
python setup.py build_ext --inplace
to
python setup.py build_ext --inplace -force
Upvotes: 1
Reputation: 34367
Force the rebuild/regeneration of cythonized files with -f
(or --force
), i.e.:
python setup.py build_ext -i -f
or if using pip
:
pip install --global-option build --global-option --force .
which can be roughly interpreted as: prior to installing run build
(which includes build_ext
) with option ´--force`.
The issue at hand is, that Cython produces c/cpp-files which might become incompatible in the future with new Python versions.
An example is, that Cython 0.27 didn't have support for Python3.8, because Python3.8 didn't yet exist back then. Thus, c/cpp-files created with Cython 0.27 (e.g. cyfusion.cpp
from git-repository) won't build with Py3.8+-headers.
distutils
uses timestamps to decide whether a file should be rebuild/regenerated/recythonized and as far as it is concerned, the Cython-generated cyfusion.cpp
-file is up-to-date - because cyfusion.pyx
wasn't changed after its generation. The whole different-Python/Cython-version-business isn't taken into the consideration at all.
Thus, forcing the distutils to rebuild everything resolves the issue of outdated c/cpp-files.
In general, I don't think it is a good idea to put the cython-generated files into the distribution/git, as it might/will be become a stumbling block in the future, there are some examples of this:
__reduce_cython__
(e.g. this post)Another possible fix is to delete the outdated (cython-generated) cyfusion.cpp
-file from distribution/git-repository and to run
python setup.py build_ext -i
afterwards.
Upvotes: 4