Skip to content
Snippets Groups Projects
Commit b810e7ed authored by Craig Kerstiens's avatar Craig Kerstiens
Browse files

updating build pack readme

parents 4eb5b5cb 7502ee05
No related branches found
No related tags found
No related merge requests found
Python Build Pack Heroku buildpack: Python
==================== ========================
The Python Build Pack (PBP) is a build pack for running Python and Django
apps on Heroku.
## Usage This is a [Heroku buildpack](http://devcenter.heroku.com/articles/buildpack) for Python apps.
It uses [virtualenv](http://www.virtualenv.org/) and [pip](http://www.pip-installer.org/).
If `requirements.txt` is present, the PBP considers the directory a Python app Usage
with packages to install via pip. -----
Furthermore, if `${PROJECT}/settings.py` is present, the PBP considers the Example usage:
directory a Python/Django app, and patches `settings.py` to parse the Heroku
DATABASE_URL config vars. It then sets default process types to use the Django
web server.
$ ls
Procfile requirements.txt web.py
## Hacking $ heroku create --stack cedar --buildpack git@github.com:nzoschke/heroku-buildpack-python.git
To change this buildpack, fork it on GitHub. Push up changes to your $ git push heroku master
fork, then create a test app with `--buildpack YOUR_GITHUB_URL` and ...
push to it. If you already have an existing app you may use -----> Heroku receiving push
`heroku config add BUILDPACK_URL=YOUR_GITHUB_URL` instead. -----> Fetching custom build pack... done
-----> Python app detected
-----> Preparing virtualenv version 1.6.4
New python executable in ./bin/python
Installing setuptools............done.
Installing pip...............done.
-----> Installing dependencies using pip version 1.0.2
Downloading/unpacking Flask==0.7.2 (from -r requirements.txt (line 1))
Downloading/unpacking Werkzeug>=0.6.1 (from Flask==0.7.2->-r requirements.txt (line 1))
Downloading/unpacking Jinja2>=2.4 (from Flask==0.7.2->-r requirements.txt (line 1))
Installing collected packages: Flask, Werkzeug, Jinja2
Successfully installed Flask Werkzeug Jinja2
Cleaning up...
For example, you could adapt it to use pypy at build time.... to be continued The buildpack will detect your app as Python if it has the file `requirements.txt` in the root. It will detect your app as Python/Django if there is an additional `settings.py` in a project subdirectory.
It will use virtualenv and pip to install your dependencies, vendoring a copy of the Python runtime into your slug. The `bin/`, `include/` and `lib/` directories will be cached between builds to allow for faster pip install time.
Hacking
-------
To use this buildpack, fork it on Github. Push up changes to your fork, then create a test app with `--buildpack <your-github-url>` and push to it.
To change the vendored virtualenv, unpack the desired version to the `src/` folder, and update the virtualenv() function in `bin/compile` to prepend the virtualenv module directory to the path. The virtualenv release vendors its own versions of pip and setuptools.
...@@ -48,7 +48,7 @@ if [ "$NAME" = "Python/Django" ]; then ...@@ -48,7 +48,7 @@ if [ "$NAME" = "Python/Django" ]; then
SETTINGS_FILE=$(ls **/settings.py | head -1) SETTINGS_FILE=$(ls **/settings.py | head -1)
PROJECT=$(dirname $SETTINGS_FILE) PROJECT=$(dirname $SETTINGS_FILE)
echo " Injecting code into $SETTINGS_FILE to read from DATABASE_URL" echo "Injecting code into $SETTINGS_FILE to read from DATABASE_URL" | indent
cat >>$SETTINGS_FILE <<EOF cat >>$SETTINGS_FILE <<EOF
......
#!/usr/bin/env bash #!/usr/bin/env bash
# bin/name <build-dir> # bin/detect <build-dir>
BUILD_DIR=$1 BUILD_DIR=$1
[ -f $BUILD_DIR/requirements.txt ] || exit 1 # fail fast if no requirements.txt [ -f $BUILD_DIR/requirements.txt ] || exit 1 # fail fast if no requirements.txt
......
#!/usr/bin/env bash #!/usr/bin/env bash
# bin/release <build-dir> # bin/release <build-dir>
BIN_DIR=$(dirname $0) BIN_DIR=$(cd $(dirname $0); pwd) # absolute path
BUILD_DIR=$1 BUILD_DIR=$1
NAME=$($BIN_DIR/detect $BUILD_DIR) || exit 1 NAME=$($BIN_DIR/detect $BUILD_DIR) || exit 1
cd $BUILD_DIR
cat <<EOF cat <<EOF
--- ---
config_vars: config_vars:
...@@ -16,7 +14,7 @@ EOF ...@@ -16,7 +14,7 @@ EOF
[ "$NAME" = "Python/Django" ] || exit 0 [ "$NAME" = "Python/Django" ] || exit 0
SETTINGS_FILE=$(ls **/settings.py | head -1) SETTINGS_FILE=$(ls $BUILD_DIR/**/settings.py | head -1)
PROJECT=$(dirname $SETTINGS_FILE) PROJECT=$(dirname $SETTINGS_FILE)
cat <<EOF cat <<EOF
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment