mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
Compare commits
96 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a9e5c60106 | |||
| 1df55a6c3c | |||
| a51e4f8660 | |||
| 46281960c7 | |||
| a19d4950a9 | |||
| 753134a2fa | |||
| 998a15395b | |||
| e68f556e63 | |||
| ef333c516b | |||
| 552f0f77d5 | |||
| 583b9cfd95 | |||
| c182bacdf2 | |||
| ca9b6de50f | |||
| 5910581665 | |||
| c1f6862110 | |||
| 520c240edd | |||
| 61341d17b8 | |||
| acfc7240f8 | |||
| e32aaf9d00 | |||
| ec57979bf8 | |||
| 0057d19082 | |||
| 0419921227 | |||
| 7d743e7998 | |||
| 2942fc8e4a | |||
| 0e1ac6217b | |||
| 848c846a3d | |||
| 179f345f5b | |||
| 6fc11b8370 | |||
| f189df5415 | |||
| 8253ffa354 | |||
| 514c494891 | |||
| 9a9e972db0 | |||
| 9ff9466fd5 | |||
| 1750242ccd | |||
| 50460beb95 | |||
| 69c17b343a | |||
| f31e9fa835 | |||
| 5788ff57cd | |||
| f0f3463658 | |||
| ffc7683c05 | |||
| 3a6f7f849b | |||
| 475af5a1f8 | |||
| d166ee88d7 | |||
| ba55465a2b | |||
| 8eb2954e92 | |||
| 468d27ab98 | |||
| 515a222cc4 | |||
| 53c4674ecd | |||
| 93a620e6ed | |||
| a7a257e099 | |||
| 40e91a9755 | |||
| 7686370d81 | |||
| 2d6990425e | |||
| b5b640ab00 | |||
| dfe28cbe28 | |||
| 8fc94c0868 | |||
| 86fc9f156b | |||
| 2a4f0a66c3 | |||
| 87ba8b499a | |||
| f03b7ed048 | |||
| bf1b1dc3f8 | |||
| a421ea93e3 | |||
| 3c40bf8bea | |||
| f28465bec7 | |||
| fade163df8 | |||
| 13fad186ff | |||
| c12f395c9a | |||
| 43c54abf0e | |||
| 151df58e86 | |||
| 1c87fd3d6e | |||
| 50cdf10a36 | |||
| 0be5993e32 | |||
| 3f9a80ad24 | |||
| 14c15f4dd8 | |||
| 9bd5fa7c7f | |||
| 89885a4472 | |||
| 3c193bd475 | |||
| a7f62496b1 | |||
| f1b0f8c154 | |||
| f90dfbc12e | |||
| 9ca0c4eb84 | |||
| dc694d4712 | |||
| b4b94abea0 | |||
| 0c66cea063 | |||
| 48f6e20fc5 | |||
| e821501114 | |||
| 03c12e8081 | |||
| de18566b47 | |||
| 939594ecf4 | |||
| d54da94d47 | |||
| ce6657d5fe | |||
| 74bc1d4049 | |||
| c4b4bfaa3c | |||
| 7c82017a0e | |||
| 6a8aa1e2b0 | |||
| 35873ee517 |
+3
-3
@@ -10,11 +10,11 @@ before_script:
|
||||
|
||||
script:
|
||||
- docker build --pull --tag travis-build-cedar-14 --file $(pwd)/builds/cedar-14.Dockerfile .
|
||||
- docker run --rm -e "STACK=cedar-14" travis-build-cedar-14 bash $TESTFOLDER
|
||||
- docker run --rm -e "STACK=cedar-14" -e "USE_STAGING_BINARIES=$USE_STAGING_BINARIES" travis-build-cedar-14 bash $TESTFOLDER
|
||||
- docker build --pull --tag travis-build-heroku-16 --file $(pwd)/builds/heroku-16.Dockerfile .
|
||||
- docker run --rm -e "STACK=heroku-16" travis-build-heroku-16 bash $TESTFOLDER
|
||||
- docker run --rm -e "STACK=heroku-16" -e "USE_STAGING_BINARIES=$USE_STAGING_BINARIES" travis-build-heroku-16 bash $TESTFOLDER
|
||||
- docker build --pull --tag travis-build-heroku-18 --file $(pwd)/builds/heroku-18.Dockerfile .
|
||||
- docker run --rm -e "STACK=heroku-18" travis-build-heroku-18 bash $TESTFOLDER
|
||||
- docker run --rm -e "STACK=heroku-18" -e "USE_STAGING_BINARIES=$USE_STAGING_BINARIES" travis-build-heroku-18 bash $TESTFOLDER
|
||||
|
||||
jobs:
|
||||
include:
|
||||
|
||||
+29
-1
@@ -2,10 +2,38 @@
|
||||
|
||||
# Master
|
||||
|
||||
- Bugfix: Pipenv no longer installs twice in CI
|
||||
- Correct ftp to https in vendored file
|
||||
- Warn for Django 1.11 approaching EOL, provide link to roadmap
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
# 165 (2020-02-27)
|
||||
|
||||
- Python 3.8.2 now available.
|
||||
|
||||
# 164 (2020-02-20)
|
||||
|
||||
- Update requirements.txt builds to use Pip 20.0.2
|
||||
- Download get-pip.py to tmpdir instead of root dir
|
||||
|
||||
# 163 (2019-12-23)
|
||||
|
||||
- New pythons released:
|
||||
Python 3.8.1, 3.7.6, 3.6.10 (CPython)
|
||||
Beta Release: Pypy 2.7 and 3.6, version 7.2.0
|
||||
|
||||
# 162 (2019-12-06)
|
||||
|
||||
- Bug fix: fragile sqlite3 install
|
||||
|
||||
# 161 (2019-12-2)
|
||||
|
||||
- Bug fix: Sqlite3 version bump
|
||||
|
||||
# 160 (2019-10-23)
|
||||
|
||||
- Bugfix: Pipenv no longer installs twice in CI
|
||||
|
||||
# 159 (2019-10-22)
|
||||
|
||||
- Python 2.7.17 now available on Heroku 18 and 16.
|
||||
|
||||
+21
-1
@@ -58,11 +58,31 @@ PY36="python-3.6"
|
||||
PY35="python-3.5"
|
||||
PY34="python-3.4"
|
||||
PY27="python-2.7"
|
||||
PYPY27="pypy2.7"
|
||||
PYPY36="pypy3.6"
|
||||
|
||||
# Which stack is used (for binary downloading), if none is provided (e.g. outside of Heroku)?
|
||||
DEFAULT_PYTHON_STACK="cedar-14"
|
||||
# If pip doesn't match this version (the version we install), run the installer.
|
||||
PIP_UPDATE="9.0.2"
|
||||
PIP_UPDATE="20.0.2"
|
||||
|
||||
for file in "$BUILD_DIR/runtime.txt" "$CACHE_DIR/.heroku/python-version" ; do
|
||||
[ -f "$file" ] || continue
|
||||
|
||||
version=$(tr -d '[:space:]' < "$file")
|
||||
|
||||
case "$version" in "$PY34"*)
|
||||
# Python 3.4 support was dropped in pip >= 19.2.
|
||||
PIP_UPDATE="19.1.1"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -f "$BUILD_DIR/Pipfile" ]]; then
|
||||
# Do not force pipenv users to re-install pipenv locally.
|
||||
PIP_UPDATE="9.0.2"
|
||||
fi
|
||||
|
||||
export DEFAULT_PYTHON_STACK PIP_UPDATE
|
||||
export PY37 PY36 PY35 PY27 PY34
|
||||
|
||||
+15
-5
@@ -1,11 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
DEFAULT_PYTHON_VERSION="python-3.6.9"
|
||||
LATEST_38="python-3.8.0"
|
||||
LATEST_37="python-3.7.5"
|
||||
LATEST_36="python-3.6.9"
|
||||
DEFAULT_PYTHON_VERSION="python-3.6.10"
|
||||
LATEST_38="python-3.8.2"
|
||||
LATEST_37="python-3.7.6"
|
||||
LATEST_36="python-3.6.10"
|
||||
LATEST_35="python-3.5.7"
|
||||
LATEST_34="python-3.4.10"
|
||||
LATEST_27="python-2.7.17"
|
||||
PYPY_36="pypy3.6-7.2.0"
|
||||
PYPY_27="pypy2.7-7.2.0"
|
||||
|
||||
export DEFAULT_PYTHON_VERSION LATEST_38 LATEST_37 LATEST_36 LATEST_35 LATEST_34 LATEST_27
|
||||
export DEFAULT_PYTHON_VERSION \
|
||||
LATEST_38 \
|
||||
LATEST_37 \
|
||||
LATEST_36 \
|
||||
LATEST_35 \
|
||||
LATEST_34 \
|
||||
LATEST_27 \
|
||||
PYPY_36 \
|
||||
PYPY_27
|
||||
|
||||
@@ -38,6 +38,12 @@ if [ ! "$SKIP_PIP_INSTALL" ]; then
|
||||
mcount "failure.none-version"
|
||||
fi
|
||||
|
||||
if grep -q 'django==1.*' requirements.txt; then
|
||||
puts-warn "Your Django version is nearing the end of its community support."
|
||||
puts-warn "Upgrade to continue to receive security updates and for the best experience with Django."
|
||||
puts-warn "For more information, check out https://www.djangoproject.com/weblog/2015/jun/25/roadmap/"
|
||||
fi
|
||||
|
||||
if [ ! -f "$BUILD_DIR/.heroku/python/bin/pip" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
+27
-4
@@ -9,6 +9,10 @@ VENDORED_PYTHON="${VENDOR_URL}/runtimes/$PYTHON_VERSION.tar.gz"
|
||||
|
||||
SECURITY_UPDATE="Python has released a security update! Please consider upgrading to"
|
||||
|
||||
ONLY_SUPPORTED_2_VERSION="Only the latest version of Python 2 is supported on the platform. Please consider upgrading to"
|
||||
|
||||
PYTHON_2_EOL_UPDATE="Python 2 has reached it's community EOL. Upgrade your Python runtime to maintain a secure application as soon as possible."
|
||||
|
||||
# check if runtime exists
|
||||
if curl --output /dev/null --silent --head --fail "$VENDORED_PYTHON"; then
|
||||
if [[ "$PYTHON_VERSION" == $PY38* ]]; then
|
||||
@@ -48,8 +52,26 @@ if curl --output /dev/null --silent --head --fail "$VENDORED_PYTHON"; then
|
||||
fi
|
||||
if [[ "$PYTHON_VERSION" == $PY27* ]]; then
|
||||
# security update note
|
||||
if [[ "$(date "+%Y")" -gt "2019" ]]; then
|
||||
puts-warn "$PYTHON_2_EOL_UPDATE"
|
||||
echo " Learn More: https://devcenter.heroku.com/articles/python-2-7-eol-faq"
|
||||
fi
|
||||
if [ "$PYTHON_VERSION" != "$LATEST_27" ]; then
|
||||
puts-warn "$SECURITY_UPDATE" "$LATEST_27"
|
||||
puts-warn "$ONLY_SUPPORTED_2_VERSION" "$LATEST_27"
|
||||
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
|
||||
fi
|
||||
fi
|
||||
if [[ "$PYTHON_VERSION" == $PYPY27* ]]; then
|
||||
# security update note
|
||||
if [ "$PYTHON_VERSION" != "$PYPY_27" ]; then
|
||||
puts-warn "Could not find that Pypy version. Did you mean" "${PYPY_27}?"
|
||||
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
|
||||
fi
|
||||
fi
|
||||
if [[ "$PYTHON_VERSION" == $PYPY36* ]]; then
|
||||
# security update note
|
||||
if [ "$PYTHON_VERSION" != "$PYPY_36" ]; then
|
||||
puts-warn "Could not find that Pypy version. Did you mean" "${PYPY_36}?"
|
||||
echo " Learn More: https://devcenter.heroku.com/articles/python-runtimes"
|
||||
fi
|
||||
fi
|
||||
@@ -106,9 +128,10 @@ fi
|
||||
|
||||
# Heroku uses the get-pip utility maintained by the Python community to vendor Pip.
|
||||
# https://github.com/pypa/get-pip
|
||||
GETPIP="https://lang-python.s3.amazonaws.com/etc/get-pip.py"
|
||||
GETPIP_URL="https://lang-python.s3.amazonaws.com/etc/get-pip.py"
|
||||
GETPIP_PY="${TMPDIR:-/tmp}/get-pip.py"
|
||||
|
||||
if ! curl -s "${GETPIP}" -o "$ROOT_DIR/get-pip.py" &> /dev/null; then
|
||||
if ! curl -s "${GETPIP_URL}" -o "$GETPIP_PY" &> /dev/null; then
|
||||
mcount "failure.python.get-pip"
|
||||
echo "Failed to pull down get-pip"
|
||||
exit 1
|
||||
@@ -123,7 +146,7 @@ if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_UPDATE* ]]; then
|
||||
rm -fr /app/.heroku/python/lib/python*/site-packages/pip-*
|
||||
rm -fr /app/.heroku/python/lib/python*/site-packages/setuptools-*
|
||||
|
||||
/app/.heroku/python/bin/python "$ROOT_DIR/get-pip.py" pip=="$PIP_UPDATE" &> /dev/null
|
||||
/app/.heroku/python/bin/python "$GETPIP_PY" pip=="$PIP_UPDATE" &> /dev/null
|
||||
/app/.heroku/python/bin/pip install "$ROOT_DIR/vendor/setuptools-39.0.1-py2.py3-none-any.whl" &> /dev/null
|
||||
fi
|
||||
|
||||
|
||||
+11
-26
@@ -3,21 +3,8 @@
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/utils"
|
||||
|
||||
sqlite3_version() {
|
||||
if [ "$STACK" = "cedar-14" ]; then
|
||||
SQLITE3_VERSION="3.8.2-1ubuntu2.2"
|
||||
elif [ "$STACK" = "heroku-16" ]; then
|
||||
SQLITE3_VERSION="3.11.0-1ubuntu1.2"
|
||||
else
|
||||
SQLITE3_VERSION=${SQLITE3_VERSION:-$(dpkg -s libsqlite3-0 | grep Version | sed 's/Version: //')}
|
||||
fi
|
||||
|
||||
export SQLITE3_VERSION
|
||||
}
|
||||
|
||||
sqlite3_install() {
|
||||
HEROKU_PYTHON_DIR="$1"
|
||||
SQLITE3_VERSION="$2"
|
||||
HEADERS_ONLY="$3"
|
||||
|
||||
mkdir -p "$HEROKU_PYTHON_DIR"
|
||||
@@ -35,9 +22,9 @@ sqlite3_install() {
|
||||
|
||||
apt-get $APT_OPTIONS update > /dev/null 2>&1
|
||||
if [ -z "$HEADERS_ONLY" ]; then
|
||||
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev="$SQLITE3_VERSION" sqlite3="$SQLITE3_VERSION" > /dev/null 2>&1
|
||||
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev sqlite3 > /dev/null 2>&1
|
||||
else
|
||||
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev="$SQLITE3_VERSION"
|
||||
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev
|
||||
fi
|
||||
|
||||
find "$APT_CACHE_DIR/archives/" -name "*.deb" -exec dpkg -x {} "$HEROKU_PYTHON_DIR/sqlite3/" \;
|
||||
@@ -70,7 +57,6 @@ sqlite3_install() {
|
||||
}
|
||||
|
||||
buildpack_sqlite3_install() {
|
||||
sqlite3_version
|
||||
HEROKU_PYTHON_DIR="$BUILD_DIR/.heroku/python"
|
||||
|
||||
SQLITE3_VERSION_FILE="$BUILD_DIR/.heroku/python-sqlite3-version"
|
||||
@@ -78,16 +64,15 @@ buildpack_sqlite3_install() {
|
||||
INSTALLED_SQLITE3_VERSION=$(cat "$SQLITE3_VERSION_FILE")
|
||||
fi
|
||||
|
||||
# python version check
|
||||
if python_sqlite3_check "$PYTHON_VERSION"; then
|
||||
# only install if the sqlite3 version has changed
|
||||
if [ "$INSTALLED_SQLITE3_VERSION" != "$SQLITE3_VERSION" ]; then
|
||||
puts-step "Installing SQLite3"
|
||||
sqlite3_install "$BUILD_DIR/.heroku/python" "$SQLITE3_VERSION"
|
||||
puts-step "Installing SQLite3"
|
||||
|
||||
# save version installed
|
||||
mkdir -p "$CACHE_DIR/.heroku/"
|
||||
echo "$SQLITE3_VERSION" > "$CACHE_DIR/.heroku/python-sqlite3-version"
|
||||
fi
|
||||
if sqlite3_install "$BUILD_DIR/.heroku/python" ; then
|
||||
echo "Sqlite3 successfully installed."
|
||||
mcount "success.python.sqlite3"
|
||||
else
|
||||
echo "Sqlite3 failed to install."
|
||||
mcount "failure.python.sqlite3"
|
||||
fi
|
||||
|
||||
mkdir -p "$CACHE_DIR/.heroku/"
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ ENV WORKSPACE_DIR="/app/builds" \
|
||||
DEBIAN_FRONTEND=noninteractive \
|
||||
STACK="cedar-14"
|
||||
|
||||
RUN apt-get update && apt-get install -y python-pip && rm -rf /var/lib/apt/lists/*
|
||||
RUN apt-get update && apt-get install -y python-pip libsqlite3-dev realpath && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY requirements.txt /app/
|
||||
RUN pip install -r /app/requirements.txt
|
||||
|
||||
@@ -7,7 +7,7 @@ ENV WORKSPACE_DIR="/app/builds" \
|
||||
DEBIAN_FRONTEND=noninteractive \
|
||||
STACK="heroku-16"
|
||||
|
||||
RUN apt-get update && apt-get install -y python-pip && rm -rf /var/lib/apt/lists/*
|
||||
RUN apt-get update && apt-get install -y python-pip libsqlite3-dev && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY requirements.txt /app/
|
||||
RUN pip install --disable-pip-version-check --no-cache-dir -r /app/requirements.txt
|
||||
|
||||
@@ -7,7 +7,7 @@ ENV WORKSPACE_DIR="/app/builds" \
|
||||
DEBIAN_FRONTEND=noninteractive \
|
||||
STACK="heroku-18"
|
||||
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y python-pip-whl=9.0.1-2 python-pip=9.0.1-2 python-setuptools python-wheel && rm -rf /var/lib/apt/lists/*
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y python-pip-whl=9.0.1-2 python-pip=9.0.1-2 python-setuptools python-wheel libsqlite3-dev && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY requirements.txt /app/
|
||||
RUN pip install --disable-pip-version-check --no-cache-dir -r /app/requirements.txt
|
||||
|
||||
Vendored
+2
-2
@@ -15,11 +15,11 @@ hash -r
|
||||
|
||||
echo "Building libffi…"
|
||||
|
||||
SOURCE_TARBALL='ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz'
|
||||
SOURCE_TARBALL='https://github.com/libffi/libffi/archive/v3.1.tar.gz'
|
||||
|
||||
curl -L $SOURCE_TARBALL | tar x
|
||||
|
||||
cd libffi-3.1
|
||||
cd v3.1
|
||||
./configure --prefix=$OUT_PREFIX --disable-static &&
|
||||
make
|
||||
make install
|
||||
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# fail hard
|
||||
set -o pipefail
|
||||
# fail harder
|
||||
set -eu
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
dep_formula=${0#$WORKSPACE_DIR/} # this is the original script, e.g. pypy-5.3.1
|
||||
dep_name=$(basename $BASH_SOURCE) # this is us
|
||||
dep_version=${dep_formula##*"/${dep_name}-"} # "subtract" our name from full version name
|
||||
dep_package=${dep_name}-v${dep_version} # it's always "pypy2-…"
|
||||
dep_dirname=${dep_package}-linux64
|
||||
dep_archive_name=${dep_dirname}.tar.bz2
|
||||
dep_url=https://bitbucket.org/pypy/pypy/downloads/${dep_archive_name}
|
||||
|
||||
echo "Building PyPy…"
|
||||
echo "${dep_url}"
|
||||
|
||||
curl -L "${dep_url}" | tar jx -C "${OUT_PREFIX}" --strip-components 1 # extract to $OUT_PREFIX, drop the first directory level, which is the archive name
|
||||
|
||||
ln "$OUT_PREFIX/bin/pypy" "$OUT_PREFIX/bin/python"
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
source $(dirname $0)/pypy2.7
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# fail hard
|
||||
set -o pipefail
|
||||
# fail harder
|
||||
set -eu
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
dep_formula=${0#$WORKSPACE_DIR/} # this is the original script, e.g. pypy-5.3.1
|
||||
dep_name=$(basename $BASH_SOURCE) # this is us
|
||||
dep_version=${dep_formula##*"/${dep_name}-"} # "subtract" our name from full version name
|
||||
dep_package=${dep_name}${dep_version_prefix:-}-v${dep_version}${dep_version_suffix:-}
|
||||
dep_dirname=${dep_package}-linux64
|
||||
dep_archive_name=${dep_dirname}.tar.bz2
|
||||
dep_url=https://bitbucket.org/pypy/pypy/downloads/${dep_archive_name}
|
||||
|
||||
echo "Building PyPy3…"
|
||||
echo "${dep_url}"
|
||||
|
||||
curl -L "${dep_url}" | tar jx -C "${OUT_PREFIX}" --strip-components 1 # extract to $OUT_PREFIX, drop the first directory level, which is the archive name
|
||||
|
||||
ln "$OUT_PREFIX/bin/pypy3" "$OUT_PREFIX/bin/python"
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
source $(dirname $0)/pypy3.6
|
||||
@@ -1,15 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.10/Python-2.7.10.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-2.7.10 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
source $(dirname $0)/python2
|
||||
|
||||
@@ -1,15 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.11/Python-2.7.11.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-2.7.11 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
source $(dirname $0)/python2
|
||||
|
||||
@@ -1,15 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.12/Python-2.7.12.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-2.7.12 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
source $(dirname $0)/python2
|
||||
|
||||
@@ -1,19 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.13/Python-2.7.13.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-2.7.13 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
source $(dirname $0)/python2
|
||||
|
||||
@@ -1,19 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.14/Python-2.7.14.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-2.7.14 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
source $(dirname $0)/python2
|
||||
|
||||
@@ -1,27 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.15/Python-2.7.15.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-2.7.15 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
source $(dirname $0)/python2
|
||||
|
||||
@@ -1,27 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.16/Python-2.7.16.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-2.7.16 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
source $(dirname $0)/python2
|
||||
|
||||
@@ -1,15 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/2.7.9/Python-2.7.9.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-2.7.9 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
source $(dirname $0)/python2
|
||||
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
source $(dirname $0)/python3
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
source $(dirname $0)/python3
|
||||
@@ -1,18 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.5.2/Python-3.5.2.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.5.2 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,18 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.5.3/Python-3.5.3.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.5.3 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||
|
||||
source $(dirname $0)/python3
|
||||
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
source $(dirname $0)/python3
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
source $(dirname $0)/python3
|
||||
@@ -1,32 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.5.6/Python-3.5.6.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.5.6 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
# Remove spare /
|
||||
LOCATION=${OUT_PREFIX%?}
|
||||
|
||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,32 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.5.7/Python-3.5.7.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.5.7 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
# Remove spare /
|
||||
LOCATION=${OUT_PREFIX%?}
|
||||
|
||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,18 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.0/Python-3.6.0.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.6.0 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,18 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.1/Python-3.6.1.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.6.1 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||
|
||||
source $(dirname $0)/python3
|
||||
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
source $(dirname $0)/python3
|
||||
@@ -1,21 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.2/Python-3.6.2.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.6.2 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,21 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.3/Python-3.6.3.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.6.3 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,21 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.4/Python-3.6.4.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.6.4 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,21 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.5/Python-3.6.5.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.6.5 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,29 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.6/Python-3.6.6.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.6.6 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,32 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.7/Python-3.6.7.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.6.7 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
# Remove spare /
|
||||
LOCATION=${OUT_PREFIX%?}
|
||||
|
||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,32 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.6.8/Python-3.6.8.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.6.8 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
# Remove spare /
|
||||
LOCATION=${OUT_PREFIX%?}
|
||||
|
||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,29 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.7.0/Python-3.7.0.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.7.0 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,32 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.7.1/Python-3.7.1.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.7.1 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
# Remove spare /
|
||||
LOCATION=${OUT_PREFIX%?}
|
||||
|
||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,32 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.7.2/Python-3.7.2.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.7.2 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
# Remove spare /
|
||||
LOCATION=${OUT_PREFIX%?}
|
||||
|
||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,32 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
OUT_PREFIX=$1
|
||||
BIN_DIR="$(cd "$(dirname "$0")"/../.. || exit; pwd)/bin"
|
||||
export BIN_DIR
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python…"
|
||||
SOURCE_TARBALL='https://python.org/ftp/python/3.7.3/Python-3.7.3.tgz'
|
||||
curl -L $SOURCE_TARBALL | tar xz
|
||||
mv Python-3.7.3 src
|
||||
cd src
|
||||
|
||||
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||
make
|
||||
make install
|
||||
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
# Remove spare /
|
||||
LOCATION=${OUT_PREFIX%?}
|
||||
|
||||
ln $LOCATION/bin/python3 $LOCATION/bin/python
|
||||
source $(dirname $0)/python3
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
source $(dirname $0)/python3
|
||||
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
source $(dirname $0)/python3
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
source $(dirname $0)/python3
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
source $(dirname $0)/python3
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
|
||||
source $(dirname $0)/python3
|
||||
@@ -12,14 +12,7 @@ python_version=${BASE^} # this gives us only the filename with version number
|
||||
version_number=$(echo "$python_version" | cut -d- -f2) # this returns just X.X.X
|
||||
dep_url=https://python.org/ftp/python/${version_number}/${python_version}.tgz
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python 3..."
|
||||
echo "Building ${python_version}..."
|
||||
echo "Pulling from source: ${dep_url}"
|
||||
|
||||
curl -L "${dep_url}" | tar xz -C "${OUT_PREFIX}"
|
||||
@@ -33,3 +26,8 @@ make install
|
||||
# Remove unneeded test directories, similar to the official Docker Python images:
|
||||
# https://github.com/docker-library/python
|
||||
find "${OUT_PREFIX}" \( -type d -a \( -name test -o -name tests \) \) -exec rm -rf '{}' +
|
||||
|
||||
# Create links to SQLITE headers so Python can call them at runtime
|
||||
mkdir -p ${OUT_PREFIX}/include ${OUT_PREFIX}/lib/x86_64-linux-gnu
|
||||
cp /usr/include/sqlite3*.h ${OUT_PREFIX}/include
|
||||
ln -fs $(realpath /usr/lib/x86_64-linux-gnu/libsqlite3.so) ${OUT_PREFIX}/lib/x86_64-linux-gnu/libsqlite3.so
|
||||
|
||||
@@ -16,17 +16,9 @@ python_version=${BASE^} # this gives us only the filename with version number
|
||||
version_number=$(echo "$python_version" | cut -d- -f2) # this returns just X.X.X
|
||||
dep_url=https://python.org/ftp/python/${version_number}/${python_version}.tgz
|
||||
|
||||
# shellcheck source=bin/utils
|
||||
source "$BIN_DIR/steps/sqlite3"
|
||||
|
||||
sqlite3_version
|
||||
echo "Setting up SQLite3 Headers for $SQLITE3_VERSION"
|
||||
sqlite3_install "$OUT_PREFIX" "$SQLITE3_VERSION" 1
|
||||
|
||||
echo "Building Python 3..."
|
||||
echo "Pulling from source: ${dep_url}"
|
||||
|
||||
|
||||
curl -L "${dep_url}" | tar xz -C "${OUT_PREFIX}"
|
||||
mv "${OUT_PREFIX}/${python_version}" src
|
||||
cd src
|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
docopt==0.6.2
|
||||
bob-builder
|
||||
bob-builder==0.0.17
|
||||
boto==2.48.0
|
||||
|
||||
@@ -4,7 +4,7 @@ describe "Python!!!!!!!!!!!" do
|
||||
it "🐍" do
|
||||
Hatchet::Runner.new('python-getting-started', stack: DEFAULT_STACK).deploy do |app|
|
||||
expect(app.output).to match(/Installing pip/)
|
||||
expect(app.run('python -V')).to match(/3.6.9/)
|
||||
expect(app.run('python -V')).to match(/3.6.10/)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
django
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
pypy2.7-7.2.0
|
||||
+1
@@ -0,0 +1 @@
|
||||
django
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
pypy3.6-7.2.0
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
python-3.4.9
|
||||
python-3.4.10
|
||||
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
python-3.5.6
|
||||
python-3.5.7
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
python-3.5.3
|
||||
python-3.5.6
|
||||
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
python-3.8.0
|
||||
python-3.8.2
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
requests
|
||||
+1
@@ -0,0 +1 @@
|
||||
python-3.8.0
|
||||
@@ -46,6 +46,13 @@ testPysqlite() {
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
testSqliteInstall() {
|
||||
compile "pythonDefault"
|
||||
assertCaptured "Sqlite3 successfully installed."
|
||||
assertNotCaptured "Sqlite3 failed to install."
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
testCffi() {
|
||||
compile "cffi"
|
||||
assertCaptured "cffi"
|
||||
|
||||
@@ -16,7 +16,6 @@ testSmartRequirements() {
|
||||
assertFile "requests" ".heroku/python/requirements-declared.txt"
|
||||
assertCapturedSuccess
|
||||
compile "psycopg2" "$cache_dir"
|
||||
assertCaptured "Uninstalling requests"
|
||||
assertFile "psycopg2" ".heroku/python/requirements-declared.txt"
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
+71
-22
@@ -18,6 +18,11 @@ testPython2() {
|
||||
echo $LATEST_27 > "runtime.txt"
|
||||
compile "python2"
|
||||
assertCaptured $LATEST_27
|
||||
if [[ $(date "+%Y") > "2019" ]]; then
|
||||
assertCaptured "python-2-7-eol-faq";
|
||||
else
|
||||
assertNotCaptured "python-2-7-eol-faq";
|
||||
fi
|
||||
assertNotCaptured "security update"
|
||||
assertCaptured "Installing SQLite3"
|
||||
assertCapturedSuccess
|
||||
@@ -26,7 +31,12 @@ testPython2() {
|
||||
testPython2_warn() {
|
||||
compile "python2_warn"
|
||||
assertCaptured "python-2.7.15"
|
||||
assertCaptured "security update!"
|
||||
if [[ $(date "+%Y") > "2019" ]]; then
|
||||
assertCaptured "python-2-7-eol-faq";
|
||||
else
|
||||
assertNotCaptured "python-2-7-eol-faq";
|
||||
fi
|
||||
assertCaptured "Only the latest version"
|
||||
assertCaptured "Installing SQLite3"
|
||||
assertCapturedSuccess
|
||||
}
|
||||
@@ -38,11 +48,17 @@ testPython2_fail() {
|
||||
}
|
||||
|
||||
testPython3_4() {
|
||||
if [[ $STACK != "cedar-14" ]]; then
|
||||
updateVersion "python3_4" $LATEST_34
|
||||
compile "python3_4"
|
||||
assertCaptured $LATEST_34
|
||||
assertNotCaptured "security update"
|
||||
compile "python3_4"
|
||||
assertCaptured $LATEST_34
|
||||
assertNotCaptured "security update"
|
||||
# if cedar 14 and legacy binaries, fail. if cedar 14 and staging, succeed.
|
||||
if [[ ! -n $USE_STAGING_BINARIES ]] && [[ $STACK == "cedar-14" ]]; then
|
||||
assertCapturedError
|
||||
# if heroku 18 and legacy binaries, succeed. if heroku 18 and staging, fail.
|
||||
elif [[ -n $USE_STAGING_BINARIES ]] && [[ $STACK == "heroku-18" ]]; then
|
||||
assertCapturedError
|
||||
else
|
||||
# all else succeed
|
||||
assertCapturedSuccess
|
||||
fi
|
||||
}
|
||||
@@ -51,7 +67,13 @@ testPython3_4_warn() {
|
||||
compile "python3_4_warn"
|
||||
assertCaptured "python-3.4.9"
|
||||
assertCaptured "security update!"
|
||||
assertCapturedSuccess
|
||||
# if heroku 18 and legacy binaries, succeed. if heroku 18 and staging, fail.
|
||||
if [[ -n $USE_STAGING_BINARIES ]] && [[ $STACK == "heroku-18" ]]; then
|
||||
assertCapturedError
|
||||
else
|
||||
# all else succeed
|
||||
assertCapturedSuccess
|
||||
fi
|
||||
}
|
||||
|
||||
testPython3_4_fail() {
|
||||
@@ -61,25 +83,18 @@ testPython3_4_fail() {
|
||||
}
|
||||
|
||||
testPython3_5() {
|
||||
if [[ $STACK != "cedar-14" ]]; then
|
||||
updateVersion "python3_5" $LATEST_35
|
||||
compile "python3_5"
|
||||
assertCaptured $LATEST_35
|
||||
assertNotCaptured "security update"
|
||||
assertCaptured "Installing SQLite3"
|
||||
assertCapturedSuccess
|
||||
fi
|
||||
compile "python3_5"
|
||||
assertCaptured $LATEST_35
|
||||
assertNotCaptured "security update"
|
||||
assertCaptured "Installing SQLite3"
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
testPython3_5_warn() {
|
||||
compile "python3_5_warn"
|
||||
if [[ $STACK = "cedar-14" ]]; then
|
||||
assertCaptured "python-3.5.3"
|
||||
assertCaptured "security update!"
|
||||
assertCapturedError
|
||||
else
|
||||
assertCapturedError
|
||||
fi
|
||||
assertCaptured "python-3.5.6"
|
||||
assertCaptured "security update!"
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
testPython3_5_fail() {
|
||||
@@ -142,6 +157,18 @@ testPython3_7_fail() {
|
||||
assertCapturedError
|
||||
}
|
||||
|
||||
testPython3_7_warn() {
|
||||
compile "python3_8_warn"
|
||||
if [[ $STACK = "cedar-14" ]]; then
|
||||
assertCapturedError
|
||||
else
|
||||
assertCaptured "python-3.8.0"
|
||||
assertCaptured "security update!"
|
||||
assertCaptured "Installing SQLite3"
|
||||
assertCapturedSuccess
|
||||
fi
|
||||
}
|
||||
|
||||
testPython3_8() {
|
||||
updateVersion "python3_8" $LATEST_38
|
||||
compile "python3_8"
|
||||
@@ -161,6 +188,28 @@ testPython3_8_fail() {
|
||||
assertCapturedError
|
||||
}
|
||||
|
||||
testPypy3_6() {
|
||||
compile "pypy3_6"
|
||||
if [[ $STACK = "cedar-14" ]]; then
|
||||
assertCapturedError
|
||||
else
|
||||
assertCaptured "Installing pypy"
|
||||
assertCaptured "$PYPY_36"
|
||||
assertCapturedSuccess
|
||||
fi
|
||||
}
|
||||
|
||||
testPypy2_7() {
|
||||
compile "pypy2_7"
|
||||
if [[ $STACK = "cedar-14" ]]; then
|
||||
assertCapturedError
|
||||
else
|
||||
assertCaptured "Installing pypy"
|
||||
assertCaptured "$PYPY_27"
|
||||
assertCapturedSuccess
|
||||
fi
|
||||
}
|
||||
|
||||
pushd $(dirname 0) >/dev/null
|
||||
popd >/dev/null
|
||||
|
||||
|
||||
Vendored
+18
-3
@@ -12,9 +12,24 @@ Options:
|
||||
"""
|
||||
import os
|
||||
from docopt import docopt
|
||||
from pip.req import parse_requirements
|
||||
from pip.index import PackageFinder
|
||||
from pip._vendor.requests import session
|
||||
|
||||
try: # pip >= 10
|
||||
from pip._internal.req import parse_requirements
|
||||
from pip._internal.download import PipSession as session
|
||||
|
||||
def PackageFinder(find_links, index_urls, session=None):
|
||||
from pip._internal.index import PackageFinder
|
||||
from pip._internal.models.search_scope import SearchScope
|
||||
from pip._internal.models.selection_prefs import SelectionPreferences
|
||||
|
||||
search_scope = SearchScope.create(find_links, index_urls)
|
||||
selection_prefs = SelectionPreferences(allow_yanked=False)
|
||||
return PackageFinder.create(search_scope, selection_prefs, session=session)
|
||||
|
||||
except ImportError: # pip <= 9.0.3
|
||||
from pip.req import parse_requirements
|
||||
from pip.index import PackageFinder
|
||||
from pip._vendor.requests import session
|
||||
|
||||
requests = session()
|
||||
|
||||
|
||||
Vendored
+19
-3
@@ -10,9 +10,25 @@ Options:
|
||||
import os
|
||||
import sys
|
||||
from docopt import docopt
|
||||
from pip.req import parse_requirements
|
||||
from pip.index import PackageFinder
|
||||
from pip._vendor.requests import session
|
||||
|
||||
try: # pip >= 10
|
||||
from pip._internal.req import parse_requirements
|
||||
from pip._internal.download import PipSession as session
|
||||
|
||||
def PackageFinder(find_links, index_urls, session=None):
|
||||
from pip._internal.index import PackageFinder
|
||||
from pip._internal.models.search_scope import SearchScope
|
||||
from pip._internal.models.selection_prefs import SelectionPreferences
|
||||
|
||||
search_scope = SearchScope.create(find_links, index_urls)
|
||||
selection_prefs = SelectionPreferences(allow_yanked=False)
|
||||
return PackageFinder.create(search_scope, selection_prefs, session=session)
|
||||
|
||||
except ImportError: # pip <= 9.0.3
|
||||
from pip.req import parse_requirements
|
||||
from pip.index import PackageFinder
|
||||
from pip._vendor.requests import session
|
||||
|
||||
|
||||
requests = session()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user