Docker-alpine: installing uwsgi using pip fails

Created on 23 Mar 2016  路  9Comments  路  Source: gliderlabs/docker-alpine

Building an image w/ Dockerfile results in error:

FROM gliderlabs/alpine:3.3

RUN apk-install build-base linux-headers musl musl-dev musl-utils bash python python-dev py-pip
# same thing within virtualenv
RUN pip install uwsgi

alpine linux has a package for uwsgi (patched).

does this mean that uwsgi can't be installed using pip and that this will never be possible?

question

Most helpful comment

There have been a couple of patches included in uwsgi and they will be released with 2.0.13.

apk add python3-dev build-base linux-headers pcre-dev
pip install https://github.com/unbit/uwsgi/archive/uwsgi-2.0.zip#egg=uwsgi

works for me...

All 9 comments

The version you get from the pip install uwsgi won't be patched to work against musl. There are a couple patches that would need to be applied according to the APKBUILD at https://github.com/alpinelinux/aports/tree/ae508f2fde7b2949b917907ef5de2f26178b7cce/main/uwsgi. It is probably a question worth posing upstream to see if they can incorporate these fixes to compile on musl. But in the meantime, you'd need to install via the Alpine package.

Is there some support you are looking for in the Alpine package?

no support required, it's easier to separate development/deployment if it's in requirements.txt

There have been a couple of patches included in uwsgi and they will be released with 2.0.13.

apk add python3-dev build-base linux-headers pcre-dev
pip install https://github.com/unbit/uwsgi/archive/uwsgi-2.0.zip#egg=uwsgi

works for me...

This still happens on 2.0.13.1 for me. The worst thing that it's not consistent. Sometimes pip3 install --no-cache-dir --disable-pip-version-check --verbose uwsgi ends with this:

[thread 1][gcc] core/legion.o
[thread 0][gcc] core/dot_h.o
gcc: error trying to exec 'cc1': execvp: No such file or directory
Running setup.py install for uwsgi: finished with status 'error'

sometimes with this:

[thread 0][gcc] core/ssl.o
[thread 1][gcc] core/legion.o
[thread 0][gcc] core/dot_h.o
Running setup.py install for uwsgi: finished with status 'error'

and sometimes it compiles normally:

[thread 0][gcc] core/legion.o
[thread 1][gcc] core/dot_h.o
[thread 1][gcc] core/config_py.o
*** uWSGI compiling embedded plugins ***
[thread 1][gcc] plugins/python/python_plugin.o
[thread 0][gcc] plugins/python/pyutils.o

Any suggestions?

