mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
Compare commits
306 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0a6ed0de43 | |||
| 0b7a1fc14e | |||
| 2c69e3b98f | |||
| 86f43fa02a | |||
| 03b95247c3 | |||
| 0e8a11b836 | |||
| 9b45baa41c | |||
| ecfaeb2fd2 | |||
| cef0b1703a | |||
| 18317ef606 | |||
| 4896396a51 | |||
| be4f207aac | |||
| af15be61b8 | |||
| 39d64c5fd1 | |||
| 645cf5e338 | |||
| 7430c48b72 | |||
| 783d9e4b12 | |||
| eab957c8c9 | |||
| 6e80c391a8 | |||
| 58bae65a28 | |||
| 70d8c7a625 | |||
| 66611ca21a | |||
| 20fe371ac7 | |||
| d23143b801 | |||
| c98615cdd0 | |||
| 0749a04773 | |||
| a4f072714d | |||
| 427ec9e431 | |||
| 168939d14f | |||
| 58ecbd8a73 | |||
| 10eb361975 | |||
| 1242d71382 | |||
| 6ef93693c5 | |||
| 69b8b25322 | |||
| b706cd13f7 | |||
| 724e51b5c7 | |||
| 7b4835a98e | |||
| 477773b331 | |||
| c98c481f24 | |||
| 462fe074f9 | |||
| 70bfc5eab3 | |||
| a4d2592438 | |||
| 8306f84236 | |||
| 6952a2e728 | |||
| 7142c747f4 | |||
| 11db8e126a | |||
| 6f1fce3cdb | |||
| b2e12f9ec8 | |||
| 44f8e393d6 | |||
| b8cbc64d20 | |||
| 5d51be5679 | |||
| d550b8cd15 | |||
| 25b28af19d | |||
| dbe2cdac37 | |||
| 767af30453 | |||
| df02e34a5b | |||
| 26c918863e | |||
| 1c458cee2e | |||
| 433570c27b | |||
| 30cb4ecef3 | |||
| 84e2a51337 | |||
| f1c2bc39d2 | |||
| ad53dc61f0 | |||
| 8598296756 | |||
| f5ef10326e | |||
| 16ec3c8325 | |||
| 49676e12af | |||
| 0aa123995b | |||
| cd4d811d4f | |||
| 76ebf9279b | |||
| 3c3e621040 | |||
| 40e91ffa67 | |||
| 72710696a0 | |||
| d27228999d | |||
| a4e8ba3cdf | |||
| e27b5656fd | |||
| f132d3198a | |||
| 6afd6bbce9 | |||
| 6fa14b55d3 | |||
| 8f4eb44d36 | |||
| 67f4c4238a | |||
| ffb89feb0d | |||
| 45b00e32a7 | |||
| 90edd88b22 | |||
| 2533cc68c1 | |||
| a11a765b93 | |||
| 6505f98bae | |||
| eb3e7851f7 | |||
| 78b6142d18 | |||
| af58f322e2 | |||
| e4bcc68c9a | |||
| 9a024b8595 | |||
| 581177b219 | |||
| 669f0b0e2a | |||
| e5ac89c4df | |||
| 1e8ad56b0f | |||
| b6607f0f42 | |||
| 8615bf5272 | |||
| 7f475977b5 | |||
| 53eee452eb | |||
| 031c9d576f | |||
| b0568b5f90 | |||
| 359a3b0d61 | |||
| d46e0efc16 | |||
| b97a104ad6 | |||
| a2ee94a8fb | |||
| 3b35c2c296 | |||
| 97834d305a | |||
| 86a53e6479 | |||
| 8c746e3e17 | |||
| b1d1a7cca5 | |||
| f172a83d48 | |||
| 4346b41c70 | |||
| 195ed4ae15 | |||
| e4fee65430 | |||
| 4f10a7e14a | |||
| a637ec3d11 | |||
| 1dd7be4250 | |||
| c2b9121436 | |||
| 567120b4bc | |||
| b61a395cd0 | |||
| 2a3962aea7 | |||
| 364ddc98b7 | |||
| d93d283be2 | |||
| 42141c2bf9 | |||
| d82c898509 | |||
| 6545d71b46 | |||
| 93b707eae5 | |||
| 8d358218f8 | |||
| b84b168be8 | |||
| 35c810e46d | |||
| e1ea2f9354 | |||
| 7db6ea33ac | |||
| a53826a673 | |||
| b7ecb49a96 | |||
| 911140b3ac | |||
| f1c4efb464 | |||
| 5a979874ad | |||
| a32ca25520 | |||
| e304089c3e | |||
| 5d8932e5ee | |||
| 7770ab8ff2 | |||
| 277294817a | |||
| 25b17d51c3 | |||
| ac103519f8 | |||
| e8b8af045f | |||
| 0bb6d6e2bd | |||
| 0184dcac24 | |||
| 558e748e9e | |||
| dec86fbc2e | |||
| ddc310084b | |||
| 2a6053ec2c | |||
| 86e0e29a41 | |||
| bc754f402b | |||
| ea5bc23a76 | |||
| 46ecf15337 | |||
| d020d20bde | |||
| 01ff4269f2 | |||
| f507bb0c05 | |||
| 9179b3cac0 | |||
| 5be33758ed | |||
| 41a44272d2 | |||
| 6b3f63252f | |||
| c9acc4154b | |||
| d5fed79e86 | |||
| 05edd6b065 | |||
| d96914ab2e | |||
| 4c4e192317 | |||
| 2963d2520b | |||
| 85686805a7 | |||
| eef41088b1 | |||
| f7387427c8 | |||
| 23e1164c93 | |||
| fd4ab23f50 | |||
| c78bf77055 | |||
| 5e212e4db8 | |||
| 9f666cee79 | |||
| 69e9368c2d | |||
| 4513dd7522 | |||
| 8b3e99adb3 | |||
| c5972cdb74 | |||
| 7b9bc848ee | |||
| 921a4c31a8 | |||
| 67063fc34f | |||
| 21dd1782fa | |||
| beb8c70585 | |||
| b46cc0c6da | |||
| 74af94132a | |||
| 24cc273800 | |||
| c0fbb0723a | |||
| 6ab397db10 | |||
| d8623ae454 | |||
| e6d395fa27 | |||
| e77090b6b8 | |||
| c61f907079 | |||
| bd90eecd8c | |||
| 44b2ef0c4e | |||
| 38d73effc1 | |||
| 6f6b75bb1f | |||
| cd90c7d1d8 | |||
| ce3c68538d | |||
| b6adf5223b | |||
| 0818d5428f | |||
| 1d8afb452e | |||
| 1c82d820c9 | |||
| 7cf8712d3c | |||
| 2b62692ab2 | |||
| 9188d94723 | |||
| 2ba3e06f4e | |||
| 6d78f7e3ed | |||
| 1e5ff1f8c9 | |||
| 83538ca6ec | |||
| 619bd638b0 | |||
| 5c359ba0fa | |||
| 27f019105e | |||
| eb572b5ab4 | |||
| 67c3d38a03 | |||
| 8f4ca7f624 | |||
| ce3bdb37ba | |||
| a91e9c2fc1 | |||
| da96cdf21e | |||
| 0b2e4e9b22 | |||
| 129ce5f0df | |||
| 25f7421573 | |||
| 8c654b658c | |||
| ed3691a0aa | |||
| ded2c5156a | |||
| 7c3a6303d1 | |||
| 591ed6b150 | |||
| c1c4f50ef6 | |||
| 2b29e7efeb | |||
| 9f089b18e6 | |||
| 9a1e43b8f2 | |||
| ac1ba4271c | |||
| af77d9baf8 | |||
| 706e6bab4f | |||
| b6fff224dd | |||
| 61d3d9580d | |||
| 69b88cb075 | |||
| a00133892d | |||
| 5eb337b80d | |||
| d6212b46ce | |||
| 3558766ae8 | |||
| 34f4dc43d6 | |||
| 0024336558 | |||
| c60c5321df | |||
| 0ba69875f5 | |||
| c8812c7e15 | |||
| 7d4093795b | |||
| 628ad0cb8b | |||
| 77ddd7c8a6 | |||
| c53d54f203 | |||
| ed6fe287c4 | |||
| 4f5a88a05a | |||
| 347c0eba81 | |||
| 14b482603e | |||
| 58ce002d35 | |||
| 7fd3a047fd | |||
| 26b4bfbab6 | |||
| 9e00de4e56 | |||
| afa8a0f75f | |||
| 52b8ae82b8 | |||
| e6c339ebae | |||
| 3ea0735768 | |||
| 54b930bba3 | |||
| bf202224b7 | |||
| cead16eb57 | |||
| 5c91c81968 | |||
| 42594a47c1 | |||
| 9d20adca1a | |||
| 181c09cfb7 | |||
| 770947d6e6 | |||
| 0a78bd001e | |||
| 5a1ece3955 | |||
| 8266b99d1e | |||
| e27470778c | |||
| 8ef4a006e0 | |||
| 4fdaf14ded | |||
| f1da8d4b5c | |||
| eb9689c0a2 | |||
| 6fe7c6bde0 | |||
| a1b372ac66 | |||
| ddead6457a | |||
| 92b4385890 | |||
| 7074d5cb50 | |||
| 2b1f1182c3 | |||
| 38fc8f4fe7 | |||
| a203495532 | |||
| 33a69d7f52 | |||
| fe3f12c430 | |||
| aeb1a297d3 | |||
| 4c1972c0b9 | |||
| 74f0f319dc | |||
| 683bba59d7 | |||
| f890cdb889 | |||
| b3a98641f5 | |||
| ecbcfff5cb | |||
| 085d295342 | |||
| e842703721 | |||
| c229070c21 | |||
| 67867f1083 | |||
| 91b76c4ca9 | |||
| d2b82441fe | |||
| 532b36f5f7 | |||
| abe34011e5 | |||
| 4b57be0ae1 |
+112
@@ -0,0 +1,112 @@
|
|||||||
|
# Python Buildpack Changelog
|
||||||
|
|
||||||
|
## v80 (2016-04-05)
|
||||||
|
|
||||||
|
Improved pip-pop compatibility with latest pip releases.
|
||||||
|
|
||||||
|
## v79 (2016-03-22)
|
||||||
|
|
||||||
|
Compatibility improvements with heroku-apt-buildpack.
|
||||||
|
|
||||||
|
## v78 (2016-03-18)
|
||||||
|
|
||||||
|
Added automatic configuration of Gunicorn's `FORWARDED_ALLOW_IPS` setting.
|
||||||
|
|
||||||
|
Improved detection of libffi dependency when using bcrypt via `Django[bcrypt]`.
|
||||||
|
|
||||||
|
Improved GDAL support.
|
||||||
|
|
||||||
|
- GDAL dependency detection now checks for pygdal and is case-insensitive.
|
||||||
|
- The vendored GDAL library has been updated to 1.11.1.
|
||||||
|
- GDAL bootstrapping now also installs the GEOS and Proj.4 libraries.
|
||||||
|
|
||||||
|
Updated pip to 8.1.1 and setuptools to 20.3.
|
||||||
|
|
||||||
|
## v77 (2016-02-10)
|
||||||
|
|
||||||
|
Improvements to warnings and minor bugfix.
|
||||||
|
|
||||||
|
## v76 (2016-02-08)
|
||||||
|
|
||||||
|
Improved Django collectstatic support.
|
||||||
|
|
||||||
|
- `$ python manage.py collectstatic` will only be run if `Django` is present in `requirements.txt`.
|
||||||
|
- If collectstatic fails, the build fails. Full traceback is provided.
|
||||||
|
- `$DISABLE_COLLECTSTATIC`: skip collectstatic step completely (not new).
|
||||||
|
- `$DEBUG_COLLECTSTATIC`: echo environment variables upon collectstatic failure.
|
||||||
|
- Updated build output style.
|
||||||
|
- New warning for outdated Python (via pip `InsecurePlatform` warning).
|
||||||
|
|
||||||
|
## v75 (2016-01-29)
|
||||||
|
|
||||||
|
Updated pip and Setuptools.
|
||||||
|
|
||||||
|
## v74 (2015-12-29)
|
||||||
|
|
||||||
|
Added warnings for lack of Procfile.
|
||||||
|
|
||||||
|
## v72 (2015-12-07)
|
||||||
|
|
||||||
|
Updated default Python to 2.7.11.
|
||||||
|
|
||||||
|
## v72 (2015-12-03)
|
||||||
|
|
||||||
|
Added friendly warnings for common build failures.
|
||||||
|
|
||||||
|
## v70 (2015-10-29)
|
||||||
|
|
||||||
|
Improved compatibility with multi and node.js buildpacks.
|
||||||
|
|
||||||
|
## v69 (2015-10-12)
|
||||||
|
|
||||||
|
Revert to v66.
|
||||||
|
|
||||||
|
## v68 (2015-10-12)
|
||||||
|
|
||||||
|
Fixed .heroku/venv error with modern apps.
|
||||||
|
|
||||||
|
## v67 (2015-10-12)
|
||||||
|
|
||||||
|
Further improved cache compatibility with multi and node.js buildpacks.
|
||||||
|
|
||||||
|
## v66 (2015-10-09)
|
||||||
|
|
||||||
|
Improved compatibility with multi and node.js buildpacks.
|
||||||
|
|
||||||
|
## v65 (2015-10-08)
|
||||||
|
|
||||||
|
Reverted v64.
|
||||||
|
|
||||||
|
## v64 (2015-10-08)
|
||||||
|
|
||||||
|
Improved compatibility with multi and node.js buildpacks.
|
||||||
|
|
||||||
|
## v63 (2015-10-08)
|
||||||
|
|
||||||
|
Updated Pip and Setuptools.
|
||||||
|
|
||||||
|
- Setuptools updated to v18.3.2
|
||||||
|
- Pip updated to v7.1.2
|
||||||
|
|
||||||
|
|
||||||
|
## v62 (2015-08-07)
|
||||||
|
|
||||||
|
Updated Pip and Setuptools.
|
||||||
|
|
||||||
|
- Setuptools updated to v18.1
|
||||||
|
- Pip updated to v7.1.0
|
||||||
|
|
||||||
|
## v61 (2015-06-30)
|
||||||
|
|
||||||
|
Updated Pip and Setuptools.
|
||||||
|
|
||||||
|
- Setuptools updated to v18.0.1
|
||||||
|
- Pip updated to v7.0.3
|
||||||
|
|
||||||
|
## v60 (2015-05-27)
|
||||||
|
|
||||||
|
Default Python is now latest 2.7.10. Updated Pip and Distribute.
|
||||||
|
|
||||||
|
- Default Python version is v2.7.10
|
||||||
|
- Setuptools updated to v16.0
|
||||||
|
- Pip updated to v7.0.1
|
||||||
-130
@@ -1,130 +0,0 @@
|
|||||||
## v14
|
|
||||||
|
|
||||||
Features:
|
|
||||||
|
|
||||||
* Full removal of Django settings injection for new apps.
|
|
||||||
* Support for profile.d
|
|
||||||
* Fresh app detection.
|
|
||||||
* Update to Virtualenv v1.7.2
|
|
||||||
* Updated to Pip v1.1 (patched)
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Default pip path exists action.
|
|
||||||
|
|
||||||
## v13
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Fix pip quoting error.
|
|
||||||
* Only talk about collectstatic in buildpack output when it's configured.
|
|
||||||
|
|
||||||
## v12
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Catch database setting corner case.
|
|
||||||
|
|
||||||
## v11
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Cleanup collectstatic output.
|
|
||||||
|
|
||||||
|
|
||||||
## v10
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Check for collectstatic validity with --dry-run instead of --help for Django 1.4.
|
|
||||||
|
|
||||||
## v9
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Unset PYTHONHOME in buildpack for [user_env_compile](http://devcenter.heroku.com/articles/labs-user-env-compile).
|
|
||||||
|
|
||||||
## v8
|
|
||||||
|
|
||||||
Features:
|
|
||||||
|
|
||||||
* Disable Django collectstatic with `$DISABLE_COLLECTSTATIC` + [user_env_compile](http://devcenter.heroku.com/articles/labs-user-env-compile).
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Don't disbable injection for new Django apps.
|
|
||||||
* Inform user of July 1, 2012 deprecation of Django injection.
|
|
||||||
|
|
||||||
## v7
|
|
||||||
|
|
||||||
Features:
|
|
||||||
|
|
||||||
* Full removal of Django setting injection for new apps.
|
|
||||||
* Automatic execution of collectstatic.
|
|
||||||
* Suppress collectstatic errors via env SILENCE_COLLECTSTATIC.
|
|
||||||
* Increase settings.py search depth to 3.
|
|
||||||
* Search recursively from included requirements.txt files.
|
|
||||||
|
|
||||||
|
|
||||||
## v6 (03/23/2012)
|
|
||||||
|
|
||||||
Features:
|
|
||||||
|
|
||||||
* Dist packages (setup.py) support.
|
|
||||||
* Move new virtualenvs to `/app/.heroku/venv`.
|
|
||||||
* Heavily improved Django app detection, accounting for `Django` in `requirements.txt`.
|
|
||||||
* Literate [documentation](http://python-buildpack.herokuapp.com).
|
|
||||||
* Default `$PYTHONHOME`, `$PYTHONPATH`, and `$LANG` configurations.
|
|
||||||
* Disable Django setting injection with `$DISABLE_INJECTION` + [user_env_compile](http://devcenter.heroku.com/articles/labs-user-env-compile).
|
|
||||||
* General code refactor and improved messaging.
|
|
||||||
* Unit tests.
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Django 1.4 startproject template layout support.
|
|
||||||
* Django `manage.py` location can now be independent from `settings.py`.
|
|
||||||
|
|
||||||
## v5 (02/01/2012)
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Git requirements 100% work.
|
|
||||||
|
|
||||||
|
|
||||||
## v4 (01/20/2012)
|
|
||||||
|
|
||||||
Features:
|
|
||||||
|
|
||||||
* Updated to virtualenv v1.7 with patched pip v1.2.
|
|
||||||
* Actually activate created virtualenv within compile process.
|
|
||||||
* Use distribute instead of deprecated setuptools.
|
|
||||||
* Automatically destroy and rebuild corrupt virtualenvs.
|
|
||||||
* Refactor django and pylibmc detection.
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Fixed `package==dev` in requirements with patched pip embedded within virtualenv. Patch upstreamed.
|
|
||||||
* Minor curl/rm flag fixes (thanks, contributors!)
|
|
||||||
|
|
||||||
|
|
||||||
## v3 (12/07/2011)
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Better django setup.py injection.
|
|
||||||
|
|
||||||
|
|
||||||
## v2 (11/15/2011)
|
|
||||||
|
|
||||||
Features:
|
|
||||||
|
|
||||||
* Support for pylibmc and libmemcached +sasl.
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
|
|
||||||
* Detect when virtualenv is checked in and alert user.
|
|
||||||
|
|
||||||
|
|
||||||
## v1 (10/01/2011)
|
|
||||||
|
|
||||||
* Conception.
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
MIT License:
|
MIT License:
|
||||||
|
|
||||||
Copyright (C) 2013 Heroku, Inc.
|
Copyright (C) 2016 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:
|
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:
|
||||||
|
|
||||||
|
|||||||
@@ -3,3 +3,8 @@
|
|||||||
|
|
||||||
tests:
|
tests:
|
||||||
./bin/test
|
./bin/test
|
||||||
|
|
||||||
|
tools:
|
||||||
|
git clone https://github.com/kennethreitz/pip-pop.git
|
||||||
|
mv pip-pop/bin/* vendor/pip-pop/
|
||||||
|
rm -fr pip-pop
|
||||||
@@ -1,52 +1,54 @@
|
|||||||
Heroku buildpack: Python
|
# Heroku Buildpack: Python
|
||||||
========================
|

|
||||||
|
|
||||||
This is a [Heroku buildpack](http://devcenter.heroku.com/articles/buildpacks) for Python apps, powered by [pip](http://www.pip-installer.org/).
|
This is the official [Heroku buildpack](https://devcenter.heroku.com/articles/buildpacks) for Python apps, powered by [pip](https://pip.pypa.io/) and other excellent software.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
Usage
|
Some Python packages with obscure C dependencies (e.g. scipy) are [not compatible](https://devcenter.heroku.com/articles/python-c-deps).
|
||||||
-----
|
|
||||||
|
|
||||||
Example usage:
|
See it in Action
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Deploying a Python application couldn't be easier:
|
||||||
|
|
||||||
$ ls
|
$ ls
|
||||||
Procfile requirements.txt web.py
|
Procfile requirements.txt web.py
|
||||||
|
|
||||||
$ heroku create --buildpack git://github.com/heroku/heroku-buildpack-python.git
|
$ heroku create --buildpack heroku/python
|
||||||
|
|
||||||
$ git push heroku master
|
$ git push heroku master
|
||||||
...
|
...
|
||||||
-----> Python app detected
|
-----> Python app detected
|
||||||
-----> Installing runtime (python-2.7.8)
|
-----> Installing python-2.7.11
|
||||||
-----> Installing dependencies using pip
|
$ pip install -r requirements.txt
|
||||||
Downloading/unpacking requests (from -r requirements.txt (line 1))
|
Collecting requests (from -r requirements.txt (line 1))
|
||||||
|
Downloading requests-2.9.1-py2.py3-none-any.whl (501kB)
|
||||||
Installing collected packages: requests
|
Installing collected packages: requests
|
||||||
Successfully installed requests
|
Successfully installed requests-2.9.1
|
||||||
Cleaning up...
|
|
||||||
-----> Discovering process types
|
-----> Discovering process types
|
||||||
Procfile declares types -> (none)
|
Procfile declares types -> (none)
|
||||||
|
|
||||||
You can also add it to upcoming builds of an existing application:
|
A `requirements.txt` file must be present at the root of your application's repository.
|
||||||
|
|
||||||
$ heroku config:add BUILDPACK_URL=git://github.com/heroku/heroku-buildpack-python.git
|
You can also specify the latest production release of this buildpack for upcoming builds of an existing application:
|
||||||
|
|
||||||
The buildpack will detect your app as Python if it has the file `requirements.txt` in the root.
|
$ heroku buildpacks:set heroku/python
|
||||||
|
|
||||||
It will use Pip to install your dependencies, vendoring a copy of the Python runtime into your slug.
|
|
||||||
|
|
||||||
Specify a Runtime
|
Specify a Python Runtime
|
||||||
-----------------
|
------------------------
|
||||||
|
|
||||||
You can also provide arbitrary releases Python with a `runtime.txt` file.
|
Specific versions of the Python runtime can be specified with a `runtime.txt` file:
|
||||||
|
|
||||||
$ cat runtime.txt
|
$ cat runtime.txt
|
||||||
python-3.4.2
|
python-3.5.1
|
||||||
|
|
||||||
Runtime options include:
|
Runtime options include:
|
||||||
|
|
||||||
- python-2.7.8
|
- `python-2.7.11`
|
||||||
- python-3.4.2
|
- `python-3.5.1`
|
||||||
- pypy-2.4.0 (unsupported, experimental)
|
- `pypy-5.0.1` (unsupported, experimental)
|
||||||
- pypy3-2.4.0 (unsupported, experimental)
|
|
||||||
|
|
||||||
Other [unsupported runtimes](https://github.com/heroku/heroku-buildpack-python/tree/master/builds/runtimes) are available as well.
|
Other [unsupported runtimes](https://github.com/heroku/heroku-buildpack-python/tree/master/builds/runtimes) are available as well. Use at your own risk.
|
||||||
|
|||||||
+105
-52
@@ -1,5 +1,13 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# The Heroku Python Buildpack. This script accepts parameters for a build
|
||||||
|
# directory, a cache directory, and a directory for app environment variables.
|
||||||
|
|
||||||
|
# Warning: there are a few hacks in this script to accommodate excellent builds
|
||||||
|
# on Heroku. No guarantee for external compatibility is made. However,
|
||||||
|
# everything should work fine outside of the Heroku environment, if the
|
||||||
|
# environment is setup correctly.
|
||||||
|
|
||||||
# Usage:
|
# Usage:
|
||||||
#
|
#
|
||||||
# $ bin/compile <build-dir> <cache-dir> <env-path>
|
# $ bin/compile <build-dir> <cache-dir> <env-path>
|
||||||
@@ -7,6 +15,8 @@
|
|||||||
# Fail fast and fail hard.
|
# Fail fast and fail hard.
|
||||||
set -eo pipefail
|
set -eo pipefail
|
||||||
|
|
||||||
|
[ "$BUILDPACK_XTRACE" ] && set -o xtrace
|
||||||
|
|
||||||
# Prepend proper path for virtualenv hackery. This will be deprecated soon.
|
# Prepend proper path for virtualenv hackery. This will be deprecated soon.
|
||||||
export PATH=:/usr/local/bin:$PATH
|
export PATH=:/usr/local/bin:$PATH
|
||||||
|
|
||||||
@@ -17,20 +27,19 @@ BUILD_DIR=$1
|
|||||||
CACHE_DIR=$2
|
CACHE_DIR=$2
|
||||||
ENV_DIR=$3
|
ENV_DIR=$3
|
||||||
|
|
||||||
|
|
||||||
CACHED_DIRS=".heroku"
|
|
||||||
|
|
||||||
# Static configurations for virtualenv caches.
|
# Static configurations for virtualenv caches.
|
||||||
VIRTUALENV_LOC=".heroku/venv"
|
VIRTUALENV_LOC=".heroku/venv"
|
||||||
LEGACY_TRIGGER="lib/python2.7"
|
LEGACY_TRIGGER="lib/python2.7"
|
||||||
PROFILE_PATH="$BUILD_DIR/.profile.d/python.sh"
|
|
||||||
WEBCONCURRENCY_PROFILE_PATH="$BUILD_DIR/.profile.d/python.webconcurrency.sh"
|
|
||||||
|
|
||||||
DEFAULT_PYTHON_VERSION="python-2.7.9"
|
DEFAULT_PYTHON_VERSION="python-2.7.11"
|
||||||
DEFAULT_PYTHON_STACK="cedar"
|
DEFAULT_PYTHON_STACK="cedar-14"
|
||||||
PYTHON_EXE="/app/.heroku/python/bin/python"
|
PYTHON_EXE="/app/.heroku/python/bin/python"
|
||||||
PIP_VERSION="6.0.6"
|
PIP_VERSION="8.1.1"
|
||||||
SETUPTOOLS_VERSION="11.3.1"
|
SETUPTOOLS_VERSION="20.4"
|
||||||
|
|
||||||
|
# Common Problem Warnings
|
||||||
|
export WARNINGS_LOG=$(mktemp)
|
||||||
|
export RECOMMENDED_PYTHON_VERSION=$DEFAULT_PYTHON_VERSION
|
||||||
|
|
||||||
# Setup bpwatch
|
# Setup bpwatch
|
||||||
export PATH=$PATH:$ROOT_DIR/vendor/bpwatch
|
export PATH=$PATH:$ROOT_DIR/vendor/bpwatch
|
||||||
@@ -48,66 +57,87 @@ export PATH=$PATH:$ROOT_DIR/vendor/pip-pop
|
|||||||
|
|
||||||
# Sanitizing environment variables.
|
# Sanitizing environment variables.
|
||||||
unset GIT_DIR PYTHONHOME PYTHONPATH LD_LIBRARY_PATH LIBRARY_PATH
|
unset GIT_DIR PYTHONHOME PYTHONPATH LD_LIBRARY_PATH LIBRARY_PATH
|
||||||
|
unset RECEIVE_DATA RUN_KEY BUILD_INFO DEPLOY LOG_TOKEN DYNO
|
||||||
|
unset CYTOKINE_LOG_FILE GEM_PATH
|
||||||
|
|
||||||
|
# Setup buildpack instrumentation.
|
||||||
bpwatch init $LOGPLEX_KEY
|
bpwatch init $LOGPLEX_KEY
|
||||||
bpwatch build python $BUILDPACK_VERSION $REQUEST_ID
|
bpwatch build python $BUILDPACK_VERSION $REQUEST_ID
|
||||||
TMP_APP_DIR=$CACHE_DIR/tmp_app_dir
|
TMP_APP_DIR=$CACHE_DIR/tmp_app_dir
|
||||||
|
|
||||||
bpwatch start compile
|
bpwatch start compile
|
||||||
|
|
||||||
|
|
||||||
# We'll need to send these statics to other scripts we `source`.
|
|
||||||
export BUILD_DIR CACHE_DIR BIN_DIR PROFILE_PATH
|
|
||||||
|
|
||||||
# Syntax sugar.
|
# Syntax sugar.
|
||||||
source $BIN_DIR/utils
|
source $BIN_DIR/utils
|
||||||
|
|
||||||
# Directory Hacks for path consistiency.
|
# Import collection of warnings.
|
||||||
|
source $BIN_DIR/warnings
|
||||||
|
|
||||||
|
# Directory Hacks for path consistency.
|
||||||
APP_DIR='/app'
|
APP_DIR='/app'
|
||||||
TMP_APP_DIR=$CACHE_DIR/tmp_app_dir
|
TMP_APP_DIR=$CACHE_DIR/tmp_app_dir
|
||||||
|
|
||||||
# Copy Anvil app dir to temporary storage...
|
# Skip these steps for Docker.
|
||||||
bpwatch start anvil_appdir_stage
|
if [[ ! "$DOCKER_BUILD" ]]; then
|
||||||
|
|
||||||
|
# Copy Anvil app dir to temporary storage...
|
||||||
|
bpwatch start anvil_appdir_stage
|
||||||
if [ "$SLUG_ID" ]; then
|
if [ "$SLUG_ID" ]; then
|
||||||
mkdir -p $TMP_APP_DIR
|
mkdir -p $TMP_APP_DIR
|
||||||
deep-mv $APP_DIR $TMP_APP_DIR
|
deep-mv $APP_DIR $TMP_APP_DIR
|
||||||
else
|
else
|
||||||
deep-rm $APP_DIR
|
deep-rm $APP_DIR
|
||||||
fi
|
fi
|
||||||
bpwatch stop anvil_appdir_stage
|
bpwatch stop anvil_appdir_stage
|
||||||
|
|
||||||
|
# Copy Application code in.
|
||||||
|
bpwatch start appdir_stage
|
||||||
|
deep-cp $BUILD_DIR $APP_DIR
|
||||||
|
bpwatch stop appdir_stage
|
||||||
|
fi
|
||||||
|
|
||||||
# Copy Application code in.
|
|
||||||
bpwatch start appdir_stage
|
|
||||||
deep-mv $BUILD_DIR $APP_DIR
|
|
||||||
bpwatch stop appdir_stage
|
|
||||||
|
|
||||||
# Set new context.
|
# Set new context.
|
||||||
ORIG_BUILD_DIR=$BUILD_DIR
|
ORIG_BUILD_DIR=$BUILD_DIR
|
||||||
BUILD_DIR=$APP_DIR
|
BUILD_DIR=$APP_DIR
|
||||||
|
|
||||||
# Prepend proper path buildpack use.
|
# Set up outputs under new context
|
||||||
|
PROFILE_PATH="$BUILD_DIR/.profile.d/python.sh"
|
||||||
|
GUNICORN_PROFILE_PATH="$BUILD_DIR/.profile.d/python.gunicorn.sh"
|
||||||
|
|
||||||
|
# We'll need to send these statics to other scripts we `source`.
|
||||||
|
export BUILD_DIR CACHE_DIR BIN_DIR PROFILE_PATH
|
||||||
|
|
||||||
|
# Prepend proper environment variables for Python use.
|
||||||
export PATH=$BUILD_DIR/.heroku/python/bin:$BUILD_DIR/.heroku/vendor/bin:$PATH
|
export PATH=$BUILD_DIR/.heroku/python/bin:$BUILD_DIR/.heroku/vendor/bin:$PATH
|
||||||
export PYTHONUNBUFFERED=1
|
export PYTHONUNBUFFERED=1
|
||||||
export LANG=en_US.UTF-8
|
export LANG=en_US.UTF-8
|
||||||
export C_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include:/app/.heroku/python/include
|
export C_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include:/app/.heroku/python/include:$C_INCLUDE_PATH
|
||||||
export CPLUS_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include:/app/.heroku/python/include
|
export CPLUS_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include:/app/.heroku/python/include:$CPLUS_INCLUDE_PATH
|
||||||
export LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib:/app/.heroku/python/lib
|
export LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib:/app/.heroku/python/lib:$LIBRARY_PATH
|
||||||
export LD_LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib:/app/.heroku/python/lib
|
export LD_LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib:/app/.heroku/python/lib:$LD_LIBRARY_PATH
|
||||||
export PKG_CONFIG_PATH=/app/.heroku/vendor/lib/pkg-config:$BUILD_DIR/.heroku/vendor/lib/pkg-config:/app/.heroku/python/lib/pkg-config
|
export PKG_CONFIG_PATH=/app/.heroku/vendor/lib/pkg-config:$BUILD_DIR/.heroku/vendor/lib/pkg-config:/app/.heroku/python/lib/pkg-config:$PKG_CONFIG_PATH
|
||||||
|
|
||||||
# Switch to the repo's context.
|
# Switch to the repo's context.
|
||||||
cd $BUILD_DIR
|
cd $BUILD_DIR
|
||||||
|
|
||||||
|
# Warn for lack of Procfile.
|
||||||
|
if [[ ! -f Procfile ]]; then
|
||||||
|
puts-warn 'Warning: Your application is missing a Procfile. This file tells Heroku how to run your application.'
|
||||||
|
puts-warn 'Learn more: https://devcenter.heroku.com/articles/procfile'
|
||||||
|
fi
|
||||||
|
|
||||||
# Experimental pre_compile hook.
|
# Experimental pre_compile hook.
|
||||||
bpwatch start pre_compile
|
bpwatch start pre_compile
|
||||||
source $BIN_DIR/steps/hooks/pre_compile
|
source $BIN_DIR/steps/hooks/pre_compile
|
||||||
bpwatch stop pre_compile
|
bpwatch stop pre_compile
|
||||||
|
|
||||||
# If no requirements given, assume `setup.py develop`.
|
# If no requirements.txt file given, assume `setup.py develop` is intended.
|
||||||
if [ ! -f requirements.txt ]; then
|
if [ ! -f requirements.txt ]; then
|
||||||
echo "-e ." > requirements.txt
|
echo "-e ." > requirements.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Sticky runtimes.
|
# Sticky runtimes.
|
||||||
if [ -f $CACHE_DIR/.heroku/python-version ]; then
|
if [ -f $CACHE_DIR/.heroku/python-version ]; then
|
||||||
DEFAULT_PYTHON_VERSION=$(cat $CACHE_DIR/.heroku/python-version)
|
DEFAULT_PYTHON_VERSION=$(cat $CACHE_DIR/.heroku/python-version)
|
||||||
@@ -117,7 +147,7 @@ fi
|
|||||||
if [ -f $CACHE_DIR/.heroku/python-stack ]; then
|
if [ -f $CACHE_DIR/.heroku/python-stack ]; then
|
||||||
CACHED_PYTHON_STACK=$(cat $CACHE_DIR/.heroku/python-stack)
|
CACHED_PYTHON_STACK=$(cat $CACHE_DIR/.heroku/python-stack)
|
||||||
else
|
else
|
||||||
CACHED_PYTHON_STACK=$DEFAULT_PYTHON_STACK
|
CACHED_PYTHON_STACK=$STACK
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If no runtime given, assume default version.
|
# If no runtime given, assume default version.
|
||||||
@@ -125,7 +155,7 @@ if [ ! -f runtime.txt ]; then
|
|||||||
echo $DEFAULT_PYTHON_VERSION > runtime.txt
|
echo $DEFAULT_PYTHON_VERSION > runtime.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ### The Cache
|
# Prepare the cache.
|
||||||
mkdir -p $CACHE_DIR
|
mkdir -p $CACHE_DIR
|
||||||
|
|
||||||
# Purge "old-style" virtualenvs.
|
# Purge "old-style" virtualenvs.
|
||||||
@@ -136,9 +166,14 @@ bpwatch stop clear_old_venvs
|
|||||||
|
|
||||||
# Restore old artifacts from the cache.
|
# Restore old artifacts from the cache.
|
||||||
bpwatch start restore_cache
|
bpwatch start restore_cache
|
||||||
for dir in $CACHED_DIRS; do
|
mkdir -p .heroku
|
||||||
cp -R $CACHE_DIR/$dir . &> /dev/null || true
|
|
||||||
done
|
cp -R $CACHE_DIR/.heroku/python .heroku/ &> /dev/null || true
|
||||||
|
cp -R $CACHE_DIR/.heroku/python-stack .heroku/ &> /dev/null || true
|
||||||
|
cp -R $CACHE_DIR/.heroku/python-version .heroku/ &> /dev/null || true
|
||||||
|
cp -R $CACHE_DIR/.heroku/vendor .heroku/ &> /dev/null || true
|
||||||
|
cp -R $CACHE_DIR/.heroku/venv .heroku/ &> /dev/null || true
|
||||||
|
|
||||||
bpwatch stop restore_cache
|
bpwatch stop restore_cache
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
@@ -166,28 +201,31 @@ source $BIN_DIR/steps/pylibmc
|
|||||||
# Libffi support.
|
# Libffi support.
|
||||||
source $BIN_DIR/steps/cryptography
|
source $BIN_DIR/steps/cryptography
|
||||||
|
|
||||||
|
# Support for Geo libraries.
|
||||||
|
sub-env $BIN_DIR/steps/geo-libs
|
||||||
|
|
||||||
|
# GDAL support.
|
||||||
|
source $BIN_DIR/steps/gdal
|
||||||
|
|
||||||
# Install dependencies with Pip.
|
# Install dependencies with Pip.
|
||||||
sub-env $BIN_DIR/steps/pip-install
|
source $BIN_DIR/steps/pip-install
|
||||||
|
|
||||||
# Django collectstatic support.
|
# Django collectstatic support.
|
||||||
sub-env $BIN_DIR/steps/collectstatic
|
sub-env $BIN_DIR/steps/collectstatic
|
||||||
|
|
||||||
|
|
||||||
# ### Finalize
|
# Create .profile script for application runtime environment variables.
|
||||||
#
|
|
||||||
|
|
||||||
# Set context environment variables.
|
|
||||||
set-env PATH '$HOME/.heroku/python/bin:$PATH'
|
set-env PATH '$HOME/.heroku/python/bin:$PATH'
|
||||||
set-env PYTHONUNBUFFERED true
|
set-env PYTHONUNBUFFERED true
|
||||||
set-env PYTHONHOME /app/.heroku/python
|
set-env PYTHONHOME /app/.heroku/python
|
||||||
set-env LIBRARY_PATH /app/.heroku/vendor/lib:/app/.heroku/python/lib
|
set-env LIBRARY_PATH '/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LIBRARY_PATH'
|
||||||
set-env LD_LIBRARY_PATH '/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LD_LIBRARY_PATH'
|
set-env LD_LIBRARY_PATH '/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LD_LIBRARY_PATH'
|
||||||
set-default-env LANG en_US.UTF-8
|
set-default-env LANG en_US.UTF-8
|
||||||
set-default-env PYTHONHASHSEED random
|
set-default-env PYTHONHASHSEED random
|
||||||
set-default-env PYTHONPATH /app/
|
set-default-env PYTHONPATH /app/
|
||||||
|
|
||||||
# Install sane-default script for WEB_CONCURRENCY environment variable.
|
# Install sane-default script for $WEB_CONCURRENCY and $FORWARDED_ALLOW_IPS.
|
||||||
cp $ROOT_DIR/vendor/python.webconcurrency.sh $WEBCONCURRENCY_PROFILE_PATH
|
cp $ROOT_DIR/vendor/python.gunicorn.sh $GUNICORN_PROFILE_PATH
|
||||||
|
|
||||||
|
|
||||||
# Experimental post_compile hook.
|
# Experimental post_compile hook.
|
||||||
@@ -197,21 +235,36 @@ bpwatch stop post_compile
|
|||||||
|
|
||||||
# Store new artifacts in cache.
|
# Store new artifacts in cache.
|
||||||
bpwatch start dump_cache
|
bpwatch start dump_cache
|
||||||
for dir in $CACHED_DIRS; do
|
|
||||||
rm -rf $CACHE_DIR/$dir
|
rm -rf $CACHE_DIR/.heroku/python
|
||||||
cp -R $dir $CACHE_DIR/
|
rm -rf $CACHE_DIR/.heroku/python-version
|
||||||
done
|
rm -rf $CACHE_DIR/.heroku/python-stack
|
||||||
|
rm -rf $CACHE_DIR/.heroku/vendor
|
||||||
|
rm -rf $CACHE_DIR/.heroku/venv
|
||||||
|
|
||||||
|
mkdir -p $CACHE_DIR/.heroku
|
||||||
|
cp -R .heroku/python $CACHE_DIR/.heroku/
|
||||||
|
cp -R .heroku/python-version $CACHE_DIR/.heroku/
|
||||||
|
cp -R .heroku/python-stack $CACHE_DIR/.heroku/ &> /dev/null || true
|
||||||
|
cp -R .heroku/vendor $CACHE_DIR/.heroku/ &> /dev/null || true
|
||||||
|
cp -R .heroku/venv $CACHE_DIR/.heroku/ &> /dev/null || true
|
||||||
|
|
||||||
bpwatch stop dump_cache
|
bpwatch stop dump_cache
|
||||||
|
|
||||||
# ### Fin.
|
# Fin.
|
||||||
bpwatch start appdir_commit
|
if [[ ! "$DOCKER_BUILD" ]]; then
|
||||||
deep-mv $BUILD_DIR $ORIG_BUILD_DIR
|
|
||||||
bpwatch stop appdir_commit
|
|
||||||
|
|
||||||
bpwatch start anvil_appdir_commit
|
bpwatch start appdir_commit
|
||||||
|
deep-rm $ORIG_BUILD_DIR
|
||||||
|
deep-mv $BUILD_DIR $ORIG_BUILD_DIR
|
||||||
|
bpwatch stop appdir_commit
|
||||||
|
|
||||||
|
bpwatch start anvil_appdir_commit
|
||||||
if [ "$SLUG_ID" ]; then
|
if [ "$SLUG_ID" ]; then
|
||||||
deep-mv $TMP_APP_DIR $APP_DIR
|
deep-mv $TMP_APP_DIR $APP_DIR
|
||||||
fi
|
fi
|
||||||
|
|
||||||
bpwatch stop anvil_appdir_commit
|
bpwatch stop anvil_appdir_commit
|
||||||
bpwatch stop compile
|
bpwatch stop compile
|
||||||
|
fi
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python)
|
# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python)
|
||||||
# detector.
|
# detector.
|
||||||
#
|
#
|
||||||
# A [buildpack](http://devcenter.heroku.com/articles/buildpacks) is an
|
# A [buildpack](https://devcenter.heroku.com/articles/buildpacks) is an
|
||||||
# adapter between a Python application and Heroku's runtime.
|
# adapter between a Python application and Heroku's runtime.
|
||||||
|
|
||||||
# ## Usage
|
# ## Usage
|
||||||
|
|||||||
+1
-1
@@ -18,6 +18,6 @@ if [[ $MANAGE_FILE ]]; then
|
|||||||
cat <<EOF
|
cat <<EOF
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
heroku-postgresql:hobby-dev
|
- heroku-postgresql
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|||||||
+50
-19
@@ -1,36 +1,67 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Django Collectstatic runner. If you have Django installed, collectstatic will
|
||||||
|
# automatically be executed as part of the build process. If collectstatic
|
||||||
|
# fails, your build fails.
|
||||||
|
|
||||||
|
# This functionality will only activate if Django is in requirements.txt.
|
||||||
|
|
||||||
|
# Runtime arguments:
|
||||||
|
# - $DISABLE_COLLECTSTATIC: disables this functionality.
|
||||||
|
# - $DEBUG_COLLECTSTATIC: upon failure, print out environment variables.
|
||||||
|
|
||||||
source $BIN_DIR/utils
|
source $BIN_DIR/utils
|
||||||
|
|
||||||
MANAGE_FILE=$(find . -maxdepth 3 -type f -name 'manage.py' | head -1)
|
# Location of 'manage.py', if it exists.
|
||||||
|
MANAGE_FILE=$(find . -maxdepth 3 -type f -name 'manage.py' -printf '%d\t%P\n' | sort -nk1 | cut -f2 | head -1)
|
||||||
MANAGE_FILE=${MANAGE_FILE:-fakepath}
|
MANAGE_FILE=${MANAGE_FILE:-fakepath}
|
||||||
|
|
||||||
|
# Legacy file-based support for $DISABLE_COLLECTSTATIC
|
||||||
[ -f .heroku/collectstatic_disabled ] && DISABLE_COLLECTSTATIC=1
|
[ -f .heroku/collectstatic_disabled ] && DISABLE_COLLECTSTATIC=1
|
||||||
|
|
||||||
bpwatch start collectstatic
|
# Ensure that Django is explicitly specified in requirements.txt
|
||||||
|
pip-grep -s requirements.txt django Django && DJANGO_INSTALLED=1
|
||||||
|
|
||||||
if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ]; then
|
bpwatch start collectstatic # metrics collection
|
||||||
|
|
||||||
|
if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ] && [ "$DJANGO_INSTALLED" ]; then
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
echo "-----> Preparing static assets"
|
puts-cmd "python $MANAGE_FILE collectstatic --noinput"
|
||||||
# Check if collectstatic is configured properly.
|
|
||||||
python $MANAGE_FILE collectstatic --dry-run --noinput &> /dev/null && RUN_COLLECTSTATIC=true
|
|
||||||
|
|
||||||
# Compile assets if collectstatic appears to be kosher.
|
# Run collectstatic, cleanup some of the noisy output.
|
||||||
if [ "$RUN_COLLECTSTATIC" ]; then
|
python $MANAGE_FILE collectstatic --noinput --traceback 2>&1 | sed '/^Post-processed/d;/^Copying/d;/^$/d' | indent
|
||||||
|
COLLECTSTATIC_STATUS="${PIPESTATUS[0]}"
|
||||||
|
|
||||||
echo " Running collectstatic..."
|
set -e
|
||||||
python $MANAGE_FILE collectstatic --noinput 2>&1 | sed '/^Copying/d;/^$/d;/^ /d' | indent
|
|
||||||
|
# Display a warning if collectstatic failed.
|
||||||
|
[ $COLLECTSTATIC_STATUS -ne 0 ] && {
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo " ! Error while running '$ python $MANAGE_FILE collectstatic --noinput'."
|
||||||
|
echo " See traceback above for details."
|
||||||
|
echo
|
||||||
|
echo " You may need to update application code to resolve this error."
|
||||||
|
echo " Or, you can disable collectstatic for this application:"
|
||||||
|
echo
|
||||||
|
echo " $ heroku config:set DISABLE_COLLECTSTATIC=1"
|
||||||
|
echo
|
||||||
|
echo " https://devcenter.heroku.com/articles/django-assets"
|
||||||
|
|
||||||
|
# Additionally, dump out the environment, if debug mode is on.
|
||||||
|
if [ "$DEBUG_COLLECTSTATIC" ]; then
|
||||||
|
echo
|
||||||
|
echo "****** Collectstatic environment variables:"
|
||||||
|
echo
|
||||||
|
env | indent
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Abort the build.
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
[ $? -ne 0 ] && {
|
|
||||||
echo " ! Error running 'manage.py collectstatic'. More info:"
|
|
||||||
echo " http://devcenter.heroku.com/articles/django-assets"
|
|
||||||
}
|
|
||||||
else
|
|
||||||
echo " Collectstatic configuration error. To debug, run:"
|
|
||||||
echo " $ heroku run python $MANAGE_FILE collectstatic --noinput"
|
|
||||||
fi
|
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
|
|
||||||
bpwatch stop collectstatic
|
bpwatch stop collectstatic # metrics collection
|
||||||
|
|||||||
@@ -4,13 +4,13 @@
|
|||||||
# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python)
|
# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python)
|
||||||
# compiler.
|
# compiler.
|
||||||
#
|
#
|
||||||
# A [buildpack](http://devcenter.heroku.com/articles/buildpacks) is an
|
# A [buildpack](https://devcenter.heroku.com/articles/buildpacks) is an
|
||||||
# adapter between a Python application and Heroku's runtime.
|
# adapter between a Python application and Heroku's runtime.
|
||||||
#
|
#
|
||||||
# This script is invoked by [`bin/compile`](/).
|
# This script is invoked by [`bin/compile`](/).
|
||||||
|
|
||||||
# The location of the pre-compiled cryptography binary.
|
# The location of the pre-compiled libffi binary.
|
||||||
VENDORED_LIBFFI="http://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/libffi.tar.gz"
|
VENDORED_LIBFFI="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/libffi.tar.gz"
|
||||||
|
|
||||||
PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
|
PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||||
|
|
||||||
@@ -19,15 +19,15 @@ source $BIN_DIR/utils
|
|||||||
|
|
||||||
bpwatch start libffi_install
|
bpwatch start libffi_install
|
||||||
|
|
||||||
# If pylibmc exists within requirements, use vendored cryptography.
|
# If a package using cffi exists within requirements, use vendored libffi.
|
||||||
if (pip-grep -s requirements.txt bcrypt cffi cryptography &> /dev/null) then
|
if (pip-grep -s requirements.txt bcrypt cffi cryptography django[bcrypt] Django[bcrypt] pyOpenSSL PyOpenSSL requests[security] &> /dev/null) then
|
||||||
|
|
||||||
if [ -d ".heroku/vendor/lib/libffi-3.1.1" ]; then
|
if [ -d ".heroku/vendor/lib/libffi-3.1.1" ]; then
|
||||||
export LIBFFI=$(pwd)/vendor
|
export LIBFFI=$(pwd)/vendor
|
||||||
else
|
else
|
||||||
echo "-----> Noticed cffi. Bootstrapping libffi."
|
echo "-----> Noticed cffi. Bootstrapping libffi."
|
||||||
mkdir -p .heroku/vendor
|
mkdir -p .heroku/vendor
|
||||||
# Download and extract cryptography into target vendor directory.
|
# Download and extract libffi into target vendor directory.
|
||||||
curl $VENDORED_LIBFFI -s | tar zxv -C .heroku/vendor &> /dev/null
|
curl $VENDORED_LIBFFI -s | tar zxv -C .heroku/vendor &> /dev/null
|
||||||
|
|
||||||
export LIBFFI=$(pwd)/vendor
|
export LIBFFI=$(pwd)/vendor
|
||||||
|
|||||||
Executable
+37
@@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# This script serves as the GDAL build step of the
|
||||||
|
# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python)
|
||||||
|
# compiler.
|
||||||
|
#
|
||||||
|
# A [buildpack](https://devcenter.heroku.com/articles/buildpacks) is an
|
||||||
|
# adapter between a Python application and Heroku's runtime.
|
||||||
|
#
|
||||||
|
# This script is invoked by [`bin/compile`](/).
|
||||||
|
|
||||||
|
# The location of the pre-compiled cryptography binary.
|
||||||
|
VENDORED_GDAL="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/gdal.tar.gz"
|
||||||
|
|
||||||
|
PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||||
|
|
||||||
|
# Syntax sugar.
|
||||||
|
source $BIN_DIR/utils
|
||||||
|
|
||||||
|
bpwatch start gdal_install
|
||||||
|
|
||||||
|
# If GDAL exists within requirements, use vendored gdal.
|
||||||
|
if (pip-grep -s requirements.txt GDAL gdal pygdal &> /dev/null) then
|
||||||
|
|
||||||
|
if [ -f ".heroku/vendor/bin/gdalserver" ]; then
|
||||||
|
export GDAL=$(pwd)/vendor
|
||||||
|
else
|
||||||
|
echo "-----> Noticed GDAL. Bootstrapping gdal."
|
||||||
|
mkdir -p .heroku/vendor
|
||||||
|
# Download and extract cryptography into target vendor directory.
|
||||||
|
curl $VENDORED_GDAL -s | tar zxv -C .heroku/vendor &> /dev/null
|
||||||
|
|
||||||
|
export GDAL=$(pwd)/vendor
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
bpwatch stop gdal_install
|
||||||
Executable
+41
@@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# This script serves as the GDAL build step of the
|
||||||
|
# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python)
|
||||||
|
# compiler.
|
||||||
|
#
|
||||||
|
# A [buildpack](https://devcenter.heroku.com/articles/buildpacks) is an
|
||||||
|
# adapter between a Python application and Heroku's runtime.
|
||||||
|
#
|
||||||
|
# This script is invoked by [`bin/compile`](/).
|
||||||
|
|
||||||
|
# The location of the pre-compiled cryptography binary.
|
||||||
|
VENDORED_GDAL="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/gdal.tar.gz"
|
||||||
|
VENDORED_GEOS="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/geos.tar.gz"
|
||||||
|
VENDORED_PROJ="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/proj.tar.gz"
|
||||||
|
|
||||||
|
PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
|
||||||
|
|
||||||
|
# Syntax sugar.
|
||||||
|
source $BIN_DIR/utils
|
||||||
|
|
||||||
|
bpwatch start geo_libs_install
|
||||||
|
|
||||||
|
# If GDAL exists within requirements, use vendored gdal.
|
||||||
|
if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then
|
||||||
|
|
||||||
|
if [ -f ".heroku/vendor/bin/gdalserver" ]; then
|
||||||
|
export GDAL=$(pwd)/vendor
|
||||||
|
else
|
||||||
|
echo "-----> Bootstrapping gdal, geos, proj."
|
||||||
|
mkdir -p .heroku/vendor
|
||||||
|
# Download and extract cryptography into target vendor directory.
|
||||||
|
curl $VENDORED_GDAL -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
|
||||||
|
|
||||||
|
export GDAL=$(pwd)/vendor
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
bpwatch stop geo_libs_install
|
||||||
+13
-7
@@ -1,18 +1,24 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
source $BIN_DIR/utils
|
|
||||||
|
|
||||||
# Install dependencies with Pip.
|
# Install dependencies with Pip.
|
||||||
puts-step "Installing dependencies with pip"
|
puts-cmd "pip install -r requirements.txt"
|
||||||
|
|
||||||
[ ! "$FRESH_PYTHON" ] && bpwatch start pip_install
|
[ ! "$FRESH_PYTHON" ] && bpwatch start pip_install
|
||||||
[ "$FRESH_PYTHON" ] && bpwatch start pip_install_first
|
[ "$FRESH_PYTHON" ] && bpwatch start pip_install_first
|
||||||
|
|
||||||
/app/.heroku/python/bin/pip install -r requirements.txt --exists-action=w --src=./.heroku/src --allow-all-external | cleanup | indent
|
set +e
|
||||||
|
/app/.heroku/python/bin/pip install -r requirements.txt --exists-action=w --src=./.heroku/src --disable-pip-version-check --no-cache-dir 2>&1 | tee $WARNINGS_LOG | cleanup | indent
|
||||||
|
PIP_STATUS="${PIPESTATUS[0]}"
|
||||||
|
set -e
|
||||||
|
|
||||||
|
show-warnings
|
||||||
|
|
||||||
|
if [[ ! $PIP_STATUS -eq 0 ]]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Smart Requirements handling
|
# Smart Requirements handling
|
||||||
cp requirements.txt .heroku/python/requirements-declared.txt
|
cp requirements.txt .heroku/python/requirements-declared.txt
|
||||||
/app/.heroku/python/bin/pip freeze > .heroku/python/requirements-installed.txt
|
/app/.heroku/python/bin/pip freeze --disable-pip-version-check > .heroku/python/requirements-installed.txt
|
||||||
|
|
||||||
[ ! "$FRESH_PYTHON" ] && bpwatch stop pip_install
|
[ ! "$FRESH_PYTHON" ] && bpwatch stop pip_install
|
||||||
[ "$FRESH_PYTHON" ] && bpwatch stop pip_install_first
|
[ "$FRESH_PYTHON" ] && bpwatch stop pip_install_first
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ if [[ -f .heroku/python/requirements-declared.txt ]]; then
|
|||||||
|
|
||||||
cp .heroku/python/requirements-declared.txt requirements-declared.txt
|
cp .heroku/python/requirements-declared.txt requirements-declared.txt
|
||||||
|
|
||||||
pip-diff --stale requirements-declared.txt requirements.txt > .heroku/python/requirements-stale.txt
|
pip-diff --stale requirements-declared.txt requirements.txt --exclude setuptools pip wheel > .heroku/python/requirements-stale.txt
|
||||||
|
|
||||||
rm -fr requirements-declared.txt
|
rm -fr requirements-declared.txt
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -4,13 +4,13 @@
|
|||||||
# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python)
|
# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python)
|
||||||
# compiler.
|
# compiler.
|
||||||
#
|
#
|
||||||
# A [buildpack](http://devcenter.heroku.com/articles/buildpacks) is an
|
# A [buildpack](https://devcenter.heroku.com/articles/buildpacks) is an
|
||||||
# adapter between a Python application and Heroku's runtime.
|
# adapter between a Python application and Heroku's runtime.
|
||||||
#
|
#
|
||||||
# This script is invoked by [`bin/compile`](/).
|
# This script is invoked by [`bin/compile`](/).
|
||||||
|
|
||||||
# The location of the pre-compiled libmemcached binary.
|
# The location of the pre-compiled libmemcached binary.
|
||||||
VENDORED_MEMCACHED="http://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/libmemcache.tar.gz"
|
VENDORED_MEMCACHED="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor/libmemcache.tar.gz"
|
||||||
|
|
||||||
# Syntax sugar.
|
# Syntax sugar.
|
||||||
source $BIN_DIR/utils
|
source $BIN_DIR/utils
|
||||||
|
|||||||
+3
-4
@@ -5,7 +5,7 @@ PYTHON_VERSION=$(cat runtime.txt)
|
|||||||
if [ -f .heroku/python-version ]; then
|
if [ -f .heroku/python-version ]; then
|
||||||
if [ ! $(cat .heroku/python-version) = $PYTHON_VERSION ]; then
|
if [ ! $(cat .heroku/python-version) = $PYTHON_VERSION ]; then
|
||||||
bpwatch start uninstall_python
|
bpwatch start uninstall_python
|
||||||
puts-step "Found runtime $(cat .heroku/python-version), removing"
|
puts-step "Found $(cat .heroku/python-version), removing"
|
||||||
rm -fr .heroku/python
|
rm -fr .heroku/python
|
||||||
bpwatch stop uninstall_python
|
bpwatch stop uninstall_python
|
||||||
else
|
else
|
||||||
@@ -15,7 +15,6 @@ fi
|
|||||||
|
|
||||||
if [ ! $STACK = $CACHED_PYTHON_STACK ]; then
|
if [ ! $STACK = $CACHED_PYTHON_STACK ]; then
|
||||||
bpwatch start uninstall_python
|
bpwatch start uninstall_python
|
||||||
puts-step "Stack changed, re-installing runtime"
|
|
||||||
rm -fr .heroku/python .heroku/python-stack .heroku/vendor
|
rm -fr .heroku/python .heroku/python-stack .heroku/vendor
|
||||||
unset SKIP_INSTALL
|
unset SKIP_INSTALL
|
||||||
bpwatch stop uninstall_python
|
bpwatch stop uninstall_python
|
||||||
@@ -24,12 +23,12 @@ fi
|
|||||||
|
|
||||||
if [ ! "$SKIP_INSTALL" ]; then
|
if [ ! "$SKIP_INSTALL" ]; then
|
||||||
bpwatch start install_python
|
bpwatch start install_python
|
||||||
puts-step "Installing runtime ($PYTHON_VERSION)"
|
puts-step "Installing $PYTHON_VERSION"
|
||||||
|
|
||||||
# Prepare destination directory.
|
# Prepare destination directory.
|
||||||
mkdir -p .heroku/python
|
mkdir -p .heroku/python
|
||||||
|
|
||||||
curl http://lang-python.s3.amazonaws.com/$STACK/runtimes/$PYTHON_VERSION.tar.gz -s | tar zxv -C .heroku/python &> /dev/null
|
curl https://lang-python.s3.amazonaws.com/$STACK/runtimes/$PYTHON_VERSION.tar.gz -s | tar zxv -C .heroku/python &> /dev/null
|
||||||
if [[ $? != 0 ]] ; then
|
if [[ $? != 0 ]] ; then
|
||||||
puts-warn "Requested runtime ($PYTHON_VERSION) is not available for this stack ($STACK)."
|
puts-warn "Requested runtime ($PYTHON_VERSION) is not available for this stack ($STACK)."
|
||||||
puts-warn "Aborting. More info: https://devcenter.heroku.com/articles/python-support"
|
puts-warn "Aborting. More info: https://devcenter.heroku.com/articles/python-support"
|
||||||
|
|||||||
@@ -16,6 +16,11 @@ cleanup() {
|
|||||||
sed -e 's/\.\.\.\+/.../g' | sed -e '/already satisfied/Id' | sed -e '/Overwriting/Id' | sed -e '/python executable/Id' | sed -e '/no previously-included files/Id'
|
sed -e 's/\.\.\.\+/.../g' | sed -e '/already satisfied/Id' | sed -e '/Overwriting/Id' | sed -e '/python executable/Id' | sed -e '/no previously-included files/Id'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Buildpack Indented line.
|
||||||
|
puts-line() {
|
||||||
|
echo " $@"
|
||||||
|
}
|
||||||
|
|
||||||
# Buildpack Steps.
|
# Buildpack Steps.
|
||||||
puts-step() {
|
puts-step() {
|
||||||
echo "-----> $@"
|
echo "-----> $@"
|
||||||
@@ -26,6 +31,11 @@ puts-warn() {
|
|||||||
echo " ! $@"
|
echo " ! $@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Buildpack Commands.
|
||||||
|
puts-cmd() {
|
||||||
|
echo " $ $@"
|
||||||
|
}
|
||||||
|
|
||||||
# Usage: $ set-env key value
|
# Usage: $ set-env key value
|
||||||
set-env() {
|
set-env() {
|
||||||
echo "export $1=$2" >> $PROFILE_PATH
|
echo "export $1=$2" >> $PROFILE_PATH
|
||||||
@@ -36,7 +46,7 @@ set-default-env() {
|
|||||||
echo "export $1=\${$1:-$2}" >> $PROFILE_PATH
|
echo "export $1=\${$1:-$2}" >> $PROFILE_PATH
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: $ set-default-env key value
|
# Usage: $ un-set-env key
|
||||||
un-set-env() {
|
un-set-env() {
|
||||||
echo "unset $1" >> $PROFILE_PATH
|
echo "unset $1" >> $PROFILE_PATH
|
||||||
}
|
}
|
||||||
@@ -68,7 +78,7 @@ deep-rm() {
|
|||||||
# subshell to avoid surprising caller with shopts.
|
# subshell to avoid surprising caller with shopts.
|
||||||
(
|
(
|
||||||
shopt -s dotglob
|
shopt -s dotglob
|
||||||
rm -rf "$1"/!(tmp|.|..)
|
rm -rf "$1"/!(.curlrc|.netrc|tmp|.|..)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,6 +88,10 @@ sub-env() {
|
|||||||
WHITELIST=${2:-''}
|
WHITELIST=${2:-''}
|
||||||
BLACKLIST=${3:-'^(GIT_DIR|PYTHONHOME|LD_LIBRARY_PATH|LIBRARY_PATH|PATH)$'}
|
BLACKLIST=${3:-'^(GIT_DIR|PYTHONHOME|LD_LIBRARY_PATH|LIBRARY_PATH|PATH)$'}
|
||||||
|
|
||||||
|
# Python-specific variables.
|
||||||
|
export PYHONHOME=$BUILD_DIR/.heroku/python
|
||||||
|
export PYTHONPATH=$BUILD_DIR/
|
||||||
|
|
||||||
(
|
(
|
||||||
if [ -d "$ENV_DIR" ]; then
|
if [ -d "$ENV_DIR" ]; then
|
||||||
for e in $(ls $ENV_DIR); do
|
for e in $(ls $ENV_DIR); do
|
||||||
@@ -91,3 +105,4 @@ sub-env() {
|
|||||||
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Executable
+49
@@ -0,0 +1,49 @@
|
|||||||
|
shopt -s extglob
|
||||||
|
|
||||||
|
old-platform() {
|
||||||
|
if grep -qi 'InsecurePlatformWarning' "$WARNINGS_LOG"; then
|
||||||
|
echo
|
||||||
|
puts-warn "Hello! It looks like your application is using an outdated version of Python."
|
||||||
|
puts-warn "This caused the security warning you saw above during the 'pip install' step."
|
||||||
|
puts-warn "We recommend '$RECOMMENDED_PYTHON_VERSION', which you can specify in a 'runtime.txt' file."
|
||||||
|
puts-warn " -- Much Love, Heroku."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
pylibmc-missing() {
|
||||||
|
if grep -qi 'fatal error: libmemcached/memcached.h: No such file or directory' "$WARNINGS_LOG"; then
|
||||||
|
echo
|
||||||
|
puts-warn "Hello! There was a problem with your build related to libmemcache."
|
||||||
|
puts-warn "The Python library 'pylibmc' must be explicitly specified in 'requirements.txt' in order to build correctly."
|
||||||
|
puts-warn "Once you do that, everything should work as expected. -- Much Love, Heroku."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
scipy-included() {
|
||||||
|
if grep -qi 'running setup.py install for scipy' "$WARNINGS_LOG"; then
|
||||||
|
echo
|
||||||
|
puts-warn "Hello! It looks like you're trying to use scipy on Heroku."
|
||||||
|
puts-warn "Unfortunately, at this time, we do not directly support this library."
|
||||||
|
puts-warn "There is, however, a buildpack available that makes it possible to use it on Heroku."
|
||||||
|
puts-warn "You can learn more here: https://devcenter.heroku.com/articles/python-c-deps"
|
||||||
|
puts-warn "Sorry for the inconvenience. -- Much Love, Heroku."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
distribute-included() {
|
||||||
|
if grep -qi 'Running setup.py install for distribute' "$WARNINGS_LOG"; then
|
||||||
|
echo
|
||||||
|
puts-warn "Hello! Your requirements.txt file contains the distribute package."
|
||||||
|
puts-warn "This library is automatically installed by Heroku and shouldn't be in"
|
||||||
|
puts-warn "Your requirements.txt file. This can cause unexpected behavior."
|
||||||
|
puts-warn " -- Much Love, Heroku."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
show-warnings() {
|
||||||
|
old-platform
|
||||||
|
pylibmc-missing
|
||||||
|
scipy-included
|
||||||
|
distribute-included
|
||||||
|
}
|
||||||
|
|
||||||
@@ -6,7 +6,7 @@ OUT_PREFIX=$1
|
|||||||
echo "Building autoconf..."
|
echo "Building autoconf..."
|
||||||
|
|
||||||
|
|
||||||
SOURCE_TARBALL='http://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.gz'
|
SOURCE_TARBALL='https://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.gz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
|
||||||
cd autoconf-2.68
|
cd autoconf-2.68
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Build Path: /app/.heroku/python/
|
|
||||||
|
|
||||||
OUT_PREFIX=$1
|
|
||||||
|
|
||||||
# Use new path, containing autoconf.
|
|
||||||
export PATH="/app/.heroku/python/bin/:$PATH"
|
|
||||||
hash -r
|
|
||||||
|
|
||||||
|
|
||||||
echo "Building libffi..."
|
|
||||||
|
|
||||||
SOURCE_TARBALL='http://cl.ly/2s1t1u3v0N0I/download/libffi-3.1.tar'
|
|
||||||
|
|
||||||
curl -L $SOURCE_TARBALL | tar x
|
|
||||||
|
|
||||||
cd libffi-3.1
|
|
||||||
./configure --prefix=$OUT_PREFIX --disable-static &&
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
# Cleanup
|
|
||||||
cd ..
|
|
||||||
@@ -6,7 +6,7 @@ OUT_PREFIX=$1
|
|||||||
echo "Building SQLite..."
|
echo "Building SQLite..."
|
||||||
|
|
||||||
|
|
||||||
SOURCE_TARBALL='http://www.sqlite.org/sqlite-autoconf-3070900.tar.gz'
|
SOURCE_TARBALL='https://www.sqlite.org/sqlite-autoconf-3070900.tar.gz'
|
||||||
|
|
||||||
curl $SOURCE_TARBALL | tar xz
|
curl $SOURCE_TARBALL | tar xz
|
||||||
# jx
|
# jx
|
||||||
|
|||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/vendor/
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Use new path, containing autoconf.
|
||||||
|
export PATH="/app/.heroku/python/bin/:$PATH"
|
||||||
|
hash -r
|
||||||
|
|
||||||
|
|
||||||
|
echo "Building gdal..."
|
||||||
|
|
||||||
|
SOURCE_TARBALL='http://download.osgeo.org/gdal/1.11.1/gdal-1.11.1.tar.gz'
|
||||||
|
|
||||||
|
curl -L $SOURCE_TARBALL | tar zx
|
||||||
|
|
||||||
|
cd gdal-1.11.1
|
||||||
|
./configure --prefix=$OUT_PREFIX &&
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
cd ..
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/vendor/
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Use new path, containing autoconf.
|
||||||
|
export PATH="/app/.heroku/python/bin/:$PATH"
|
||||||
|
hash -r
|
||||||
|
|
||||||
|
|
||||||
|
echo "Building geos..."
|
||||||
|
|
||||||
|
SOURCE_TARBALL='http://download.osgeo.org/geos/geos-3.4.2.tar.bz2'
|
||||||
|
|
||||||
|
curl -L $SOURCE_TARBALL | tar xj
|
||||||
|
|
||||||
|
cd geos-3.4.2
|
||||||
|
./configure --prefix=$OUT_PREFIX &&
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
cd ..
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/vendor/
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Use new path, containing autoconf.
|
||||||
|
export PATH="/app/.heroku/python/bin/:$PATH"
|
||||||
|
hash -r
|
||||||
|
|
||||||
|
|
||||||
|
echo "Building gdal..."
|
||||||
|
|
||||||
|
SOURCE_TARBALL='http://download.osgeo.org/proj/proj-4.8.0.tar.gz'
|
||||||
|
|
||||||
|
curl -L $SOURCE_TARBALL | tar zx
|
||||||
|
|
||||||
|
cd proj-4.8.0
|
||||||
|
./configure --prefix=$OUT_PREFIX &&
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
cd ..
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building PyPy..."
|
||||||
|
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy-2.5.0-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy-2.5.0-linux64/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building PyPy..."
|
||||||
|
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy-2.5.1-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy-2.5.1-linux64/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building PyPy..."
|
||||||
|
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy-2.6.0-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy-2.6.0-linux64/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building PyPy..."
|
||||||
|
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy-2.6.1-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy-2.6.1-linux64/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building PyPy..."
|
||||||
|
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy-4.0.0-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy-4.0.0-linux64/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building PyPy..."
|
||||||
|
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy-4.0.1-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy-4.0.1-linux64/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building PyPy..."
|
||||||
|
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy-5.0.0-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy-5.0.0-linux64/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
# NOTICE: This formula only works for the cedar-14 stack, not cedar.
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building PyPy..."
|
||||||
|
SOURCE_TARBALL='https://bitbucket.org/pypy/pypy/downloads/pypy-5.0.1-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy-5.0.1-linux64/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy $OUT_PREFIX/bin/python
|
||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.4.4/Python-2.4.4.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.4.4/Python-2.4.4.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.4.4 src
|
mv Python-2.4.4 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.4.5/Python-2.4.5.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.4.5/Python-2.4.5.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.4.5 src
|
mv Python-2.4.5 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.4.6/Python-2.4.6.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.4.6/Python-2.4.6.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.4.6 src
|
mv Python-2.4.6 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.5/Python-2.5.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.5/Python-2.5.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.5 src
|
mv Python-2.5 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.5.1/Python-2.5.1.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.5.1/Python-2.5.1.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.5.1 src
|
mv Python-2.5.1 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.5.2/Python-2.5.2.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.5.2/Python-2.5.2.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.5.2 src
|
mv Python-2.5.2 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.5.3/Python-2.5.3.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.5.3/Python-2.5.3.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.5.3 src
|
mv Python-2.5.3 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.5.4/Python-2.5.4.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.5.4/Python-2.5.4.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.5.4 src
|
mv Python-2.5.4 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.5.5/Python-2.5.5.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.5.5/Python-2.5.5.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.5.5 src
|
mv Python-2.5.5 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.5.6/Python-2.5.6.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.5.6/Python-2.5.6.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.5.6 src
|
mv Python-2.5.6 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://www.python.org/ftp/python/2.6/Python-2.6.tar.bz2'
|
SOURCE_TARBALL='https://www.python.org/ftp/python/2.6/Python-2.6.tar.bz2'
|
||||||
curl -L $SOURCE_TARBALL | tar jx
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
mv Python-2.6 src
|
mv Python-2.6 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.6.1/Python-2.6.1.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.6.1/Python-2.6.1.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.6.1 src
|
mv Python-2.6.1 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.6.2/Python-2.6.2.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.6.2/Python-2.6.2.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.6.2 src
|
mv Python-2.6.2 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.6.3/Python-2.6.3.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.6.3/Python-2.6.3.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.6.3 src
|
mv Python-2.6.3 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.6.4/Python-2.6.4.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.6.4/Python-2.6.4.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.6.4 src
|
mv Python-2.6.4 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.6.5/Python-2.6.5.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.6.5/Python-2.6.5.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.6.5 src
|
mv Python-2.6.5 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.6.6/Python-2.6.6.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.6.6/Python-2.6.6.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.6.6 src
|
mv Python-2.6.6 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.6.7/Python-2.6.7.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.6.7/Python-2.6.7.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.6.7 src
|
mv Python-2.6.7 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.6.8/Python-2.6.8.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.6.8/Python-2.6.8.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.6.8 src
|
mv Python-2.6.8 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ OUT_PREFIX=$1
|
|||||||
unset LANG PYTHONHOME PYTHONPATH
|
unset LANG PYTHONHOME PYTHONPATH
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.6.9/Python-2.6.9.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.6.9/Python-2.6.9.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.6.9 src
|
mv Python-2.6.9 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7/Python-2.7.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7/Python-2.7.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7 src
|
mv Python-2.7 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7.1/Python-2.7.1.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7.1/Python-2.7.1.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7.1 src
|
mv Python-2.7.1 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/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
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/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
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='https://www.python.org/ftp/python/2.7.11/Python-2.7.11rc1.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.11rc1 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||||
|
make
|
||||||
|
make install
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7.2/Python-2.7.2.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7.2/Python-2.7.2.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7.2 src
|
mv Python-2.7.2 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7.3/Python-2.7.3.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7.3/Python-2.7.3.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7.3 src
|
mv Python-2.7.3 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7.4/Python-2.7.4.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7.4/Python-2.7.4.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7.4 src
|
mv Python-2.7.4 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7.5/Python-2.7.5.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7.5/Python-2.7.5.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7.5 src
|
mv Python-2.7.5 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7.6/Python-2.7.6.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7.6/Python-2.7.6.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7.6 src
|
mv Python-2.7.6 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7.7/Python-2.7.7.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7.7/Python-2.7.7.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7.7 src
|
mv Python-2.7.7 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7.7/Python-2.7.7.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7.7/Python-2.7.7.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7.7 src
|
mv Python-2.7.7 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7.8/Python-2.7.8.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7.8/Python-2.7.8.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7.8 src
|
mv Python-2.7.8 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7.8/Python-2.7.8.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7.8/Python-2.7.8.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7.8 src
|
mv Python-2.7.8 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/2.7.9/Python-2.7.9.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/2.7.9/Python-2.7.9.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-2.7.9 src
|
mv Python-2.7.9 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.1/Python-3.1.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.1/Python-3.1.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.1 src
|
mv Python-3.1 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.1.1/Python-3.1.1.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.1.1/Python-3.1.1.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.1.1 src
|
mv Python-3.1.1 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.1.2/Python-3.1.2.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.1.2/Python-3.1.2.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.1.2 src
|
mv Python-3.1.2 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.1.3/Python-3.1.3.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.1.3/Python-3.1.3.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.1.3 src
|
mv Python-3.1.3 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.1.4/Python-3.1.4.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.1.4/Python-3.1.4.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.1.4 src
|
mv Python-3.1.4 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.1.5/Python-3.1.5.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.1.5/Python-3.1.5.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.1.5 src
|
mv Python-3.1.5 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.2/Python-3.2.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.2/Python-3.2.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.2 src
|
mv Python-3.2 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.2.1/Python-3.2.1.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.2.1/Python-3.2.1.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.2.1 src
|
mv Python-3.2.1 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.2.2/Python-3.2.2.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.2.2/Python-3.2.2.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.2.2 src
|
mv Python-3.2.2 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.2.3/Python-3.2.3.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.2.3/Python-3.2.3.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.2.3 src
|
mv Python-3.2.3 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.2.4/Python-3.2.4.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.2.4/Python-3.2.4.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.2.4 src
|
mv Python-3.2.4 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.2.5/Python-3.2.5.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.2.5/Python-3.2.5.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.2.5 src
|
mv Python-3.2.5 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.3.0/Python-3.3.0.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.3.0/Python-3.3.0.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.3.0 src
|
mv Python-3.3.0 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.3.1/Python-3.3.1.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.3.1/Python-3.3.1.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.3.1 src
|
mv Python-3.3.1 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.3.2/Python-3.3.2.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.3.2/Python-3.3.2.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.3.2 src
|
mv Python-3.3.2 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.3.3/Python-3.3.3.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.3.3/Python-3.3.3.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.3.3 src
|
mv Python-3.3.3 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.3.4/Python-3.3.4.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.3.4/Python-3.3.4.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.3.4 src
|
mv Python-3.3.4 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.3.5/Python-3.3.5.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.3.5/Python-3.3.5.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.3.5 src
|
mv Python-3.3.5 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.3.6/Python-3.3.6.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.3.6/Python-3.3.6.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.3.6 src
|
mv Python-3.3.6 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.4.0/Python-3.4.0.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.4.0/Python-3.4.0.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.4.0 src
|
mv Python-3.4.0 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.4.1/Python-3.4.1.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.4.1/Python-3.4.1.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.4.1 src
|
mv Python-3.4.1 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
OUT_PREFIX=$1
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
echo "Building Python..."
|
echo "Building Python..."
|
||||||
SOURCE_TARBALL='http://python.org/ftp/python/3.4.2/Python-3.4.2.tgz'
|
SOURCE_TARBALL='https://python.org/ftp/python/3.4.2/Python-3.4.2.tgz'
|
||||||
curl -L $SOURCE_TARBALL | tar xz
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
mv Python-3.4.2 src
|
mv Python-3.4.2 src
|
||||||
cd src
|
cd src
|
||||||
|
|||||||
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.4.3/Python-3.4.3.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.4.3 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --with-ensurepip=no --enable-shared
|
||||||
|
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.5.0/Python-3.5.0.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.5.0 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --with-ensurepip=no --enable-shared
|
||||||
|
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.5.1/Python-3.5.1.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.5.1 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
|
|
||||||
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
+9
-7
@@ -2,7 +2,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
"""Usage:
|
"""Usage:
|
||||||
pip-diff (--fresh | --stale) <reqfile1> <reqfile2>
|
pip-diff (--fresh | --stale) <reqfile1> <reqfile2> [--exclude <package>...]
|
||||||
pip-diff (-h | --help)
|
pip-diff (-h | --help)
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
@@ -41,7 +41,7 @@ class Requirements(object):
|
|||||||
self.requirements.append(requirement.req)
|
self.requirements.append(requirement.req)
|
||||||
|
|
||||||
|
|
||||||
def diff(self, requirements, ignore_versions=False):
|
def diff(self, requirements, ignore_versions=False, excludes=None):
|
||||||
r1 = self
|
r1 = self
|
||||||
r2 = requirements
|
r2 = requirements
|
||||||
results = {'fresh': [], 'stale': []}
|
results = {'fresh': [], 'stale': []}
|
||||||
@@ -55,7 +55,7 @@ class Requirements(object):
|
|||||||
for req in r2.requirements:
|
for req in r2.requirements:
|
||||||
r = req.project_name if ignore_versions else req
|
r = req.project_name if ignore_versions else req
|
||||||
|
|
||||||
if r not in other_reqs:
|
if r not in other_reqs and r not in excludes:
|
||||||
results['fresh'].append(req)
|
results['fresh'].append(req)
|
||||||
|
|
||||||
# Generate stale packages.
|
# Generate stale packages.
|
||||||
@@ -67,7 +67,7 @@ class Requirements(object):
|
|||||||
for req in r1.requirements:
|
for req in r1.requirements:
|
||||||
r = req.project_name if ignore_versions else req
|
r = req.project_name if ignore_versions else req
|
||||||
|
|
||||||
if r not in other_reqs:
|
if r not in other_reqs and r not in excludes:
|
||||||
results['stale'].append(req)
|
results['stale'].append(req)
|
||||||
|
|
||||||
return results
|
return results
|
||||||
@@ -76,9 +76,10 @@ class Requirements(object):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def diff(r1, r2, include_fresh=False, include_stale=False):
|
def diff(r1, r2, include_fresh=False, include_stale=False, excludes=None):
|
||||||
|
|
||||||
include_versions = True if include_stale else False
|
include_versions = True if include_stale else False
|
||||||
|
excludes = excludes if len(excludes) else []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
r1 = Requirements(r1)
|
r1 = Requirements(r1)
|
||||||
@@ -87,7 +88,7 @@ def diff(r1, r2, include_fresh=False, include_stale=False):
|
|||||||
print('There was a problem loading the given requirements files.')
|
print('There was a problem loading the given requirements files.')
|
||||||
exit(os.EX_NOINPUT)
|
exit(os.EX_NOINPUT)
|
||||||
|
|
||||||
results = r1.diff(r2, ignore_versions=True)
|
results = r1.diff(r2, ignore_versions=True, excludes=excludes)
|
||||||
|
|
||||||
if include_fresh:
|
if include_fresh:
|
||||||
for line in results['fresh']:
|
for line in results['fresh']:
|
||||||
@@ -106,7 +107,8 @@ def main():
|
|||||||
'r1': args['<reqfile1>'],
|
'r1': args['<reqfile1>'],
|
||||||
'r2': args['<reqfile2>'],
|
'r2': args['<reqfile2>'],
|
||||||
'include_fresh': args['--fresh'],
|
'include_fresh': args['--fresh'],
|
||||||
'include_stale': args['--stale']
|
'include_stale': args['--stale'],
|
||||||
|
'excludes': args['<package>']
|
||||||
}
|
}
|
||||||
|
|
||||||
diff(**kwargs)
|
diff(**kwargs)
|
||||||
|
|||||||
+315
@@ -0,0 +1,315 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import optparse
|
||||||
|
import warnings
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
|
||||||
|
from pip.exceptions import InstallationError, CommandError, PipError
|
||||||
|
from pip.utils import get_installed_distributions, get_prog
|
||||||
|
from pip.utils import deprecation
|
||||||
|
from pip.vcs import git, mercurial, subversion, bazaar # noqa
|
||||||
|
from pip.baseparser import ConfigOptionParser, UpdatingDefaultsHelpFormatter
|
||||||
|
from pip.commands import get_summaries, get_similar_commands
|
||||||
|
from pip.commands import commands_dict
|
||||||
|
from pip._vendor.requests.packages.urllib3.exceptions import (
|
||||||
|
InsecureRequestWarning,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# assignment for flake8 to be happy
|
||||||
|
|
||||||
|
# This fixes a peculiarity when importing via __import__ - as we are
|
||||||
|
# initialising the pip module, "from pip import cmdoptions" is recursive
|
||||||
|
# and appears not to work properly in that situation.
|
||||||
|
import pip.cmdoptions
|
||||||
|
cmdoptions = pip.cmdoptions
|
||||||
|
|
||||||
|
# The version as used in the setup.py and the docs conf.py
|
||||||
|
__version__ = "7.1.2"
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# Hide the InsecureRequestWArning from urllib3
|
||||||
|
warnings.filterwarnings("ignore", category=InsecureRequestWarning)
|
||||||
|
|
||||||
|
|
||||||
|
def autocomplete():
|
||||||
|
"""Command and option completion for the main option parser (and options)
|
||||||
|
and its subcommands (and options).
|
||||||
|
|
||||||
|
Enable by sourcing one of the completion shell scripts (bash or zsh).
|
||||||
|
"""
|
||||||
|
# Don't complete if user hasn't sourced bash_completion file.
|
||||||
|
if 'PIP_AUTO_COMPLETE' not in os.environ:
|
||||||
|
return
|
||||||
|
cwords = os.environ['COMP_WORDS'].split()[1:]
|
||||||
|
cword = int(os.environ['COMP_CWORD'])
|
||||||
|
try:
|
||||||
|
current = cwords[cword - 1]
|
||||||
|
except IndexError:
|
||||||
|
current = ''
|
||||||
|
|
||||||
|
subcommands = [cmd for cmd, summary in get_summaries()]
|
||||||
|
options = []
|
||||||
|
# subcommand
|
||||||
|
try:
|
||||||
|
subcommand_name = [w for w in cwords if w in subcommands][0]
|
||||||
|
except IndexError:
|
||||||
|
subcommand_name = None
|
||||||
|
|
||||||
|
parser = create_main_parser()
|
||||||
|
# subcommand options
|
||||||
|
if subcommand_name:
|
||||||
|
# special case: 'help' subcommand has no options
|
||||||
|
if subcommand_name == 'help':
|
||||||
|
sys.exit(1)
|
||||||
|
# special case: list locally installed dists for uninstall command
|
||||||
|
if subcommand_name == 'uninstall' and not current.startswith('-'):
|
||||||
|
installed = []
|
||||||
|
lc = current.lower()
|
||||||
|
for dist in get_installed_distributions(local_only=True):
|
||||||
|
if dist.key.startswith(lc) and dist.key not in cwords[1:]:
|
||||||
|
installed.append(dist.key)
|
||||||
|
# if there are no dists installed, fall back to option completion
|
||||||
|
if installed:
|
||||||
|
for dist in installed:
|
||||||
|
print(dist)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
subcommand = commands_dict[subcommand_name]()
|
||||||
|
options += [(opt.get_opt_string(), opt.nargs)
|
||||||
|
for opt in subcommand.parser.option_list_all
|
||||||
|
if opt.help != optparse.SUPPRESS_HELP]
|
||||||
|
|
||||||
|
# filter out previously specified options from available options
|
||||||
|
prev_opts = [x.split('=')[0] for x in cwords[1:cword - 1]]
|
||||||
|
options = [(x, v) for (x, v) in options if x not in prev_opts]
|
||||||
|
# filter options by current input
|
||||||
|
options = [(k, v) for k, v in options if k.startswith(current)]
|
||||||
|
for option in options:
|
||||||
|
opt_label = option[0]
|
||||||
|
# append '=' to options which require args
|
||||||
|
if option[1]:
|
||||||
|
opt_label += '='
|
||||||
|
print(opt_label)
|
||||||
|
else:
|
||||||
|
# show main parser options only when necessary
|
||||||
|
if current.startswith('-') or current.startswith('--'):
|
||||||
|
opts = [i.option_list for i in parser.option_groups]
|
||||||
|
opts.append(parser.option_list)
|
||||||
|
opts = (o for it in opts for o in it)
|
||||||
|
|
||||||
|
subcommands += [i.get_opt_string() for i in opts
|
||||||
|
if i.help != optparse.SUPPRESS_HELP]
|
||||||
|
|
||||||
|
print(' '.join([x for x in subcommands if x.startswith(current)]))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def create_main_parser():
|
||||||
|
parser_kw = {
|
||||||
|
'usage': '\n%prog <command> [options]',
|
||||||
|
'add_help_option': False,
|
||||||
|
'formatter': UpdatingDefaultsHelpFormatter(),
|
||||||
|
'name': 'global',
|
||||||
|
'prog': get_prog(),
|
||||||
|
}
|
||||||
|
|
||||||
|
parser = ConfigOptionParser(**parser_kw)
|
||||||
|
parser.disable_interspersed_args()
|
||||||
|
|
||||||
|
pip_pkg_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
parser.version = 'pip %s from %s (python %s)' % (
|
||||||
|
__version__, pip_pkg_dir, sys.version[:3])
|
||||||
|
|
||||||
|
# add the general options
|
||||||
|
gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser)
|
||||||
|
parser.add_option_group(gen_opts)
|
||||||
|
|
||||||
|
parser.main = True # so the help formatter knows
|
||||||
|
|
||||||
|
# create command listing for description
|
||||||
|
command_summaries = get_summaries()
|
||||||
|
description = [''] + ['%-27s %s' % (i, j) for i, j in command_summaries]
|
||||||
|
parser.description = '\n'.join(description)
|
||||||
|
|
||||||
|
return parser
|
||||||
|
|
||||||
|
|
||||||
|
def parseopts(args):
|
||||||
|
parser = create_main_parser()
|
||||||
|
|
||||||
|
# Note: parser calls disable_interspersed_args(), so the result of this
|
||||||
|
# call is to split the initial args into the general options before the
|
||||||
|
# subcommand and everything else.
|
||||||
|
# For example:
|
||||||
|
# args: ['--timeout=5', 'install', '--user', 'INITools']
|
||||||
|
# general_options: ['--timeout==5']
|
||||||
|
# args_else: ['install', '--user', 'INITools']
|
||||||
|
general_options, args_else = parser.parse_args(args)
|
||||||
|
|
||||||
|
# --version
|
||||||
|
if general_options.version:
|
||||||
|
sys.stdout.write(parser.version)
|
||||||
|
sys.stdout.write(os.linesep)
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# pip || pip help -> print_help()
|
||||||
|
if not args_else or (args_else[0] == 'help' and len(args_else) == 1):
|
||||||
|
parser.print_help()
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# the subcommand name
|
||||||
|
cmd_name = args_else[0]
|
||||||
|
|
||||||
|
if cmd_name not in commands_dict:
|
||||||
|
guess = get_similar_commands(cmd_name)
|
||||||
|
|
||||||
|
msg = ['unknown command "%s"' % cmd_name]
|
||||||
|
if guess:
|
||||||
|
msg.append('maybe you meant "%s"' % guess)
|
||||||
|
|
||||||
|
raise CommandError(' - '.join(msg))
|
||||||
|
|
||||||
|
# all the args without the subcommand
|
||||||
|
cmd_args = args[:]
|
||||||
|
cmd_args.remove(cmd_name)
|
||||||
|
|
||||||
|
return cmd_name, cmd_args
|
||||||
|
|
||||||
|
|
||||||
|
def check_isolated(args):
|
||||||
|
isolated = False
|
||||||
|
|
||||||
|
if "--isolated" in args:
|
||||||
|
isolated = True
|
||||||
|
|
||||||
|
return isolated
|
||||||
|
|
||||||
|
|
||||||
|
def main(args=None):
|
||||||
|
if args is None:
|
||||||
|
args = sys.argv[1:]
|
||||||
|
|
||||||
|
# Enable our Deprecation Warnings
|
||||||
|
for deprecation_warning in deprecation.DEPRECATIONS:
|
||||||
|
warnings.simplefilter("default", deprecation_warning)
|
||||||
|
|
||||||
|
# Configure our deprecation warnings to be sent through loggers
|
||||||
|
deprecation.install_warning_logger()
|
||||||
|
|
||||||
|
autocomplete()
|
||||||
|
|
||||||
|
try:
|
||||||
|
cmd_name, cmd_args = parseopts(args)
|
||||||
|
except PipError as exc:
|
||||||
|
sys.stderr.write("ERROR: %s" % exc)
|
||||||
|
sys.stderr.write(os.linesep)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
command = commands_dict[cmd_name](isolated=check_isolated(cmd_args))
|
||||||
|
return command.main(cmd_args)
|
||||||
|
|
||||||
|
|
||||||
|
# ###########################################################
|
||||||
|
# # Writing freeze files
|
||||||
|
|
||||||
|
class FrozenRequirement(object):
|
||||||
|
|
||||||
|
def __init__(self, name, req, editable, comments=()):
|
||||||
|
self.name = name
|
||||||
|
self.req = req
|
||||||
|
self.editable = editable
|
||||||
|
self.comments = comments
|
||||||
|
|
||||||
|
_rev_re = re.compile(r'-r(\d+)$')
|
||||||
|
_date_re = re.compile(r'-(20\d\d\d\d\d\d)$')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_dist(cls, dist, dependency_links, find_tags=False):
|
||||||
|
location = os.path.normcase(os.path.abspath(dist.location))
|
||||||
|
comments = []
|
||||||
|
from pip.vcs import vcs, get_src_requirement
|
||||||
|
if vcs.get_backend_name(location):
|
||||||
|
editable = True
|
||||||
|
try:
|
||||||
|
req = get_src_requirement(dist, location, find_tags)
|
||||||
|
except InstallationError as exc:
|
||||||
|
logger.warning(
|
||||||
|
"Error when trying to get requirement for VCS system %s, "
|
||||||
|
"falling back to uneditable format", exc
|
||||||
|
)
|
||||||
|
req = None
|
||||||
|
if req is None:
|
||||||
|
logger.warning(
|
||||||
|
'Could not determine repository location of %s', location
|
||||||
|
)
|
||||||
|
comments.append(
|
||||||
|
'## !! Could not determine repository location'
|
||||||
|
)
|
||||||
|
req = dist.as_requirement()
|
||||||
|
editable = False
|
||||||
|
else:
|
||||||
|
editable = False
|
||||||
|
req = dist.as_requirement()
|
||||||
|
specs = req.specs
|
||||||
|
assert len(specs) == 1 and specs[0][0] in ["==", "==="], \
|
||||||
|
'Expected 1 spec with == or ===; specs = %r; dist = %r' % \
|
||||||
|
(specs, dist)
|
||||||
|
version = specs[0][1]
|
||||||
|
ver_match = cls._rev_re.search(version)
|
||||||
|
date_match = cls._date_re.search(version)
|
||||||
|
if ver_match or date_match:
|
||||||
|
svn_backend = vcs.get_backend('svn')
|
||||||
|
if svn_backend:
|
||||||
|
svn_location = svn_backend().get_location(
|
||||||
|
dist,
|
||||||
|
dependency_links,
|
||||||
|
)
|
||||||
|
if not svn_location:
|
||||||
|
logger.warning(
|
||||||
|
'Warning: cannot find svn location for %s', req)
|
||||||
|
comments.append(
|
||||||
|
'## FIXME: could not find svn URL in dependency_links '
|
||||||
|
'for this package:'
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
comments.append(
|
||||||
|
'# Installing as editable to satisfy requirement %s:' %
|
||||||
|
req
|
||||||
|
)
|
||||||
|
if ver_match:
|
||||||
|
rev = ver_match.group(1)
|
||||||
|
else:
|
||||||
|
rev = '{%s}' % date_match.group(1)
|
||||||
|
editable = True
|
||||||
|
req = '%s@%s#egg=%s' % (
|
||||||
|
svn_location,
|
||||||
|
rev,
|
||||||
|
cls.egg_name(dist)
|
||||||
|
)
|
||||||
|
return cls(dist.project_name, req, editable, comments)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def egg_name(dist):
|
||||||
|
name = dist.egg_name()
|
||||||
|
match = re.search(r'-py\d\.\d$', name)
|
||||||
|
if match:
|
||||||
|
name = name[:match.start()]
|
||||||
|
return name
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
req = self.req
|
||||||
|
if self.editable:
|
||||||
|
req = '-e %s' % req
|
||||||
|
return '\n'.join(list(self.comments) + [str(req)]) + '\n'
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main())
|
||||||
Vendored
+19
@@ -0,0 +1,19 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# If we are running from a wheel, add the wheel to sys.path
|
||||||
|
# This allows the usage python pip-*.whl/pip install pip-*.whl
|
||||||
|
if __package__ == '':
|
||||||
|
# __file__ is pip-*.whl/pip/__main__.py
|
||||||
|
# first dirname call strips of '/__main__.py', second strips off '/pip'
|
||||||
|
# Resulting path is the name of the wheel itself
|
||||||
|
# Add that to sys.path so we can import pip
|
||||||
|
path = os.path.dirname(os.path.dirname(__file__))
|
||||||
|
sys.path.insert(0, path)
|
||||||
|
|
||||||
|
import pip # noqa
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(pip.main())
|
||||||
+40
@@ -0,0 +1,40 @@
|
|||||||
|
Policy
|
||||||
|
======
|
||||||
|
|
||||||
|
Vendored libraries should not be modified except as required to actually
|
||||||
|
successfully vendor them.
|
||||||
|
|
||||||
|
|
||||||
|
Modifications
|
||||||
|
=============
|
||||||
|
|
||||||
|
* html5lib has been modified to import six from pip._vendor
|
||||||
|
* pkg_resources has been modified to import _markerlib from pip._vendor
|
||||||
|
* markerlib has been modified to import its API from pip._vendor
|
||||||
|
* CacheControl has been modified to import it's dependencies from pip._vendor
|
||||||
|
* progress has been modified to not use unicode literals for support for Python 3.2
|
||||||
|
|
||||||
|
|
||||||
|
_markerlib and pkg_resources
|
||||||
|
============================
|
||||||
|
|
||||||
|
_markerlib and pkg_resources has been pulled in from setuptools 18.2
|
||||||
|
|
||||||
|
|
||||||
|
Note to Downstream Distributors
|
||||||
|
===============================
|
||||||
|
|
||||||
|
Libraries are vendored/bundled inside of this directory in order to prevent
|
||||||
|
end users from needing to manually install packages if they accidently remove
|
||||||
|
something that pip depends on.
|
||||||
|
|
||||||
|
All bundled packages exist in the ``pip._vendor`` namespace, and the versions
|
||||||
|
(fetched from PyPI) that we use are located in ``vendor.txt``. If you wish
|
||||||
|
to debundle these you can do so by either deleting everything in
|
||||||
|
``pip/_vendor`` **except** for ``pip/_vendor/__init__.py`` or by running
|
||||||
|
``PIP_NO_VENDOR_FOR_DOWNSTREAM=1 setup.py install``. No other changes should
|
||||||
|
be required as the ``pip/_vendor/__init__.py`` file will alias the "real"
|
||||||
|
names (such as ``import six``) to the bundled names (such as
|
||||||
|
``import pip._vendor.six``) automatically. Alternatively if you delete the
|
||||||
|
entire ``pip._vendor`` you will need to adjust imports that import from those
|
||||||
|
locations.
|
||||||
+66
@@ -0,0 +1,66 @@
|
|||||||
|
"""
|
||||||
|
pip._vendor is for vendoring dependencies of pip to prevent needing pip to
|
||||||
|
depend on something external.
|
||||||
|
|
||||||
|
Files inside of pip._vendor should be considered immutable and should only be
|
||||||
|
updated to versions from upstream.
|
||||||
|
"""
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import glob
|
||||||
|
import os.path
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Downstream redistributors which have debundled our dependencies should also
|
||||||
|
# patch this value to be true. This will trigger the additional patching
|
||||||
|
# to cause things like "six" to be available as pip.
|
||||||
|
DEBUNDLED = False
|
||||||
|
|
||||||
|
# By default, look in this directory for a bunch of .whl files which we will
|
||||||
|
# add to the beginning of sys.path before attempting to import anything. This
|
||||||
|
# is done to support downstream re-distributors like Debian and Fedora who
|
||||||
|
# wish to create their own Wheels for our dependencies to aid in debundling.
|
||||||
|
WHEEL_DIR = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
|
||||||
|
# Define a small helper function to alias our vendored modules to the real ones
|
||||||
|
# if the vendored ones do not exist. This idea of this was taken from
|
||||||
|
# https://github.com/kennethreitz/requests/pull/2567.
|
||||||
|
def vendored(modulename):
|
||||||
|
vendored_name = "{0}.{1}".format(__name__, modulename)
|
||||||
|
|
||||||
|
try:
|
||||||
|
__import__(vendored_name, globals(), locals(), level=0)
|
||||||
|
except ImportError:
|
||||||
|
__import__(modulename, globals(), locals(), level=0)
|
||||||
|
sys.modules[vendored_name] = sys.modules[modulename]
|
||||||
|
base, head = vendored_name.rsplit(".", 1)
|
||||||
|
setattr(sys.modules[base], head, sys.modules[modulename])
|
||||||
|
|
||||||
|
|
||||||
|
# If we're operating in a debundled setup, then we want to go ahead and trigger
|
||||||
|
# the aliasing of our vendored libraries as well as looking for wheels to add
|
||||||
|
# to our sys.path. This will cause all of this code to be a no-op typically
|
||||||
|
# however downstream redistributors can enable it in a consistent way across
|
||||||
|
# all platforms.
|
||||||
|
if DEBUNDLED:
|
||||||
|
# Actually look inside of WHEEL_DIR to find .whl files and add them to the
|
||||||
|
# front of our sys.path.
|
||||||
|
sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path
|
||||||
|
|
||||||
|
# Actually alias all of our vendored dependencies.
|
||||||
|
vendored("cachecontrol")
|
||||||
|
vendored("colorama")
|
||||||
|
vendored("distlib")
|
||||||
|
vendored("html5lib")
|
||||||
|
vendored("lockfile")
|
||||||
|
vendored("six")
|
||||||
|
vendored("six.moves")
|
||||||
|
vendored("six.moves.urllib")
|
||||||
|
vendored("packaging")
|
||||||
|
vendored("packaging.version")
|
||||||
|
vendored("packaging.specifiers")
|
||||||
|
vendored("pkg_resources")
|
||||||
|
vendored("progress")
|
||||||
|
vendored("retrying")
|
||||||
|
vendored("requests")
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
try:
|
||||||
|
import ast
|
||||||
|
from pip._vendor._markerlib.markers import default_environment, compile, interpret
|
||||||
|
except ImportError:
|
||||||
|
if 'ast' in globals():
|
||||||
|
raise
|
||||||
|
def default_environment():
|
||||||
|
return {}
|
||||||
|
def compile(marker):
|
||||||
|
def marker_fn(environment=None, override=None):
|
||||||
|
# 'empty markers are True' heuristic won't install extra deps.
|
||||||
|
return not marker.strip()
|
||||||
|
marker_fn.__doc__ = marker
|
||||||
|
return marker_fn
|
||||||
|
def interpret(marker, environment=None, override=None):
|
||||||
|
return compile(marker)()
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user