FROM debian:%%PLACEHOLDER%%-slim RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ curl \ netbase \ wget \ git \ openssh-client \ subversion \ procps \ autoconf \ automake \ bzip2 \ file \ g++ \ gcc \ imagemagick \ libbz2-dev \ libc6-dev \ libcurl4-openssl-dev \ libdb-dev \ libevent-dev \ libffi-dev \ libgdbm-dev \ libglib2.0-dev \ libjpeg-dev \ liblzma-dev \ libncurses5-dev \ libncursesw5-dev \ libpng-dev \ libreadline-dev \ libsqlite3-dev \ libssl-dev \ libtool \ libfreetype6-dev \ libxml2-dev \ make \ patch \ xz-utils \ zlib1g-dev \ \ # https://lists.debian.org/debian-devel-announce/2016/09/msg00000.html $( \ # if we use just "apt-cache show" here, it returns zero because "Can't select versions from package 'libmysqlclient-dev' as it is purely virtual", hence the pipe to grep if apt-cache show 'default-libmysqlclient-dev' 2>/dev/null | grep -q '^Version:'; then \ echo 'default-libmysqlclient-dev'; \ else \ echo 'libmysqlclient-dev'; \ fi \ ) \ ; \ set -ex; \ if ! command -v gpg > /dev/null; then \ apt-get update; \ apt-get install -y --no-install-recommends \ gnupg \ dirmngr \ ; \ rm -rf /var/lib/apt/lists/*; \ fi ; \ rm -rf /var/lib/apt/lists/* # ensure local python is preferred over distribution python ENV PATH /usr/local/bin:$PATH # http://bugs.python.org/issue19846 # > At the moment, setting "LANG=C" on a Linux system *fundamentally breaks Python 3*, and that's not OK. ENV LANG C.UTF-8 # runtime dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ tcl \ tk \ && rm -rf /var/lib/apt/lists/* ENV GPG_KEY %%PLACEHOLDER%% ENV PYTHON_VERSION %%PLACEHOLDER%% RUN set -ex \ && buildDeps=' \ dpkg-dev \ tcl-dev \ tk-dev \ ' \ && echo "deb http://cloudfront.debian.net/debian/ buster main contrib\n\ deb http://cloudfront.debian.net/debian-security/ buster/updates main contrib" >> /etc/apt/sources.list \ && apt-get update && apt-get install -y $buildDeps --no-install-recommends && rm -rf /var/lib/apt/lists/* \ \ && wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" \ && wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" \ && export GNUPGHOME="$(mktemp -d)" \ && ( gpg --no-tty --keyserver ipv4.pool.sks-keyservers.net --recv-keys "$GPG_KEY" \ || gpg --keyserver Zpool.sks-keyservers.net --recv-keys "$GPG_KEY" \ || gpg --keyserver pgp.mit.edu --recv-keys "$GPG_KEY" \ || gpg --keyserver keyserver.pgp.com --recv-keys "$GPG_KEY" ) \ && gpg --no-tty --batch --verify python.tar.xz.asc python.tar.xz \ && rm -rf "$GNUPGHOME" python.tar.xz.asc \ && mkdir -p /usr/src/python \ && tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \ && rm python.tar.xz \ \ && cd /usr/src/python \ && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ && ./configure \ --build="$gnuArch" \ --enable-loadable-sqlite-extensions \ --enable-shared \ --with-system-expat \ --with-system-ffi \ --without-ensurepip \ && make -j "$(nproc)" \ && make install \ && ldconfig \ \ && apt-get purge -y --auto-remove $buildDeps \ \ && find /usr/local -depth \ \( \ \( -type d -a \( -name test -o -name tests \) \) \ -o \ \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ \) -exec rm -rf '{}' + \ && rm -rf /usr/src/python # make some useful symlinks that are expected to exist RUN cd /usr/local/bin \ && ln -s idle3 idle \ && ln -s pydoc3 pydoc \ && ln -s python3 python \ && ln -s python3-config python-config # if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value ''" ENV PYTHON_PIP_VERSION %%PLACEHOLDER%% ENV PIP_INSTALL="pip install --no-cache-dir -qq" RUN set -ex; \ \ wget -O get-pip.py 'https://bootstrap.pypa.io/get-pip.py'; \ \ python get-pip.py \ --disable-pip-version-check \ --no-cache-dir \ "pip==$PYTHON_PIP_VERSION" \ ; \ pip --version; \ \ find /usr/local -depth \ \( \ \( -type d -a \( -name test -o -name tests \) \) \ -o \ \( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \ \) -exec rm -rf '{}' +; \ rm -f get-pip.py CMD ["python3"]