Same problem here. It fails like one in a hundred runs on my machine, and always fails in Gitlab runner on the very same file:

  Running setup.py install for uwsgi: started
    Running setup.py install for uwsgi: finished with status 'error'
    Complete output from command /usr/local/bin/python3.5 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-tkyxtkpz/uwsgi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-9f9bhyj7-record/install-record.txt --single-version-externally-managed --compile:
    running install
    using profile: buildconf/default.ini
    detected include path: ['/usr/include', '/usr/lib/gcc/x86_64-alpine-linux-musl/5.3.0/include']
    Patching "bin_name" to properly install_scripts dir
    detected CPU cores: 2
    configured CFLAGS: -O2 -I. -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -DUWSGI_HAS_IFADDRS -DUWSGI_ZLIB -DUWSGI_LOCK_USE_MUTEX -DUWSGI_EVENT_USE_EPOLL -DUWSGI_EVENT_TIMER_USE_TIMERFD -DUWSGI_EVENT_FILEMONITOR_USE_INOTIFY -DUWSGI_VERSION="\"2.0.14\"" -DUWSGI_VERSION_BASE="2" -DUWSGI_VERSION_MAJOR="0" -DUWSGI_VERSION_MINOR="14" -DUWSGI_VERSION_REVISION="0" -DUWSGI_VERSION_CUSTOM="\"\"" -DUWSGI_YAML -DUWSGI_SSL -DUWSGI_PLUGIN_DIR="\".\"" -DUWSGI_DECLARE_EMBEDDED_PLUGINS="UDEP(python);UDEP(gevent);UDEP(ping);UDEP(cache);UDEP(nagios);UDEP(rrdtool);UDEP(carbon);UDEP(rpc);UDEP(corerouter);UDEP(fastrouter);UDEP(http);UDEP(signal);UDEP(syslog);UDEP(rsyslog);UDEP(logsocket);UDEP(router_uwsgi);UDEP(router_redirect);UDEP(router_basicauth);UDEP(zergpool);UDEP(redislog);UDEP(mongodblog);UDEP(router_rewrite);UDEP(router_http);UDEP(logfile);UDEP(router_cache);UDEP(rawrouter);UDEP(router_static);UDEP(sslrouter);UDEP(spooler);UDEP(cheaper_busyness);UDEP(symcall);UDEP(transformation_tofile);UDEP(transformation_gzip);UDEP(transformation_chunked);UDEP(transformation_offload);UDEP(router_memcached);UDEP(router_redis);UDEP(router_hash);UDEP(router_expires);UDEP(router_metrics);UDEP(transformation_template);UDEP(stats_pusher_socket);" -DUWSGI_LOAD_EMBEDDED_PLUGINS="ULEP(python);ULEP(gevent);ULEP(ping);ULEP(cache);ULEP(nagios);ULEP(rrdtool);ULEP(carbon);ULEP(rpc);ULEP(corerouter);ULEP(fastrouter);ULEP(http);ULEP(signal);ULEP(syslog);ULEP(rsyslog);ULEP(logsocket);ULEP(router_uwsgi);ULEP(router_redirect);ULEP(router_basicauth);ULEP(zergpool);ULEP(redislog);ULEP(mongodblog);ULEP(router_rewrite);ULEP(router_http);ULEP(logfile);ULEP(router_cache);ULEP(rawrouter);ULEP(router_static);ULEP(sslrouter);ULEP(spooler);ULEP(cheaper_busyness);ULEP(symcall);ULEP(transformation_tofile);ULEP(transformation_gzip);ULEP(transformation_chunked);ULEP(transformation_offload);ULEP(router_memcached);ULEP(router_redis);ULEP(router_hash);ULEP(router_expires);ULEP(router_metrics);ULEP(transformation_template);ULEP(stats_pusher_socket);"
    *** uWSGI compiling server core ***
    [thread 1][gcc] core/utils.o
    [thread 0][gcc] core/protocol.o
    [thread 0][gcc] core/socket.o
    [thread 0][gcc] core/logging.o
    [thread 1][gcc] core/master.o
    [thread 0][gcc] core/master_utils.o
    [thread 1][gcc] core/emperor.o
    [thread 0][gcc] core/notify.o
    [thread 0][gcc] core/mule.o
    [thread 1][gcc] core/subscription.o
    [thread 0][gcc] core/stats.o
    [thread 1][gcc] core/sendfile.o
    [thread 1][gcc] core/async.o
    [thread 0][gcc] core/master_checks.o
    [thread 0][gcc] core/fifo.o
    [thread 1][gcc] core/offload.o
    [thread 0][gcc] core/io.o
    [thread 1][gcc] core/static.o
    [thread 1][gcc] core/websockets.o
    [thread 0][gcc] core/spooler.o
    [thread 1][gcc] core/snmp.o
    [thread 0][gcc] core/exceptions.o
    [thread 1][gcc] core/config.o
    [thread 0][gcc] core/setup_utils.o
    [thread 0][gcc] core/clock.o
    [thread 1][gcc] core/init.o
    [thread 0][gcc] core/buffer.o
    [thread 1][gcc] core/reader.o
    [thread 0][gcc] core/writer.o
    [thread 1][gcc] core/alarm.o
    [thread 0][gcc] core/cron.o
    [thread 1][gcc] core/hooks.o
    [thread 0][gcc] core/plugins.o
    [thread 0][gcc] core/lock.o
    [thread 1][gcc] core/cache.o
    [thread 0][gcc] core/daemons.o
    [thread 0][gcc] core/errors.o
    [thread 0][gcc] core/hash.o
    [thread 1][gcc] core/master_events.o
    [thread 0][gcc] core/chunked.o
    [thread 1][gcc] core/queue.o
    [thread 0][gcc] core/event.o
    [thread 1][gcc] core/signal.o
    [thread 0][gcc] core/strings.o
    [thread 1][gcc] core/progress.o
    [thread 1][gcc] core/timebomb.o
    [thread 0][gcc] core/ini.o
    [thread 1][gcc] core/fsmon.o
    [thread 0][gcc] core/mount.o
    [thread 1][gcc] core/metrics.o
    [thread 0][gcc] core/plugins_builder.o
    [thread 0][gcc] core/sharedarea.o
    [thread 0][gcc] core/rpc.o
    [thread 1][gcc] core/gateway.o
    [thread 0][gcc] core/loop.o
    [thread 1][gcc] core/cookie.o
    [thread 0][gcc] core/querystring.o
    [thread 1][gcc] core/rb_timers.o
    [thread 0][gcc] core/transformations.o
    [thread 1][gcc] core/uwsgi.o
    [thread 0][gcc] proto/base.o
    [thread 0][gcc] proto/uwsgi.o
    [thread 0][gcc] proto/http.o
    [thread 0][gcc] proto/fastcgi.o
    [thread 0][gcc] proto/scgi.o
    [thread 0][gcc] proto/puwsgi.o
    [thread 0][gcc] lib/linux_ns.o
    [thread 1][gcc] core/zlib.o
    [thread 1][gcc] core/yaml.o
    [thread 0][gcc] core/ssl.o
    [thread 1][gcc] core/legion.o
    [thread 0][gcc] core/dot_h.o
    gcc: error trying to exec 'cc1': execvp: No such file or directory

@lockie See the uWSGI ticket here: https://github.com/unbit/uwsgi/issues/1318

@andrekeller

The installation of uWSGI fails for me with:

Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-meVQtF/uwsgi/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-fpetYu-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-meVQtF/uwsgi/
The command '/bin/sh -c pip install https://github.com/unbit/uwsgi/archive/uwsgi-2.0.zip#egg=uwsgi' returned a non-zero code: 1

My whole Dockerfile until that point looks like this:

FROM gliderlabs/alpine:latest

# install system packages
RUN apk add --update --no-cache \
    python \
    python-dev \
    build-base \
    linux-headers \
    pcre-dev \
    py-pip \
    curl \
    openssl \
    nginx \
    rsyslog

# pip
RUN pip install --upgrade pip 
RUN pip install docutils
RUN pip install https://github.com/unbit/uwsgi/archive/uwsgi-2.0.zip#egg=uwsgi

EDIT

Solution: python3-dev was missing and is a requirement for uWSGI.

Unfortunately this still seems to not be working, installing uwsgi from pip in the alpine latest image still does not work reliably.

Using python:3.8-alpine image on 2020-10-31 makes it impossible to add uwsgi both with pip's default and with the aforementioned provided GitHub URL.

The error is

/usr/local/lib/python3.8/distutils/dist.py:274: UserWarning: Unknown distribution option: 'descriptions'

Full log available here.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

filiptodoric picture filiptodoric  路  3Comments

IdanAdar picture IdanAdar  路  4Comments

rmNyro picture rmNyro  路  3Comments

javixeneize picture javixeneize  路  4Comments

nrvnrvn picture nrvnrvn  路  4Comments