I'm trying to install gevent on docker image python:3.8.0a4-alpine3.9
which is running gunicorn.
When building the docker, I always get an error "gcc failed with exit status 1".
I've tried installing several packages but none have worked.
Here is the Dockerfile:
FROM python:3.8.0a4-alpine3.9
RUN echo "@edge-community http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories && \
apk update && \
apk add build-base python-dev && \
apk add py-gevent
RUN pip install gunicorn gevent
command:
docker build . -t "test:one"
Last few lines of output:
/usr/local/include/python3.8/code.h:105:28: note: expected 'PyObject *' {aka 'struct _object *'} but argument is of type 'int'
PyAPI_FUNC(PyCodeObject *) PyCode_New(
^~~~~~~~~~
src/gevent/libev/corecext.c:21340:9: warning: passing argument 15 of 'PyCode_New' makes integer from pointer without a cast [-Wint-conversion]
__pyx_empty_bytes /*PyObject *lnotab*/
^~~~~~~~~~~~~~~~~
src/gevent/libev/corecext.c:373:79: note: in definition of macro '__Pyx_PyCode_New'
PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
^~~~
In file included from /usr/local/include/python3.8/compile.h:5,
from /usr/local/include/python3.8/Python.h:137,
from src/gevent/libev/corecext.c:63:
/usr/local/include/python3.8/code.h:105:28: note: expected 'int' but argument is of type 'PyObject *' {aka 'struct _object *'}
PyAPI_FUNC(PyCodeObject *) PyCode_New(
^~~~~~~~~~
src/gevent/libev/corecext.c:373:11: error: too few arguments to function 'PyCode_New'
PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
^~~~~~~~~~
src/gevent/libev/corecext.c:21325:15: note: in expansion of macro '__Pyx_PyCode_New'
py_code = __Pyx_PyCode_New(
^~~~~~~~~~~~~~~~
In file included from /usr/local/include/python3.8/compile.h:5,
from /usr/local/include/python3.8/Python.h:137,
from src/gevent/libev/corecext.c:63:
/usr/local/include/python3.8/code.h:105:28: note: declared here
PyAPI_FUNC(PyCodeObject *) PyCode_New(
^~~~~~~~~~
error: command 'gcc' failed with exit status 1
----------------------------------------
ERROR: Failed building wheel for gevent
Running setup.py clean for gevent
...
lots of stuff
...
out a cast [-Wint-conversion]
__pyx_empty_bytes /*PyObject *lnotab*/
^~~~~~~~~~~~~~~~~
src/gevent/libev/corecext.c:373:79: note: in definition of macro '__Pyx_PyCode_New'
PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
^~~~
In file included from /usr/local/include/python3.8/compile.h:5,
from /usr/local/include/python3.8/Python.h:137,
from src/gevent/libev/corecext.c:63:
/usr/local/include/python3.8/code.h:105:28: note: expected 'int' but argument is of type 'PyObject *' {aka 'struct _object *'}
PyAPI_FUNC(PyCodeObject *) PyCode_New(
^~~~~~~~~~
src/gevent/libev/corecext.c:373:11: error: too few arguments to function 'PyCode_New'
PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
^~~~~~~~~~
src/gevent/libev/corecext.c:21325:15: note: in expansion of macro '__Pyx_PyCode_New'
py_code = __Pyx_PyCode_New(
^~~~~~~~~~~~~~~~
In file included from /usr/local/include/python3.8/compile.h:5,
from /usr/local/include/python3.8/Python.h:137,
from src/gevent/libev/corecext.c:63:
/usr/local/include/python3.8/code.h:105:28: note: declared here
PyAPI_FUNC(PyCodeObject *) PyCode_New(
^~~~~~~~~~
error: command 'gcc' failed with exit status 1
----------------------------------------
ERROR: Command "/usr/local/bin/python -u -c 'import setuptools, tokenize;__file__='"'"'/tmp/pip-install-3i9v17bs/gevent/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-gnyfyggo/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-3i9v17bs/gevent/
Here is the Gunicorn command I am running:
gunicorn web.wsgi:application --bind 0.0.0.0:8000 --worker-connections 1000 --workers 6 -k gevent
Do you have any ideas on how to install Gevent with this version of python alpine?
Edit -
It installs successfully on the last version of Alpine and python - FROM python:3.7-alpine3.8
.
See this, years ago, guys want to install on python3.7 and encountered issue, and fix was made on last year to make gevent
support python3.7.
So, I guess gevent team need additional effort to adapt to every python version as its principle is to make some monkey patch
for python.
And, from its current official announcement, it said:
gevent 1.5 runs on Python 2.7.9 and up, and Python 3.5, 3.6 and 3.7.
It did not mention 3.8, so definitely you need to wait.