error: command 'gcc' failed with exit status 1 when installing pip packages on alpine docker image
Missing the header file Python.h
, this file is provide by python2-dev
( -dev
mean package for doing development with ) .
With this https://pkgs.alpinelinux.org/contents you can search all packages that have Python.h
I was able to run pip install pygpgme
by adding these 3 packages :
- python2-dev
- gpgme-dev
- libc-dev
And the Dockerfile
will be :
FROM alpine:latest
RUN apk update && apk upgrade
RUN apk add --no-cache bash\
python \
pkgconfig \
git \
gcc \
openldap \
libcurl \
python2-dev \
gpgme-dev \
libc-dev \
&& rm -rf /var/cache/apk/*
RUN wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py
RUN pip install setuptools==30.1.0
Comments
-
solarflare about 2 years
I'm attempting transition my base docker image from centos 7 to alpine, however I receive gcc errors when trying to install pip packages.
This is a snippet of the error received:
Successfully built backports.ssl-match-hostname configobj dpkt iniparse IPy kitchen logmatic-python maxminddb NeuroTools procfs pycparser python-json-logger pyudev repoze.lru scandir scapy Failed to build guppy kiwisolver numpy psutil pygpgme pyliblzma python-ldap pyxattr subprocess32 Installing collected packages: atomicwrites, attrs, backports.functools-lru-cache, backports.ssl-match-hostname, certifi, chardet, six, configobj, configparser, contextlib2, cycler, decorator, dnspython, dpkt, urllib3, elasticsearch, elasticsearch5, elasticsearch6, funcsigs, ipaddress, maxminddb, idna, requests, geoip2, guppy, scandir, pathlib2, more-itertools, zipp, importlib-metadata, iniparse, IPy, kafka, kafka-python, kitchen, kiwisolver, python-json-logger, logmatic-python, mock, NeuroTools, numpy, pyparsing, packaging, pbr, ptyprocess, pexpect, pluggy, ply, procfs, psutil, py, pyasn1, pyasn1-modules, pycparser, pygpgme, pyliblzma, wcwidth, pytest, python-dateutil, python-ldap, pytz, pyudev, pyxattr, redis, repoze.lru, scapy, subprocess32, xmltodict Running setup.py install for guppy: started Running setup.py install for guppy: finished with status 'error' ERROR: Command errored out with exit status 1: command: /usr/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-PWr6Cn/guppy/setup.py'"'"'; __file__='"'"'/tmp/pip-install-PWr6Cn/guppy/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-ogmKgm/install-record.txt --single-version-externally-managed --compile cwd: /tmp/pip-install-PWr6Cn/guppy/ Complete output (117 lines): running install running build running build_py creating build creating build/lib.linux-x86_64-2.7 creating build/lib.linux-x86_64-2.7/guppy copying guppy/__init__.py -> build/lib.linux-x86_64-2.7/guppy creating build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/docexample.py -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/test_heapyc.py -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/__init__.py -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/test_guppy.py -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/test_heapy.py -> build/lib.linux-x86_64-2.7/guppy/doc creating build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/Code.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/Cat.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/IterPermute.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/OutputHandling.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/KnuthBendix.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/KanExtension.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/Unpack.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/__init__.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/FSA.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/tkcursors.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/cmd.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/xterm.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/etc.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/ExecfileWithModuleInfo.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/Help.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/RE.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/RE_Rect.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/Glue.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/textView.py -> build/lib.linux-x86_64-2.7/guppy/etc copying guppy/etc/Compat.py -> build/lib.linux-x86_64-2.7/guppy/etc creating build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/Html.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/Latex.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/DottedTree.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/Main.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/FileIO.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/Filer.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/__init__.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/XHTML.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/Text.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/Document.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/Gsml.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/Help.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/Exceptions.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/Tester.py -> build/lib.linux-x86_64-2.7/guppy/gsl copying guppy/gsl/SpecNodes.py -> build/lib.linux-x86_64-2.7/guppy/gsl creating build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/Spec.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/OutputHandling.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/Remote.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/RefPat.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/ImpSet.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/Monitor.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/Classifiers.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/__init__.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/RM.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/UniSet.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/View.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/Target.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/Doc.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/Prof.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/Part.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/Console.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/Use.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/Path.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/AbstractAlgebra.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/RemoteConstants.py -> build/lib.linux-x86_64-2.7/guppy/heapy copying guppy/heapy/pbhelp.py -> build/lib.linux-x86_64-2.7/guppy/heapy creating build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_Classifiers.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_sf.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_heapyc.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_OutputHandling.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_Spec.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/__init__.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_View.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_Path.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_UniSet.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_menuleak.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_dependencies.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_RetaGraph.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_Part.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_all.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_RefPat.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/test_ER.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test copying guppy/heapy/test/support.py -> build/lib.linux-x86_64-2.7/guppy/heapy/test creating build/lib.linux-x86_64-2.7/guppy/sets copying guppy/sets/test.py -> build/lib.linux-x86_64-2.7/guppy/sets copying guppy/sets/__init__.py -> build/lib.linux-x86_64-2.7/guppy/sets copying guppy/doc/gsl.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/heapy_UniSet.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/sets.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/heapyc.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/guppy.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/ProfileBrowser.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/heapy_tutorial.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/index.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/docexample.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/heapy_Use.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/gslexample.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/heapy_RootState.html -> build/lib.linux-x86_64-2.7/guppy/doc copying guppy/doc/pbscreen.jpg -> build/lib.linux-x86_64-2.7/guppy/doc running build_ext building 'guppy.sets.setsc' extension creating build/temp.linux-x86_64-2.7 creating build/temp.linux-x86_64-2.7/src creating build/temp.linux-x86_64-2.7/src/sets gcc -fno-strict-aliasing -Os -fomit-frame-pointer -g -DNDEBUG -Os -fomit-frame-pointer -g -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/include/python2.7 -c src/sets/sets.c -o build/temp.linux-x86_64-2.7/src/sets/sets.o src/sets/sets.c:33:10: fatal error: Python.h: No such file or directory #include "Python.h" ^~~~~~~~~~ compilation terminated. error: command 'gcc' failed with exit status 1 ---------------------------------------- ERROR: Command errored out with exit status 1: /usr/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-PWr6Cn/guppy/setup.py'"'"'; __file__='"'"'/tmp/pip-install-PWr6Cn/guppy/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-ogmKgm/install-record.txt --single-version-externally-managed --compile Check the logs for full command output. The command '/bin/sh -c pip install -r /home/admin/container_files/requirements.txt' returned a non-zero code: 1
I can only derive that gcc is not being installed (correctly?) despite being listed in my Dockerfile below. I've also attempted to run it within its own level in case that would install it correctly:
FROM alpine:latest RUN apk update && apk upgrade RUN apk add --no-cache bash\ python \ pkgconfig \ git \ gcc \ openldap \ libcurl \ && rm -rf /var/cache/apk/* RUN wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py ADD requirements.txt /home/admin/container_files/ RUN pip install setuptools==30.1.0 RUN pip install -r /home/admin/container_files/requirements.txt
Uncommenting the
pip install -r requirements.txt
line results in the image being built. After ssh'ing into an instance of the image, gcc does appear to be installed, however I'm unsure why it would then error above:$ docker run -it alpine-image bash bash-5.0# gcc --version gcc (Alpine 8.3.0) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
While in the docker container I can try pip installing a dependency on its own, however this gives a similar error as above:
bash-5.0# pip install pygpgme Collecting pygpgme Using cached https://files.pythonhosted.org/packages/dc/96/b2bcbd3a216af313bb9045c2e573aa18653876a65db471b86be7598234dd/pygpgme-0.3.tar.gz Building wheels for collected packages: pygpgme Building wheel for pygpgme (setup.py) ... error ERROR: Command errored out with exit status 1: command: /usr/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-ih85iq/pygpgme/setup.py'"'"'; __file__='"'"'/tmp/pip-install-ih85iq/pygpgme/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-1HBTfc --python-tag cp27 cwd: /tmp/pip-install-ih85iq/pygpgme/ Complete output (18 lines): running bdist_wheel running build running build_py creating build creating build/lib.linux-x86_64-2.7 creating build/lib.linux-x86_64-2.7/gpgme copying gpgme/__init__.py -> build/lib.linux-x86_64-2.7/gpgme copying gpgme/editutil.py -> build/lib.linux-x86_64-2.7/gpgme running build_ext building 'gpgme._gpgme' extension creating build/temp.linux-x86_64-2.7 creating build/temp.linux-x86_64-2.7/src gcc -fno-strict-aliasing -Os -fomit-frame-pointer -g -DNDEBUG -Os -fomit-frame-pointer -g -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/include/python2.7 -c src/gpgme.c -o build/temp.linux-x86_64-2.7/src/gpgme.o src/gpgme.c:21:10: fatal error: Python.h: No such file or directory #include <Python.h> ^~~~~~~~~~ compilation terminated. error: command 'gcc' failed with exit status 1 ---------------------------------------- ERROR: Failed building wheel for pygpgme Running setup.py clean for pygpgme Failed to build pygpgme Installing collected packages: pygpgme Running setup.py install for pygpgme ... error ERROR: Command errored out with exit status 1: command: /usr/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-ih85iq/pygpgme/setup.py'"'"'; __file__='"'"'/tmp/pip-install-ih85iq/pygpgme/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-1HWn3q/install-record.txt --single-version-externally-managed --compile cwd: /tmp/pip-install-ih85iq/pygpgme/ Complete output (18 lines): running install running build running build_py creating build creating build/lib.linux-x86_64-2.7 creating build/lib.linux-x86_64-2.7/gpgme copying gpgme/__init__.py -> build/lib.linux-x86_64-2.7/gpgme copying gpgme/editutil.py -> build/lib.linux-x86_64-2.7/gpgme running build_ext building 'gpgme._gpgme' extension creating build/temp.linux-x86_64-2.7 creating build/temp.linux-x86_64-2.7/src gcc -fno-strict-aliasing -Os -fomit-frame-pointer -g -DNDEBUG -Os -fomit-frame-pointer -g -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/include/python2.7 -c src/gpgme.c -o build/temp.linux-x86_64-2.7/src/gpgme.o src/gpgme.c:21:10: fatal error: Python.h: No such file or directory #include <Python.h> ^~~~~~~~~~ compilation terminated. error: command 'gcc' failed with exit status 1 ---------------------------------------- ERROR: Command errored out with exit status 1: /usr/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-ih85iq/pygpgme/setup.py'"'"'; __file__='"'"'/tmp/pip-install-ih85iq/pygpgme/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-1HWn3q/install-record.txt --single-version-externally-managed --compile Check the logs for full command output.
I'd like to understand why gcc is behaving in this way, and if there is a better way to transition to an alpine image from centos?
Additional information:
Alpine version: 3.10.3
python version: 2.7.16
pip version: 19.3.1 -
solarflare over 4 yearsThanks for this - I'm able to pip install
pygpgme
successfully :) Though I still get the same gcc error when installing other pip packages, e.g. kiwisolver, pyliblzma and python-ldap. How did you come to the conclusion of installingpython2-dev
,gpgme-dev
andlibc-dev
here? I'm wondering what other apk packages I'm missing -
EchoMike444 over 4 yearsupdated with a way to find which package will provide the missing files
-
AKS almost 4 yearsI have the same error while installing google-cloud-pub-sub but even after installing python3-dev / python2-dev - I still see the same error. stackoverflow.com/questions/62910110