1

Dockerfile:

# pull official base image
FROM alpine:edge

RUN apk update && apk add build-base libzmq musl-dev python3 python3-dev zeromq-dev \
                  mariadb-dev postgresql-dev

RUN pip3 install pyzmq

# set work directory
WORKDIR /usr/src/myproj
COPY ./requirements.txt ./requirements.txt
# install dependencies
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt

COPY . /usr/src/myproj


# reduce image size by cleaning up the build packages
RUN apk del build-base musl-dev python3-dev zeromq-dev


EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

My requirements.txt

alive-progress==1.3.0
amqp==2.5.1
appnope==0.1.0
APScheduler==3.5.3
argh==0.26.2
astroid==2.2.4
attrs==19.1.0
awsebcli==3.14.4
Babel==2.6.0
backcall==0.1.0
billiard==3.6.1.0
bleach==3.1.0
blessed==1.15.0
botocore==1.10.84
bugsnag==3.6.0
cached-property==1.4.3
celery==4.3.0
cement==2.8.2
certifi==2018.8.24
chardet==3.0.4
colorama==0.3.9
decorator==4.3.2
defusedxml==0.5.0
dj-database-url==0.5.0
Django==2.2.4
django-cors-headers==3.0.2
django-enum-choices==2.1.1
django-enumchoicefield==2.0.0
django-extensions==2.2.1
django-redis==4.10.0
djangorestframework==3.9.4
dnspython==1.16.0
docker==3.5.0
docker-compose==1.21.2
docker-pycreds==0.3.0
dockerpty==0.4.1
docopt==0.6.2
docutils==0.14
entrypoints==0.3
flower==0.9.2
gunicorn==19.9.0
html2text==2019.9.26
idna==2.6
importlib-metadata==0.19
importlib-resources==1.0.2
ipykernel==5.1.0
ipython==7.3.0
ipython-genutils==0.2.0
ipywidgets==7.4.2
isodate==0.6.0
isort==4.3.10
jedi==0.13.3
Jinja2==2.10
jmespath==0.9.3
jsonfield==2.0.2
jsonschema==2.6.0
jupyter==1.0.0
jupyter-client==5.2.4
jupyter-console==6.0.0
jupyter-core==4.4.0
jwplatform==1.2.2
kombu==4.6.4
lazy-object-proxy==1.3.1
MarkupSafe==1.1.1
mccabe==0.6.1
mistune==0.8.4
more-itertools==7.2.0
mysql-connector==2.2.9
mysqlclient==1.4.6
nbconvert==5.4.1
nbformat==4.4.0
notebook==5.7.5
numpy==1.17.4
pandocfilters==1.4.2
parso==0.3.4
pathspec==0.5.5
pathtools==0.1.2
pexpect==4.6.0
pi==0.1.2
pickleshare==0.7.5
powerline-status==2.7
prometheus-client==0.6.0
prompt-toolkit==2.0.9
protobuf==3.6.1
psycopg2==2.7.5
psycopg2-binary==2.7.5
ptyprocess==0.6.0
Pygments==2.3.1
pylint==2.3.1
PyMySQL==0.9.3
pyrsistent==0.14.11
python-dateutil==2.7.3
python-slugify==3.0.3
pytz==2018.5
PyYAML==3.13
pyzmq==18.0.1
qtconsole==4.4.3
redis==3.3.8
requests==2.18.4
requests-toolbelt==0.9.1
semantic-version==2.5.0
Send2Trash==1.5.0
six==1.11.0
sqlparse==0.3.0
tabulate==0.7.5
termcolor==1.1.0
terminado==0.8.1
testpath==0.4.2
text-unidecode==1.2
texttable==0.9.1
timezonefinder==4.1.0
tornado==5.1
traitlets==4.3.2
typed-ast==1.3.1
tzlocal==1.5.1
Unidecode==1.1.1
urllib3==1.22
uWSGI==2.0.17.1
validators==0.14.0
vine==1.3.0
watchdog==0.9.0
wcwidth==0.1.7
webencodings==0.5.1
WebOb==1.8.5
websocket-client==0.51.0
widgetsnbextension==3.4.2
wrapt==1.11.1
zerobouncesdk==0.0.6
zipp==0.6.0

Running docker build produces this error:

ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3.8 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-67emofjc/typed-ast/setup.py'"'"'; __file__='"'"'/tmp/pip-install-67emofjc/typed-ast/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-3om7rooa/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.8/typed-ast
         cwd: /tmp/pip-install-67emofjc/typed-ast/
    Complete output (23 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.8
    creating build/lib.linux-x86_64-3.8/typed_ast
    copying typed_ast/__init__.py -> build/lib.linux-x86_64-3.8/typed_ast
    copying typed_ast/conversions.py -> build/lib.linux-x86_64-3.8/typed_ast
    copying typed_ast/ast27.py -> build/lib.linux-x86_64-3.8/typed_ast
    copying typed_ast/ast3.py -> build/lib.linux-x86_64-3.8/typed_ast
    running build_ext
    building '_ast27' extension
    creating build/temp.linux-x86_64-3.8
    creating build/temp.linux-x86_64-3.8/ast27
    creating build/temp.linux-x86_64-3.8/ast27/Parser
    creating build/temp.linux-x86_64-3.8/ast27/Python
    creating build/temp.linux-x86_64-3.8/ast27/Custom
    gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Os -fomit-frame-pointer -g -Os -fomit-frame-pointer -g -Os -fomit-frame-pointer -g -DTHREAD_STACK_SIZE=0x100000 -fPIC -Iast27/Include -I/usr/include/python3.8 -c ast27/Parser/acceler.c -o build/temp.linux-x86_64-3.8/ast27/Parser/acceler.o
    ast27/Parser/acceler.c:13:10: fatal error: pgenheaders.h: No such file or directory
       13 | #include "pgenheaders.h"
          |          ^~~~~~~~~~~~~~~
    compilation terminated.
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python3.8 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-67emofjc/typed-ast/setup.py'"'"'; __file__='"'"'/tmp/pip-install-67emofjc/typed-ast/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-3om7rooa/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python3.8/typed-ast Check the logs for full command output.
1
  • Note that you can reduce your current MCVE to installing typed-ast==1.3.1. From trial and error, it works under my home machine with python 3.6 but fails in alpine using python 3.8. Installing the latest version of the lib works in alpine. Commented Jan 26, 2020 at 17:08

2 Answers 2

3

Following my above comment, it seems that typed-ast==1.3.1 does not install under python 3.8 (which is the version installed in alpine:edge when running apk add python3).

To confirm that, I have played the following tests against official alpine based python images:

  • docker run -it --rm --name test python:3.6-alpine sh -c "apk add build-base && pip install typed-ast==1.3.1" => ok
  • docker run -it --rm --name test python:3.7-alpine sh -c "apk add build-base && pip install typed-ast==1.3.1" => ok
  • docker run -it --rm --name test python:3.8-alpine sh -c "apk add build-base && pip install typed-ast==1.3.1" => KO

I suggest you try building your above app starting from a compatible official python image (i.e. < 3.8)

Sign up to request clarification or add additional context in comments.

Comments

0

Upgrading to typed-ast==1.4.1 worked for me using Python 3.8.5 on Mac.

Thanks for your suggestion.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.