mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 21430070ad | |||
| 20bbb3f54d | |||
| bebc0cf439 | |||
| c361c2ffc4 | |||
| 13d2a58add | |||
| 49e9147439 |
@@ -1,5 +1,13 @@
|
|||||||
# Python Buildpack Changelog
|
# Python Buildpack Changelog
|
||||||
|
|
||||||
|
# 149 (2019-03-04)
|
||||||
|
|
||||||
|
Hotfix for broken Cedar 14 deploys
|
||||||
|
|
||||||
|
# 148 (2019-02-21)
|
||||||
|
|
||||||
|
No user facing changes, improving internal metrics
|
||||||
|
|
||||||
# 147 (2019-02-07)
|
# 147 (2019-02-07)
|
||||||
|
|
||||||
Python 3.7.2 and 3.6.8 now available on all Heroku stacks.
|
Python 3.7.2 and 3.6.8 now available on all Heroku stacks.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
test: test-heroku-18 test-heroku-16
|
test: test-heroku-18 test-heroku-16
|
||||||
|
|
||||||
check:
|
check:
|
||||||
@shellcheck -x bin/compile bin/detect bin/release bin/test-compile bin/utils bin/warnings
|
@shellcheck -x bin/compile bin/detect bin/release bin/test-compile bin/utils bin/warnings bin/default_pythons
|
||||||
@shellcheck -x bin/steps/collectstatic bin/steps/eggpath-fix bin/steps/eggpath-fix2 bin/steps/gdal bin/steps/geo-libs bin/steps/mercurial bin/steps/nltk bin/steps/pip-install bin/steps/pip-uninstall bin/steps/pipenv bin/steps/pipenv-python-version bin/steps/pylibmc bin/steps/python
|
@shellcheck -x bin/steps/collectstatic bin/steps/eggpath-fix bin/steps/eggpath-fix2 bin/steps/gdal bin/steps/geo-libs bin/steps/mercurial bin/steps/nltk bin/steps/pip-install bin/steps/pip-uninstall bin/steps/pipenv bin/steps/pipenv-python-version bin/steps/pylibmc bin/steps/python
|
||||||
@shellcheck -x bin/steps/hooks/*
|
@shellcheck -x bin/steps/hooks/*
|
||||||
|
|
||||||
|
|||||||
+4
-12
@@ -45,16 +45,9 @@ if [[ -n ${BUILDPACK_VENDOR_URL:-} ]]; then
|
|||||||
fi
|
fi
|
||||||
export VENDOR_URL
|
export VENDOR_URL
|
||||||
|
|
||||||
# Which versions of Python are we using?
|
# Default Python Versions
|
||||||
# These variables are used to specify which versions of Python to install by default,
|
# shellcheck source=bin/default_pythons
|
||||||
# as well as prompt the user to upgrade if they are using an un–supported version.
|
source "$BIN_DIR/default_pythons"
|
||||||
# Note: When 3.7 lands, I recommend switching to LATEST_36 and LATEST_37.
|
|
||||||
DEFAULT_PYTHON_VERSION="python-3.6.8"
|
|
||||||
LATEST_36="python-3.6.8"
|
|
||||||
LATEST_37="python-3.7.2"
|
|
||||||
LATEST_35="python-3.5.6"
|
|
||||||
LATEST_34="python-3.4.9"
|
|
||||||
LATEST_27="python-2.7.15"
|
|
||||||
|
|
||||||
# Supported Python Branches
|
# Supported Python Branches
|
||||||
PY37="python-3.7"
|
PY37="python-3.7"
|
||||||
@@ -68,8 +61,7 @@ DEFAULT_PYTHON_STACK="cedar-14"
|
|||||||
# If pip doesn't match this version (the version we install), run the installer.
|
# If pip doesn't match this version (the version we install), run the installer.
|
||||||
PIP_UPDATE="9.0.2"
|
PIP_UPDATE="9.0.2"
|
||||||
|
|
||||||
export DEFAULT_PYTHON_VERSION DEFAULT_PYTHON_STACK PIP_UPDATE
|
export DEFAULT_PYTHON_STACK PIP_UPDATE
|
||||||
export LATEST_27 LATEST_36 LATEST_37 LATEST_35 LATEST_34
|
|
||||||
export PY37 PY36 PY35 PY27 PY34
|
export PY37 PY36 PY35 PY27 PY34
|
||||||
|
|
||||||
# Common Problem Warnings:
|
# Common Problem Warnings:
|
||||||
|
|||||||
Executable
+10
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
DEFAULT_PYTHON_VERSION="python-3.6.8"
|
||||||
|
LATEST_36="python-3.6.8"
|
||||||
|
LATEST_37="python-3.7.2"
|
||||||
|
LATEST_35="python-3.5.6"
|
||||||
|
LATEST_34="python-3.4.9"
|
||||||
|
LATEST_27="python-2.7.16"
|
||||||
|
|
||||||
|
export DEFAULT_PYTHON_VERSION LATEST_37 LATEST_36 LATEST_35 LATEST_34 LATEST_27
|
||||||
+1
-1
@@ -26,9 +26,9 @@ if (pip-grep -s requirements.txt GDAL gdal pygdal &> /dev/null) then
|
|||||||
mkdir -p .heroku/vendor
|
mkdir -p .heroku/vendor
|
||||||
# Download and extract cryptography into target vendor directory.
|
# Download and extract cryptography into target vendor directory.
|
||||||
curl "$VENDORED_GDAL" -s | tar zxv -C .heroku/vendor &> /dev/null
|
curl "$VENDORED_GDAL" -s | tar zxv -C .heroku/vendor &> /dev/null
|
||||||
|
mcount "steps.vendor.gdal"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
GDAL=$(pwd)/vendor
|
GDAL=$(pwd)/vendor
|
||||||
export GDAL
|
export GDAL
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ source "$BIN_DIR/utils"
|
|||||||
|
|
||||||
# If GDAL exists within requirements, use vendored gdal.
|
# If GDAL exists within requirements, use vendored gdal.
|
||||||
if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then
|
if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then
|
||||||
|
mcount "buildvar.BUILD_WITH_GEO_LIBRARIES"
|
||||||
|
|
||||||
if [ ! -f ".heroku/vendor/bin/proj" ]; then
|
if [ ! -f ".heroku/vendor/bin/proj" ]; then
|
||||||
echo "-----> Bootstrapping gdal, geos, proj."
|
echo "-----> Bootstrapping gdal, geos, proj."
|
||||||
@@ -31,9 +32,11 @@ if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then
|
|||||||
curl "$VENDORED_GEOS" -s | tar zxv -C .heroku/vendor &> /dev/null
|
curl "$VENDORED_GEOS" -s | tar zxv -C .heroku/vendor &> /dev/null
|
||||||
curl "$VENDORED_PROJ" -s | tar zxv -C .heroku/vendor &> /dev/null
|
curl "$VENDORED_PROJ" -s | tar zxv -C .heroku/vendor &> /dev/null
|
||||||
|
|
||||||
|
mcount "steps.vendor.geo_libs"
|
||||||
# Copy libjasper from build image to slug.
|
# Copy libjasper from build image to slug.
|
||||||
if [[ "$STACK" == "heroku-16" ]]; then
|
if [[ "$STACK" == "heroku-16" ]]; then
|
||||||
cp /usr/lib/x86_64-linux-gnu/libjasper.so* ".heroku/vendor/lib/."
|
cp /usr/lib/x86_64-linux-gnu/libjasper.so* ".heroku/vendor/lib/."
|
||||||
|
mcount "steps.vendor.libjasper"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|||||||
+1
-1
@@ -4,6 +4,6 @@
|
|||||||
if [[ -f "requirements.txt" ]]; then
|
if [[ -f "requirements.txt" ]]; then
|
||||||
if (grep -Fiq "hg+" requirements.txt) then
|
if (grep -Fiq "hg+" requirements.txt) then
|
||||||
/app/.heroku/python/bin/pip install mercurial | cleanup | indent
|
/app/.heroku/python/bin/pip install mercurial | cleanup | indent
|
||||||
|
mcount "steps.mercurial"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ if sp-grep -s nltk; then
|
|||||||
python -m nltk.downloader -d "$BUILD_DIR/.heroku/python/nltk_data" "${nltk_packages[@]}" | indent
|
python -m nltk.downloader -d "$BUILD_DIR/.heroku/python/nltk_data" "${nltk_packages[@]}" | indent
|
||||||
set_env NLTK_DATA "/app/.heroku/python/nltk_data"
|
set_env NLTK_DATA "/app/.heroku/python/nltk_data"
|
||||||
|
|
||||||
|
mcount "buildvar.NLTK_PACKAGES_DEFINITION"
|
||||||
|
mcount "steps.nltk"
|
||||||
else
|
else
|
||||||
puts-warn "'nltk.txt' not found, not downloading any corpora"
|
puts-warn "'nltk.txt' not found, not downloading any corpora"
|
||||||
puts-warn "Learn more: https://devcenter.heroku.com/articles/python-nltk"
|
puts-warn "Learn more: https://devcenter.heroku.com/articles/python-nltk"
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ if (pip-grep -s requirements.txt pylibmc &> /dev/null) then
|
|||||||
mkdir -p .heroku/vendor
|
mkdir -p .heroku/vendor
|
||||||
# Download and extract libmemcached into target vendor directory.
|
# Download and extract libmemcached into target vendor directory.
|
||||||
curl "$VENDORED_MEMCACHED" -s | tar zxv -C .heroku/vendor &> /dev/null
|
curl "$VENDORED_MEMCACHED" -s | tar zxv -C .heroku/vendor &> /dev/null
|
||||||
|
mcount "steps.vendor.pylibmc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
LIBMEMCACHED=$(pwd)/vendor
|
LIBMEMCACHED=$(pwd)/vendor
|
||||||
|
|||||||
+5
-1
@@ -4,7 +4,11 @@
|
|||||||
source "$BIN_DIR/utils"
|
source "$BIN_DIR/utils"
|
||||||
|
|
||||||
sqlite3_version() {
|
sqlite3_version() {
|
||||||
SQLITE3_VERSION=${SQLITE3_VERSION:-$(dpkg -s libsqlite3-0 | grep Version | sed 's/Version: //')}
|
if [ "$STACK" = "cedar-14" ]; then
|
||||||
|
SQLITE3_VERSION="3.8.2-1ubuntu2.2"
|
||||||
|
else
|
||||||
|
SQLITE3_VERSION=${SQLITE3_VERSION:-$(dpkg -s libsqlite3-0 | grep Version | sed 's/Version: //')}
|
||||||
|
fi
|
||||||
|
|
||||||
export SQLITE3_VERSION
|
export SQLITE3_VERSION
|
||||||
}
|
}
|
||||||
|
|||||||
Executable
+27
@@ -0,0 +1,27 @@
|
|||||||
|
#!/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 '{}' +
|
||||||
Vendored
+1
-1
@@ -1 +1 @@
|
|||||||
python-2.7.15
|
python-2.7.16
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
python-2.7.16
|
python-2.7.99
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
python-2.7.14
|
python-2.7.15
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Default Python Versions
|
||||||
|
# shellcheck source=bin/default_pythons
|
||||||
|
source "$BIN_DIR/default_pythons"
|
||||||
|
|
||||||
testAirflow() {
|
testAirflow() {
|
||||||
export SLUGIFY_USES_TEXT_UNIDECODE="yes"
|
export SLUGIFY_USES_TEXT_UNIDECODE="yes"
|
||||||
compile "airflow"
|
compile "airflow"
|
||||||
@@ -19,13 +23,13 @@ testPipenvLock() {
|
|||||||
|
|
||||||
testPipenvVersion() {
|
testPipenvVersion() {
|
||||||
compile "pipenv-version"
|
compile "pipenv-version"
|
||||||
assertCaptured "3.6.8"
|
assertCaptured $DEFAULT_PYTHON_VERSION
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
testPipenvVersion2() {
|
testPipenvVersion2() {
|
||||||
compile "pipenv-version2"
|
compile "pipenv-version2"
|
||||||
assertCaptured "2.7.15"
|
assertCaptured $LATEST_27
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
testPipenvFullVersion() {
|
testPipenvFullVersion() {
|
||||||
@@ -95,25 +99,21 @@ testPylibmc() {
|
|||||||
|
|
||||||
testPythonDefault() {
|
testPythonDefault() {
|
||||||
compile "pythonDefault"
|
compile "pythonDefault"
|
||||||
assertCaptured "python-3.6.8"
|
assertCaptured $DEFAULT_PYTHON_VERSION
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
testPython2() {
|
testPython2() {
|
||||||
compile "python2"
|
compile "python2"
|
||||||
assertCaptured "python-2.7.15"
|
assertCaptured $LATEST_27
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
testPython2_warn() {
|
testPython2_warn() {
|
||||||
compile "python2_warn"
|
compile "python2_warn"
|
||||||
if [[ $STACK = "heroku-18" ]]; then
|
assertCaptured "python-2.7.15"
|
||||||
assertCapturedError
|
assertCaptured "security update!"
|
||||||
else
|
assertCapturedSuccess
|
||||||
assertCaptured "python-2.7.14"
|
|
||||||
assertCaptured "security update!"
|
|
||||||
assertCapturedSuccess
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
testPython2_fail() {
|
testPython2_fail() {
|
||||||
@@ -124,7 +124,7 @@ testPython2_fail() {
|
|||||||
|
|
||||||
testPython3_4() {
|
testPython3_4() {
|
||||||
compile "python3_4"
|
compile "python3_4"
|
||||||
assertCaptured "python-3.4.9"
|
assertCaptured $LATEST_34
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,7 +147,7 @@ testPython3_4_fail() {
|
|||||||
|
|
||||||
testPython3_5() {
|
testPython3_5() {
|
||||||
compile "python3_5"
|
compile "python3_5"
|
||||||
assertCaptured "python-3.5.6"
|
assertCaptured $LATEST_35
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,7 +170,7 @@ testPython3_5_fail() {
|
|||||||
|
|
||||||
testPython3_6() {
|
testPython3_6() {
|
||||||
compile "python3_6"
|
compile "python3_6"
|
||||||
assertCaptured "python-3.6.8"
|
assertCaptured $LATEST_36
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,7 +192,7 @@ testPython3_7() {
|
|||||||
if [[ $STACK = "cedar-14" ]]; then
|
if [[ $STACK = "cedar-14" ]]; then
|
||||||
assertCapturedError
|
assertCapturedError
|
||||||
else
|
else
|
||||||
assertCaptured "python-3.7.2"
|
assertCaptured $LATEST_37
|
||||||
assertCapturedSuccess
|
assertCapturedSuccess
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user