mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 194932889d | |||
| 4293ec5564 | |||
| 57baab9f68 | |||
| a7c20eea42 | |||
| 0a4cc2c476 | |||
| cbb718bb8b | |||
| db95cdd3f3 | |||
| 04f3ddbc86 | |||
| f06f5676e8 | |||
| c8c8995d70 | |||
| 4ee3baaded |
+24
-6
@@ -1,16 +1,34 @@
|
||||
# Python Buildpack Changelog
|
||||
|
||||
# 110
|
||||
|
||||
Update Default Python to 3.6.1, bugfixes.
|
||||
|
||||
- Fixed automatic pip uninstall of dependencies removed from requirements.txt.
|
||||
|
||||
# 109
|
||||
|
||||
Fix output for collectstatic step.
|
||||
|
||||
# 108
|
||||
|
||||
Updated setuptools.
|
||||
|
||||
# 107
|
||||
|
||||
Bugfix for C dependency installation.
|
||||
|
||||
# 106
|
||||
|
||||
Don't install packages that could mess up packaging.
|
||||
Don't install packages that could mess up packaging.
|
||||
|
||||
- The Python buildpack will automatically remove `six`, `pyparsing`, `appdirs`,
|
||||
`setuptools`, and `distribute` from a `requirements.txt` file now, as these
|
||||
packages are provided by the Python buildpack.
|
||||
- The Python buildpack will automatically remove `six`, `pyparsing`, `appdirs`,
|
||||
`setuptools`, and `distribute` from a `requirements.txt` file now, as these
|
||||
packages are provided by the Python buildpack.
|
||||
|
||||
# 105
|
||||
# 105
|
||||
|
||||
Improvements to output messaging.
|
||||
Improvements to output messaging.
|
||||
|
||||
# 104
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License:
|
||||
|
||||
Copyright (C) 2016 Heroku, Inc.
|
||||
Copyright (C) 2017 Heroku, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ This is the official [Heroku buildpack](https://devcenter.heroku.com/articles/bu
|
||||
|
||||
Recommended web frameworks include **Django** and **Flask**. The recommended webserver is **Gunicorn**. There are no restrictions around what software can be used (as long as it's pip-installable). Web processes must bind to `$PORT`, and only the HTTP protocol is permitted for incoming connections.
|
||||
|
||||
Some Python packages with obscure C dependencies (e.g. scipy) are [not compatible](https://devcenter.heroku.com/articles/python-c-deps).
|
||||
Some Python packages with obscure C dependencies are [not compatible](https://devcenter.heroku.com/articles/python-c-deps).
|
||||
|
||||
See it in Action
|
||||
----------------
|
||||
@@ -23,7 +23,7 @@ Deploying a Python application couldn't be easier:
|
||||
$ git push heroku master
|
||||
...
|
||||
-----> Python app detected
|
||||
-----> Installing python-2.7.13
|
||||
-----> Installing python-3.6.2
|
||||
$ pip install -r requirements.txt
|
||||
Collecting requests (from -r requirements.txt (line 1))
|
||||
Downloading requests-2.12.4-py2.py3-none-any.whl (576KB)
|
||||
@@ -46,11 +46,11 @@ Specify a Python Runtime
|
||||
Specific versions of the Python runtime can be specified with a `runtime.txt` file:
|
||||
|
||||
$ cat runtime.txt
|
||||
python-3.6.1
|
||||
python-2.7.13
|
||||
|
||||
Runtime options include:
|
||||
|
||||
- `python-3.6.2`
|
||||
- `python-2.7.13`
|
||||
- `python-3.6.1`
|
||||
- `pypy-5.7.1` (unsupported, experimental)
|
||||
- `pypy3-5.5.1` (unsupported, experimental)
|
||||
|
||||
+1
-6
@@ -32,11 +32,10 @@ CACHE_DIR=$2
|
||||
ENV_DIR=$3
|
||||
|
||||
# Python defaults
|
||||
DEFAULT_PYTHON_VERSION="python-2.7.13"
|
||||
DEFAULT_PYTHON_VERSION="python-3.6.2"
|
||||
DEFAULT_PYTHON_STACK="cedar-14"
|
||||
PYTHON_EXE="/app/.heroku/python/bin/python"
|
||||
PIP_VERSION="9.0.1"
|
||||
SETUPTOOLS_VERSION="32.1.0"
|
||||
|
||||
# Common Problem Warnings
|
||||
export WARNINGS_LOG=$(mktemp)
|
||||
@@ -176,15 +175,11 @@ let start=$(nowms)
|
||||
source $BIN_DIR/steps/pip-uninstall
|
||||
mtime "pip.uninstall.time" "${start}"
|
||||
|
||||
# Cleanup requirements.txt
|
||||
source $BIN_DIR/steps/setuptools
|
||||
|
||||
# Install dependencies with Pip (where the magic happens).
|
||||
let start=$(nowms)
|
||||
source $BIN_DIR/steps/pip-install
|
||||
mtime "pip.install.time" "${start}"
|
||||
|
||||
|
||||
# Support for NLTK corpora.
|
||||
let start=$(nowms)
|
||||
sub-env $BIN_DIR/steps/nltk
|
||||
|
||||
@@ -20,7 +20,7 @@ MANAGE_FILE=${MANAGE_FILE:-fakepath}
|
||||
[ -f .heroku/collectstatic_disabled ] && DISABLE_COLLECTSTATIC=1
|
||||
|
||||
# Ensure that Django is explicitly specified in requirements.txt
|
||||
sp-grep django && DJANGO_INSTALLED=1
|
||||
sp-grep -s django && DJANGO_INSTALLED=1
|
||||
|
||||
|
||||
if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ] && [ "$DJANGO_INSTALLED" ]; then
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Syntax sugar.
|
||||
source $BIN_DIR/utils
|
||||
|
||||
puts-step "Removing packaging utilities from requirements.txt."
|
||||
|
||||
if [[ -f requirements.txt ]]; then
|
||||
pip-clean requirements.txt
|
||||
fi
|
||||
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build Path: /app/.heroku/python/
|
||||
# Build Deps: libraries/sqlite
|
||||
|
||||
OUT_PREFIX=$1
|
||||
|
||||
echo "Building PyPy..."
|
||||
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy3-v5.8.0-linux64.tar.bz2'
|
||||
curl -L $SOURCE_TARBALL | tar jx
|
||||
cp -R pypy3-v5.8.0-linux64/* $OUT_PREFIX
|
||||
|
||||
ln $OUT_PREFIX/bin/pypy3 $OUT_PREFIX/bin/python
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/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
|
||||
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/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
|
||||
|
||||
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
python-2.7.13
|
||||
+1
@@ -0,0 +1 @@
|
||||
pylibmc
|
||||
@@ -44,6 +44,12 @@ testPsycopg2() {
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
testPylibmc() {
|
||||
compile "pylibmc"
|
||||
assertCaptured "pylibmc"
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
testPython2() {
|
||||
compile "python2"
|
||||
assertCaptured "python-2.7.13"
|
||||
@@ -56,6 +62,16 @@ testPython3() {
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
testSmartRequirements() {
|
||||
local cache_dir="$(mktmpdir)"
|
||||
compile "requirements-standard" "$cache_dir"
|
||||
assertFile "requests" ".heroku/python/requirements-declared.txt"
|
||||
assertCapturedSuccess
|
||||
compile "psycopg2" "$cache_dir"
|
||||
assertCaptured "Uninstalling requests"
|
||||
assertFile "psycopg2" ".heroku/python/requirements-declared.txt"
|
||||
assertCapturedSuccess
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Vendored
-33
@@ -1,33 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""Usage:
|
||||
pip-clean <req-file>
|
||||
|
||||
Options:
|
||||
-h --help Show this screen.
|
||||
"""
|
||||
from docopt import docopt
|
||||
|
||||
BAD_PACKAGES = ['appdirs', 'packaging', 'pyparsing', 'six', 'setuptools', 'distribute']
|
||||
|
||||
|
||||
def good_package(line):
|
||||
package_name = line.split('=')[0].split('<')[0].split('>')[0].split(' ')[0].split('#')[0].split('\n')[0]
|
||||
return package_name not in BAD_PACKAGES
|
||||
|
||||
def main():
|
||||
args = docopt(__doc__, version='pip-clean')
|
||||
req_file = args['<req-file>']
|
||||
|
||||
with open(req_file, 'r') as f:
|
||||
# Iterate over every line in the requirements file.
|
||||
lines = [line for line in f if good_package(line)]
|
||||
|
||||
# Write the requirements file to disk.
|
||||
with open(req_file, 'w') as f:
|
||||
f.write(''.join(lines))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Vendored
-17
@@ -1,17 +0,0 @@
|
||||
certifi==2017.4.17
|
||||
chardet==3.0.3
|
||||
dateparser
|
||||
humanize==0.5.1
|
||||
idna==2.5
|
||||
maya==0.3.2
|
||||
pendulum==1.2.1
|
||||
python-dateutil==2.6.0
|
||||
pytz==2017.2
|
||||
pytzdata==2017.2
|
||||
regex==2017.5.26
|
||||
requests==2.17.3
|
||||
ruamel.ordereddict==0.4.9
|
||||
ruamel.yaml==0.14.12
|
||||
tzlocal==1.4
|
||||
urllib3==1.21.1
|
||||
|
||||
Reference in New Issue
Block a user