mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a9e5c60106 | |||
| 1df55a6c3c | |||
| a51e4f8660 | |||
| 46281960c7 | |||
| a19d4950a9 | |||
| 753134a2fa | |||
| 998a15395b | |||
| e68f556e63 | |||
| ef333c516b | |||
| 552f0f77d5 | |||
| 583b9cfd95 | |||
| c182bacdf2 | |||
| ca9b6de50f | |||
| 5910581665 | |||
| c1f6862110 | |||
| 520c240edd | |||
| 61341d17b8 | |||
| acfc7240f8 | |||
| 9ff9466fd5 | |||
| 8eb2954e92 | |||
| 468d27ab98 | |||
| 515a222cc4 | |||
| 53c4674ecd |
+16
-2
@@ -2,12 +2,26 @@
|
|||||||
|
|
||||||
# Master
|
# Master
|
||||||
|
|
||||||
|
- 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:
|
- New pythons released:
|
||||||
Python 3.8.1, 3.7.6, 3.6.10 (CPython)
|
Python 3.8.1, 3.7.6, 3.6.10 (CPython)
|
||||||
Beta Release: Pypy 2.7 and 3.6, version 7.2.0
|
Beta Release: Pypy 2.7 and 3.6, version 7.2.0
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# 162 (2019-12-06)
|
# 162 (2019-12-06)
|
||||||
|
|
||||||
- Bug fix: fragile sqlite3 install
|
- Bug fix: fragile sqlite3 install
|
||||||
|
|||||||
+19
-1
@@ -64,7 +64,25 @@ PYPY36="pypy3.6"
|
|||||||
# Which stack is used (for binary downloading), if none is provided (e.g. outside of Heroku)?
|
# Which stack is used (for binary downloading), if none is provided (e.g. outside of Heroku)?
|
||||||
DEFAULT_PYTHON_STACK="cedar-14"
|
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="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 DEFAULT_PYTHON_STACK PIP_UPDATE
|
||||||
export PY37 PY36 PY35 PY27 PY34
|
export PY37 PY36 PY35 PY27 PY34
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
DEFAULT_PYTHON_VERSION="python-3.6.10"
|
DEFAULT_PYTHON_VERSION="python-3.6.10"
|
||||||
LATEST_38="python-3.8.1"
|
LATEST_38="python-3.8.2"
|
||||||
LATEST_37="python-3.7.6"
|
LATEST_37="python-3.7.6"
|
||||||
LATEST_36="python-3.6.10"
|
LATEST_36="python-3.6.10"
|
||||||
LATEST_35="python-3.5.7"
|
LATEST_35="python-3.5.7"
|
||||||
|
|||||||
@@ -38,6 +38,12 @@ if [ ! "$SKIP_PIP_INSTALL" ]; then
|
|||||||
mcount "failure.none-version"
|
mcount "failure.none-version"
|
||||||
fi
|
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
|
if [ ! -f "$BUILD_DIR/.heroku/python/bin/pip" ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
+4
-3
@@ -128,9 +128,10 @@ fi
|
|||||||
|
|
||||||
# Heroku uses the get-pip utility maintained by the Python community to vendor Pip.
|
# Heroku uses the get-pip utility maintained by the Python community to vendor Pip.
|
||||||
# https://github.com/pypa/get-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"
|
mcount "failure.python.get-pip"
|
||||||
echo "Failed to pull down get-pip"
|
echo "Failed to pull down get-pip"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -145,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/pip-*
|
||||||
rm -fr /app/.heroku/python/lib/python*/site-packages/setuptools-*
|
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
|
/app/.heroku/python/bin/pip install "$ROOT_DIR/vendor/setuptools-39.0.1-py2.py3-none-any.whl" &> /dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Vendored
+2
-2
@@ -15,11 +15,11 @@ hash -r
|
|||||||
|
|
||||||
echo "Building libffi…"
|
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
|
curl -L $SOURCE_TARBALL | tar x
|
||||||
|
|
||||||
cd libffi-3.1
|
cd v3.1
|
||||||
./configure --prefix=$OUT_PREFIX --disable-static &&
|
./configure --prefix=$OUT_PREFIX --disable-static &&
|
||||||
make
|
make
|
||||||
make install
|
make install
|
||||||
|
|||||||
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
-1
@@ -1,3 +1,3 @@
|
|||||||
docopt==0.6.2
|
docopt==0.6.2
|
||||||
bob-builder
|
bob-builder==0.0.17
|
||||||
boto==2.48.0
|
boto==2.48.0
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ describe "Python!!!!!!!!!!!" do
|
|||||||
it "🐍" do
|
it "🐍" do
|
||||||
Hatchet::Runner.new('python-getting-started', stack: DEFAULT_STACK).deploy do |app|
|
Hatchet::Runner.new('python-getting-started', stack: DEFAULT_STACK).deploy do |app|
|
||||||
expect(app.output).to match(/Installing pip/)
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
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
|
||||||
@@ -157,6 +157,18 @@ testPython3_7_fail() {
|
|||||||
assertCapturedError
|
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() {
|
testPython3_8() {
|
||||||
updateVersion "python3_8" $LATEST_38
|
updateVersion "python3_8" $LATEST_38
|
||||||
compile "python3_8"
|
compile "python3_8"
|
||||||
|
|||||||
Vendored
+18
-3
@@ -12,9 +12,24 @@ Options:
|
|||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
from docopt import docopt
|
from docopt import docopt
|
||||||
from pip.req import parse_requirements
|
|
||||||
from pip.index import PackageFinder
|
try: # pip >= 10
|
||||||
from pip._vendor.requests import session
|
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()
|
requests = session()
|
||||||
|
|
||||||
|
|||||||
Vendored
+19
-3
@@ -10,9 +10,25 @@ Options:
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from docopt import docopt
|
from docopt import docopt
|
||||||
from pip.req import parse_requirements
|
|
||||||
from pip.index import PackageFinder
|
try: # pip >= 10
|
||||||
from pip._vendor.requests import session
|
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()
|
requests = session()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user