mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
Compare commits
726 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a3ed9c7155 | |||
| 8db1f07fba | |||
| 17081d0328 | |||
| 9a6fa0478a | |||
| 573ded6d41 | |||
| b4ec35433a | |||
| cf1148f0a8 | |||
| a0649b1e50 | |||
| 2f2fd24421 | |||
| f754ae16bb | |||
| cef1be80a5 | |||
| c0571d86bf | |||
| d82eddca03 | |||
| 119e8145c3 | |||
| 99dae0f671 | |||
| f54dfff8a9 | |||
| c9760ae0ee | |||
| 98ff1670b3 | |||
| bdd466f838 | |||
| 324ebc9223 | |||
| 42ec6d8701 | |||
| 19513067bb | |||
| 753c912ecc | |||
| 4e8c469ec7 | |||
| 852723f867 | |||
| 94514a8179 | |||
| 7d57744c0a | |||
| a41ddf6bd1 | |||
| 197b7bae3f | |||
| f468739cfb | |||
| 555d5bd2be | |||
| 0a4d32c8a5 | |||
| 1a1cedfc21 | |||
| d35ee2c14c | |||
| 554a8bbae6 | |||
| 6572ad3d44 | |||
| 35cabaeebc | |||
| 300285a92d | |||
| 7a6f1eb010 | |||
| 66d754978e | |||
| 9c222a9350 | |||
| 7f4273f47f | |||
| dd707c21e3 | |||
| 7833743f96 | |||
| 5a9155e311 | |||
| 857c47ad66 | |||
| 87cf6073dc | |||
| 36dd089808 | |||
| c58f52e06e | |||
| 265a95d3b6 | |||
| 290c1377fb | |||
| 8e42040d01 | |||
| d8755e6791 | |||
| 364a1fafd9 | |||
| 251b7f7960 | |||
| 6d491f9f2b | |||
| 7cfbce82fd | |||
| d520ca4291 | |||
| bf252422fc | |||
| d7874d583b | |||
| d32dc82e1c | |||
| bd048d50b5 | |||
| 26b2eeee20 | |||
| e527457ba3 | |||
| 1b7bd02bf2 | |||
| de9b0b9383 | |||
| 991f4126d7 | |||
| 076a457ad9 | |||
| 264f74d159 | |||
| 9f89c4e744 | |||
| 8d2788094b | |||
| e2f4fd442a | |||
| 1bccc03b30 | |||
| adac27fa9c | |||
| d1c30fd24b | |||
| a1cfa41cb2 | |||
| 57e9bb0054 | |||
| 8e34179b1c | |||
| c03cb26961 | |||
| 127ff904d6 | |||
| 6c53bd1cd6 | |||
| d8307c29ba | |||
| f526673903 | |||
| 85f10b7d59 | |||
| bbbadc83e4 | |||
| 9c2b033042 | |||
| e427d5111e | |||
| ab724138c1 | |||
| e36b580615 | |||
| f8a1761165 | |||
| 521bb00247 | |||
| 5cd4245412 | |||
| 40daa84ccc | |||
| f0ea766900 | |||
| 89125df805 | |||
| 83ee7d90d7 | |||
| bb87f5ed56 | |||
| 424e1c351d | |||
| 83bde7ccea | |||
| 7fab8ce2c2 | |||
| d4326fad0f | |||
| a0d4da00e6 | |||
| f72c34a5dd | |||
| 2bc41d20b8 | |||
| 3cce589cec | |||
| 70758edd49 | |||
| ba7a9cd565 | |||
| 37a7afbe2d | |||
| b0138c26e6 | |||
| d653377faf | |||
| 0b87419166 | |||
| d832b7425e | |||
| 2991dce623 | |||
| 28b67dd208 | |||
| 24f73fbc2d | |||
| ffd0bb57ee | |||
| 75870dd412 | |||
| 831d73e302 | |||
| 0cf2e2849d | |||
| 6ba8d47927 | |||
| af940b5390 | |||
| 819bc2da5b | |||
| 2dad2e73f3 | |||
| e550b32ea8 | |||
| 6af8d81086 | |||
| 0ed4089cb9 | |||
| f09191ec8b | |||
| aef7b65b95 | |||
| 5438aab121 | |||
| a259143c0b | |||
| 0896d6a0c4 | |||
| 39f2efe296 | |||
| d047f26ad4 | |||
| 998f996a32 | |||
| c620980e5a | |||
| 2983fcfbea | |||
| e3511e7202 | |||
| 692f040618 | |||
| 8645a965aa | |||
| 3a483865e8 | |||
| 6ea6a0ccaf | |||
| 6bc94eaf6e | |||
| 49e409cb64 | |||
| 2693de45c7 | |||
| 88f711b6e7 | |||
| a7976fc177 | |||
| 8a837a23e7 | |||
| f37597ad9d | |||
| 928a664544 | |||
| 9fb715ef1c | |||
| 3cff2e39fe | |||
| 653a5be104 | |||
| 67ade52e95 | |||
| ab3e365ff6 | |||
| 902672e934 | |||
| 6207b3506b | |||
| 5446d448fd | |||
| 366def6c16 | |||
| a84fc7a248 | |||
| e4aa40216b | |||
| 87d03e62d7 | |||
| 92b4f5e8aa | |||
| 19cd447b83 | |||
| 570182b6b7 | |||
| 0a6ed0de43 | |||
| 0b7a1fc14e | |||
| 2c69e3b98f | |||
| 86f43fa02a | |||
| 03b95247c3 | |||
| 0e8a11b836 | |||
| 4c9de740d2 | |||
| 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 | |||
| d8a75c56d0 | |||
| 27ce818f3d | |||
| f582b2f4fa | |||
| c46a779ea1 | |||
| 06a7d9e187 | |||
| ca773cf957 | |||
| 26b54b690c | |||
| 871d5b5935 | |||
| 0382c31225 | |||
| 4a856ff5b3 | |||
| e247704dfb | |||
| c8b031fafc | |||
| 68b740cce6 | |||
| e856e787aa | |||
| 7e4159e297 | |||
| d9a73b847e | |||
| 3dbeec8db1 | |||
| 8ec0b5f0dd | |||
| 3c2839147f | |||
| a51c162444 | |||
| 14096e0ca5 | |||
| 2631f5204b | |||
| f3b1e54df4 | |||
| 536b10b249 | |||
| b22aa3b3a7 | |||
| eb395a94f9 | |||
| b2597c45d8 | |||
| 1525c1fb3a | |||
| fd17f5a470 | |||
| ac923205d0 | |||
| 6617a3cac5 | |||
| 64a4f51e1b | |||
| 6305ed415a | |||
| 3dff0d48fe | |||
| 6f94b366f8 | |||
| 6bb89e6693 | |||
| 6252e80aa6 | |||
| b22ef82b4f | |||
| 129bced2dd | |||
| c82415733d | |||
| ee93719b79 | |||
| 361eb53257 | |||
| bf9fe3badf | |||
| 9178962b84 | |||
| 2b4a68c8c8 | |||
| f38eec962f | |||
| a313e66d93 | |||
| c755286323 | |||
| 0d219f5d2e | |||
| 28bdeb6f4b | |||
| 496a1ad7d8 | |||
| 57dec77718 | |||
| 4dc60cb4ca | |||
| f5f67653f8 | |||
| b7fd5915a5 | |||
| 72f7c510b9 | |||
| ac62aa01d5 | |||
| a727daa6ff | |||
| 2187855da2 | |||
| fb1ed99470 | |||
| be68853991 | |||
| c9d794dc76 | |||
| c1cc0910c5 | |||
| 61095f726d | |||
| 721d062421 | |||
| f38c90b1d5 | |||
| 8c0284dbe8 | |||
| f8f4facdca | |||
| e97f13395f | |||
| dc87fca814 | |||
| aafd7caf77 | |||
| ef964bfc1a | |||
| e5ae885ae1 | |||
| 2291255133 | |||
| d48294f940 | |||
| ef87cce5a9 | |||
| 63048e641d | |||
| 91aa427137 | |||
| 811c1ceeb6 | |||
| 8c2e95fb46 | |||
| d47fb9f718 | |||
| 4625eca277 | |||
| b2abb41a38 | |||
| b228d36041 | |||
| 7680aea223 | |||
| 771042a619 | |||
| b1f7713916 | |||
| 7b0c04b95b | |||
| 9f09c934bf | |||
| 88bad450fd | |||
| 7614f77431 | |||
| 761f27958a | |||
| 52347a0c98 | |||
| e2e97b774a | |||
| 4f0f97959f | |||
| 93f4eeb227 | |||
| ec769e00bb | |||
| ade975d48f | |||
| 16a07abd51 | |||
| 2bc071b323 | |||
| 3c07ec133e | |||
| 5c74244695 | |||
| 4e877e4f11 | |||
| 51ec7e3741 | |||
| 1f983fea40 | |||
| a26f0374ec | |||
| a0029a8411 | |||
| 2de3b6cf1c | |||
| fd19ec2c6a | |||
| 6aec3ed37a | |||
| 7f7f0f7e3d | |||
| dd210c9002 | |||
| 2ae4bd156f | |||
| 8740fcdbad | |||
| fb18948243 | |||
| e104d36785 | |||
| 1786231a49 | |||
| fa8e09ae9c | |||
| 2dd212d020 | |||
| 15acd305d1 | |||
| 5a65a39c5e | |||
| f18754f8f0 | |||
| e860234d05 | |||
| 50d61d2935 | |||
| 47c40ce086 | |||
| 2032942b61 | |||
| 0076fe4f53 | |||
| 9b18412ecc | |||
| 5f0ba6a371 | |||
| 1e2953b22e | |||
| e27ad6f919 | |||
| bfa7180b7b | |||
| 24ae4f9bda | |||
| cbb7512c9a | |||
| 869576e8ab | |||
| 9187dccb54 | |||
| eb6193d13e | |||
| a43eaaaf81 | |||
| c31574d7d6 | |||
| 3a42f565cb | |||
| 8f1942a9a5 | |||
| ab05b61638 | |||
| 5c4a414cb7 | |||
| 0e11dbadbf | |||
| 96cf5718b2 | |||
| d3f8351744 | |||
| 9d903fd92f | |||
| f77d8aaec3 | |||
| 4c2b867172 | |||
| 1bdf4a0c64 | |||
| c2b1465548 | |||
| f4471062a9 | |||
| f843a95343 | |||
| 1605422808 | |||
| 5ee2bdbd10 | |||
| f4c7160763 | |||
| 3e81740517 | |||
| a8e065969f | |||
| 688d167190 | |||
| 4553dafeca | |||
| 8aeceb00e4 | |||
| 022aa736ec | |||
| 2cad413958 | |||
| f5fb42e535 | |||
| 4995eeec41 | |||
| 0961b59420 | |||
| 1fdeedf112 | |||
| 43c7079a07 | |||
| 097f64721a | |||
| b3b6c78657 | |||
| fcfc2f8651 | |||
| 1f9b0bfe02 | |||
| 533def6b57 | |||
| 826193ef5a | |||
| 631aa4b356 | |||
| 067422b4b4 | |||
| 7ec8f12648 | |||
| 731a0cb0bf | |||
| ebd97e9b93 | |||
| 9fcf81c170 | |||
| 1f2cb16dbb | |||
| 827306728f | |||
| f6076cb7f0 | |||
| 694386e233 | |||
| f11928af11 | |||
| acda8f640a | |||
| 4ff3a5d818 | |||
| 314b729c8a | |||
| 9fb676aba9 | |||
| b91741d10d | |||
| f3787356b6 | |||
| def3136c85 | |||
| abb0c9b384 | |||
| 87b2891c1a | |||
| 52c34ef64f | |||
| 40bc836a55 | |||
| d2738ece19 | |||
| f758a5d738 | |||
| 63edc5d89b | |||
| 0db1584f21 | |||
| 1ed173f21d | |||
| b17f3f51f7 | |||
| 4f0556cce7 | |||
| b55a5e5ec8 | |||
| 68acbb064d | |||
| 92df76793f | |||
| 5cda51c7a5 | |||
| 659a406eb8 | |||
| 4cf2dd5b32 | |||
| 100a5ba0bc | |||
| ab16abaa88 | |||
| 989dd1dd2a | |||
| 0468ef22c4 | |||
| 6238994a17 | |||
| 7ba2fe66a0 | |||
| dfaec438d9 | |||
| aaeef59ff6 | |||
| 4d35f5129a | |||
| 84f610347c | |||
| 44bfda1320 | |||
| 330524adba | |||
| 85bddf8f00 | |||
| 7b0d891f4d | |||
| 84f0e2feba | |||
| 76309c35ec | |||
| 3f6b453c0a | |||
| 43dbb49103 | |||
| f08f93f347 | |||
| e0c852f4b9 | |||
| 15373996f4 | |||
| ff1e8da0cb | |||
| 99f7f5b9f1 | |||
| 656f390de8 | |||
| 42a7e79359 | |||
| bf084cc2ac | |||
| eaaba665bc | |||
| 94d311134c | |||
| 0d49ae9851 | |||
| a5c39384a8 | |||
| cb6bc30bc6 | |||
| 82c72a94d9 | |||
| f327afd364 | |||
| d94f4c5bbc | |||
| 8be04ea656 | |||
| de7c16d942 | |||
| 5ea843458a | |||
| 758941d12f | |||
| e01d5bc18b | |||
| 2c16539190 | |||
| ed79e61a2f | |||
| b7bcc69722 | |||
| e783556e6b | |||
| 5f96190eb5 | |||
| c579162ef9 | |||
| a5cca6de75 |
+2
-6
@@ -1,6 +1,2 @@
|
|||||||
language: python
|
sudo: false
|
||||||
python:
|
script: exit 0
|
||||||
- 2.7
|
|
||||||
script: make tests
|
|
||||||
notifications:
|
|
||||||
email: false
|
|
||||||
|
|||||||
+189
@@ -0,0 +1,189 @@
|
|||||||
|
# Python Buildpack Changelog
|
||||||
|
|
||||||
|
## 96
|
||||||
|
|
||||||
|
Bugfix.
|
||||||
|
|
||||||
|
## 95
|
||||||
|
|
||||||
|
Improved output support.
|
||||||
|
|
||||||
|
## v94
|
||||||
|
|
||||||
|
Improved support for PyPy.
|
||||||
|
|
||||||
|
## v93
|
||||||
|
|
||||||
|
Improved support for PyPy.
|
||||||
|
|
||||||
|
## v92
|
||||||
|
|
||||||
|
Improved cache functionality and fix egg-links regression.
|
||||||
|
|
||||||
|
## v91
|
||||||
|
|
||||||
|
Bugfix, rolled back to v88.
|
||||||
|
|
||||||
|
## v90
|
||||||
|
|
||||||
|
Bugfix.
|
||||||
|
|
||||||
|
## v89
|
||||||
|
|
||||||
|
Improved cache functionality and fix egg-links regression.
|
||||||
|
|
||||||
|
## v88
|
||||||
|
|
||||||
|
Fixed bug with editable pip installations.
|
||||||
|
|
||||||
|
## v87
|
||||||
|
|
||||||
|
Updated default Python 2.7.13.
|
||||||
|
|
||||||
|
- Python 2.7.13 uses UCS-4 build, more compatibile with linux wheels.
|
||||||
|
- Updated setuptools to v32.1.0.
|
||||||
|
|
||||||
|
## v86
|
||||||
|
|
||||||
|
Refactor and multi-buildpack compatibility.
|
||||||
|
|
||||||
|
## v85
|
||||||
|
|
||||||
|
Packaging fix.
|
||||||
|
|
||||||
|
## v84
|
||||||
|
|
||||||
|
Updated pip and setuptools.
|
||||||
|
|
||||||
|
- Updated pip to v9.0.1.
|
||||||
|
- Updated setuptools to v28.8.0.
|
||||||
|
|
||||||
|
## v83
|
||||||
|
|
||||||
|
Support for Heroku CI.
|
||||||
|
|
||||||
|
- Cffi support for argon2
|
||||||
|
|
||||||
|
## v82 (2016-08-22)
|
||||||
|
|
||||||
|
Update to library detection mechnisms (pip-pop).
|
||||||
|
|
||||||
|
- Updated setuptools to v25.5.0
|
||||||
|
|
||||||
|
## v81 (2016-06-28)
|
||||||
|
|
||||||
|
Updated default Python to 2.7.11.
|
||||||
|
|
||||||
|
- Updated pip to v8.1.2.
|
||||||
|
- Updated setuptools to v23.1.0.
|
||||||
|
|
||||||
|
## 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.
|
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
FROM heroku/heroku:16-build
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
ENV WORKSPACE_DIR=/app/builds
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y python-pip
|
||||||
|
|
||||||
|
# Install bob-builder application
|
||||||
|
RUN pip install bob-builder==0.0.5
|
||||||
|
|
||||||
|
COPY . /app
|
||||||
@@ -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:
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# These targets are not files
|
||||||
|
.PHONY: tests
|
||||||
|
|
||||||
|
tests:
|
||||||
|
./bin/test
|
||||||
|
|
||||||
|
tools:
|
||||||
|
git clone https://github.com/kennethreitz/pip-pop.git
|
||||||
|
mv pip-pop/bin/* vendor/pip-pop/
|
||||||
|
rm -fr pip-pop
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|

|
||||||
|
|
||||||
|
# Heroku Buildpack: Python
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Some Python packages with obscure C dependencies (e.g. scipy) are [not compatible](https://devcenter.heroku.com/articles/python-c-deps).
|
||||||
|
|
||||||
|
See it in Action
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Deploying a Python application couldn't be easier:
|
||||||
|
|
||||||
|
$ ls
|
||||||
|
Procfile requirements.txt web.py
|
||||||
|
|
||||||
|
$ heroku create --buildpack heroku/python
|
||||||
|
|
||||||
|
$ git push heroku master
|
||||||
|
...
|
||||||
|
-----> Python app detected
|
||||||
|
-----> Installing python-2.7.13
|
||||||
|
$ pip install -r requirements.txt
|
||||||
|
Collecting requests (from -r requirements.txt (line 1))
|
||||||
|
Downloading requests-2.12.4-py2.py3-none-any.whl (576KB)
|
||||||
|
Installing collected packages: requests
|
||||||
|
Successfully installed requests-2.12.4
|
||||||
|
|
||||||
|
-----> Discovering process types
|
||||||
|
Procfile declares types -> (none)
|
||||||
|
|
||||||
|
A `requirements.txt` file must be present at the root of your application's repository.
|
||||||
|
|
||||||
|
You can also specify the latest production release of this buildpack for upcoming builds of an existing application:
|
||||||
|
|
||||||
|
$ heroku buildpacks:set heroku/python
|
||||||
|
|
||||||
|
|
||||||
|
Specify a Python Runtime
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Specific versions of the Python runtime can be specified with a `runtime.txt` file:
|
||||||
|
|
||||||
|
$ cat runtime.txt
|
||||||
|
python-3.6.0
|
||||||
|
|
||||||
|
Runtime options include:
|
||||||
|
|
||||||
|
- `python-2.7.13`
|
||||||
|
- `python-3.6.0`
|
||||||
|
- `pypy-5.6.0` (unsupported, experimental)
|
||||||
|
- `pypy3-5.5.0` (unsupported, experimental)
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
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/).
|
|
||||||
|
|
||||||
[](http://travis-ci.org/heroku/heroku-buildpack-python)
|
|
||||||
|
|
||||||
Usage
|
|
||||||
-----
|
|
||||||
|
|
||||||
Example usage:
|
|
||||||
|
|
||||||
$ ls
|
|
||||||
Procfile requirements.txt web.py
|
|
||||||
|
|
||||||
$ heroku create --stack cedar --buildpack git://github.com/heroku/heroku-buildpack-python.git
|
|
||||||
|
|
||||||
$ git push heroku master
|
|
||||||
...
|
|
||||||
-----> Fetching custom git buildpack... done
|
|
||||||
-----> Python app detected
|
|
||||||
-----> No runtime.txt provided; assuming python-2.7.6.
|
|
||||||
-----> Preparing Python runtime (python-2.7.6)
|
|
||||||
-----> Installing Setuptools (2.1)
|
|
||||||
-----> Installing Pip (1.5.2)
|
|
||||||
-----> Installing dependencies using Pip (1.5.2)
|
|
||||||
Downloading/unpacking Flask==0.7.2 (from -r requirements.txt (line 1))
|
|
||||||
Downloading/unpacking Werkzeug>=0.6.1 (from Flask==0.7.2->-r requirements.txt (line 1))
|
|
||||||
Downloading/unpacking Jinja2>=2.4 (from Flask==0.7.2->-r requirements.txt (line 1))
|
|
||||||
Installing collected packages: Flask, Werkzeug, Jinja2
|
|
||||||
Successfully installed Flask Werkzeug Jinja2
|
|
||||||
Cleaning up...
|
|
||||||
|
|
||||||
You can also add it to upcoming builds of an existing application:
|
|
||||||
|
|
||||||
$ heroku config:add BUILDPACK_URL=git://github.com/heroku/heroku-buildpack-python.git
|
|
||||||
|
|
||||||
The buildpack will detect your app as Python if it has the file `requirements.txt` in the root.
|
|
||||||
|
|
||||||
It will use Pip to install your dependencies, vendoring a copy of the Python runtime into your slug.
|
|
||||||
|
|
||||||
Specify a Runtime
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
You can also provide arbitrary releases Python with a `runtime.txt` file.
|
|
||||||
|
|
||||||
$ cat runtime.txt
|
|
||||||
python-3.3.3
|
|
||||||
|
|
||||||
Runtime options include:
|
|
||||||
|
|
||||||
- python-2.7.6
|
|
||||||
- python-3.3.3
|
|
||||||
- pypy-1.9 (experimental)
|
|
||||||
|
|
||||||
Other [unsupported runtimes](https://github.com/kennethreitz/python-versions/tree/master/formula) are available as well.
|
|
||||||
+133
-150
@@ -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,103 +27,110 @@ 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"
|
|
||||||
|
|
||||||
DEFAULT_PYTHON_VERSION="python-2.7.6"
|
DEFAULT_PYTHON_VERSION="python-2.7.13"
|
||||||
|
DEFAULT_PYTHON_STACK="cedar-14"
|
||||||
PYTHON_EXE="/app/.heroku/python/bin/python"
|
PYTHON_EXE="/app/.heroku/python/bin/python"
|
||||||
PIP_VERSION="1.5.4"
|
PIP_VERSION="9.0.1"
|
||||||
SETUPTOOLS_VERSION="2.1"
|
SETUPTOOLS_VERSION="32.1.0"
|
||||||
|
|
||||||
|
# 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
|
||||||
LOGPLEX_KEY="t.b396af7f-ad75-4643-8b9e-ebb288acc624"
|
LOGPLEX_KEY="t.b90d9d29-5388-4908-9737-b4576af1d4ce"
|
||||||
export BPWATCH_STORE_PATH=$CACHE_DIR/bpwatch.json
|
export BPWATCH_STORE_PATH=$CACHE_DIR/bpwatch.json
|
||||||
BUILDPACK_VERSION=v28
|
BUILDPACK_VERSION=v28
|
||||||
|
|
||||||
|
# Setup pip-pop (pip-diff)
|
||||||
|
export PATH=$PATH:$ROOT_DIR/vendor/pip-pop
|
||||||
|
|
||||||
# Support Anvil Build_IDs
|
# Support Anvil Build_IDs
|
||||||
|
[ ! "$SLUG_ID" ] && SLUG_ID="defaultslug"
|
||||||
[ ! "$REQUEST_ID" ] && REQUEST_ID=$SLUG_ID
|
[ ! "$REQUEST_ID" ] && REQUEST_ID=$SLUG_ID
|
||||||
|
[ ! "$STACK" ] && STACK=$DEFAULT_PYTHON_STACK
|
||||||
|
|
||||||
# Sanitizing environment variables.
|
# Sanitizing environment variables.
|
||||||
unset GIT_DIR PYTHONHOME PYTHONPATH LD_LIBRARY_PATH LIBRARY_PATH
|
unset GIT_DIR PYTHONHOME PYTHONPATH
|
||||||
|
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
|
|
||||||
|
|
||||||
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.
|
||||||
APP_DIR='/app'
|
source $BIN_DIR/warnings
|
||||||
TMP_APP_DIR=$CACHE_DIR/tmp_app_dir
|
|
||||||
|
|
||||||
# Copy Anvil app dir to temporary storage...
|
# we need to put a bunch of symlinks in there later
|
||||||
bpwatch start anvil_appdir_stage
|
mkdir -p /app/.heroku
|
||||||
if [ "$SLUG_ID" ]; then
|
|
||||||
mkdir -p $TMP_APP_DIR
|
|
||||||
deep-mv $APP_DIR $TMP_APP_DIR
|
|
||||||
else
|
|
||||||
deep-rm $APP_DIR
|
|
||||||
fi
|
|
||||||
bpwatch stop anvil_appdir_stage
|
|
||||||
|
|
||||||
# Copy Application code in.
|
# Set up outputs under new context
|
||||||
bpwatch start appdir_stage
|
PROFILE_PATH="$BUILD_DIR/.profile.d/python.sh"
|
||||||
deep-mv $BUILD_DIR $APP_DIR
|
EXPORT_PATH="$BIN_DIR/../export"
|
||||||
bpwatch stop appdir_stage
|
GUNICORN_PROFILE_PATH="$BUILD_DIR/.profile.d/python.gunicorn.sh"
|
||||||
|
|
||||||
# Set new context.
|
# We'll need to send these statics to other scripts we `source`.
|
||||||
ORIG_BUILD_DIR=$BUILD_DIR
|
export BUILD_DIR CACHE_DIR BIN_DIR PROFILE_PATH EXPORT_PATH
|
||||||
BUILD_DIR=$APP_DIR
|
|
||||||
|
|
||||||
# Prepend proper path buildpack use.
|
# Prepend proper environment variables for Python use.
|
||||||
export PATH=$BUILD_DIR/.heroku/python/bin:$BUILD_DIR/.heroku/vendor/bin:$PATH
|
export PATH=/app/.heroku/python/bin:/app/.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
|
export C_INCLUDE_PATH=/app/.heroku/vendor/include:/app/.heroku/python/include:$C_INCLUDE_PATH
|
||||||
export CPLUS_INCLUDE_PATH=/app/.heroku/vendor/include:$BUILD_DIR/.heroku/vendor/include
|
export CPLUS_INCLUDE_PATH=/app/.heroku/vendor/include:/app/.heroku/python/include:$CPLUS_INCLUDE_PATH
|
||||||
export LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib
|
export LIBRARY_PATH=/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LIBRARY_PATH
|
||||||
export LD_LIBRARY_PATH=/app/.heroku/vendor/lib:$BUILD_DIR/.heroku/vendor/lib
|
export LD_LIBRARY_PATH=/app/.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
|
export PKG_CONFIG_PATH=/app/.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
|
||||||
puts-step "No requirements.txt provided; assuming dist package."
|
|
||||||
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)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Stack fallback for non-declared caches.
|
||||||
|
if [ -f $CACHE_DIR/.heroku/python-stack ]; then
|
||||||
|
CACHED_PYTHON_STACK=$(cat $CACHE_DIR/.heroku/python-stack)
|
||||||
|
else
|
||||||
|
CACHED_PYTHON_STACK=$STACK
|
||||||
|
fi
|
||||||
|
|
||||||
# If no runtime given, assume default version.
|
# If no runtime given, assume default version.
|
||||||
if [ ! -f runtime.txt ]; then
|
if [ ! -f runtime.txt ]; then
|
||||||
puts-step "No runtime.txt provided; assuming $DEFAULT_PYTHON_VERSION."
|
|
||||||
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.
|
||||||
@@ -124,148 +141,114 @@ 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
|
||||||
|
if [[ -d $CACHE_DIR/.heroku/src ]]; then
|
||||||
|
cp -R $CACHE_DIR/.heroku/src .heroku/ &> /dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
bpwatch stop restore_cache
|
bpwatch stop restore_cache
|
||||||
|
|
||||||
set +e
|
|
||||||
# Create set-aside `.heroku` folder.
|
|
||||||
mkdir .heroku &> /dev/null
|
|
||||||
set -e
|
|
||||||
|
|
||||||
mkdir -p $(dirname $PROFILE_PATH)
|
mkdir -p $(dirname $PROFILE_PATH)
|
||||||
|
mkdir -p /app/.heroku/src
|
||||||
|
|
||||||
set +e
|
if [[ $BUILD_DIR != '/app' ]]; then
|
||||||
PYTHON_VERSION=$(cat runtime.txt)
|
# python expects to reside in /app, so set up symlinks
|
||||||
|
# we will not remove these later so subsequent buildpacks can still invoke it
|
||||||
|
ln -nsf $BUILD_DIR/.heroku/python /app/.heroku/python
|
||||||
|
ln -nsf $BUILD_DIR/.heroku/vendor /app/.heroku/vendor
|
||||||
|
ln -nsf $BUILD_DIR/.heroku/venv /app/.heroku/venv
|
||||||
|
# Note: .heroku/src is copied in later.
|
||||||
|
fi
|
||||||
|
|
||||||
# Install Python.
|
# Install Python.
|
||||||
if [ -f .heroku/python-version ]; then
|
source $BIN_DIR/steps/python
|
||||||
if [ ! $(cat .heroku/python-version) = $PYTHON_VERSION ]; then
|
|
||||||
bpwatch start uninstall_python
|
|
||||||
puts-step "Found $(cat .heroku/python-version), removing."
|
|
||||||
rm -fr .heroku/python
|
|
||||||
bpwatch stop uninstall_python
|
|
||||||
else
|
|
||||||
SKIP_INSTALL=1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
# Sanity check for setuptools/distribute.
|
||||||
|
source $BIN_DIR/steps/setuptools
|
||||||
|
|
||||||
if [ ! "$SKIP_INSTALL" ]; then
|
# Uninstall removed dependencies with Pip.
|
||||||
bpwatch start install_python
|
source $BIN_DIR/steps/pip-uninstall
|
||||||
puts-step "Preparing Python runtime ($PYTHON_VERSION)"
|
|
||||||
curl http://envy-versions.s3.amazonaws.com/$PYTHON_VERSION.tar.bz2 -s | tar jx &> /dev/null
|
|
||||||
if [[ $? != 0 ]] ; then
|
|
||||||
puts-warn "Requested runtime ($PYTHON_VERSION) was not found."
|
|
||||||
puts-warn "Aborting. More info: https://devcenter.heroku.com/articles/python-support"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
mv python .heroku/python
|
|
||||||
bpwatch stop install_python
|
|
||||||
|
|
||||||
# Record for future reference.
|
# Mercurial support.
|
||||||
echo $PYTHON_VERSION > .heroku/python-version
|
source $BIN_DIR/steps/mercurial
|
||||||
FRESH_PYTHON=true
|
|
||||||
|
|
||||||
hash -r
|
|
||||||
else
|
|
||||||
puts-step "Using Python runtime ($PYTHON_VERSION)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If Pip isn't up to date:
|
|
||||||
if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_VERSION* ]]; then
|
|
||||||
WORKING_DIR=$(pwd)
|
|
||||||
|
|
||||||
bpwatch start prepare_environment
|
|
||||||
|
|
||||||
bpwatch start install_setuptools
|
|
||||||
# Prepare it for the real world
|
|
||||||
puts-step "Installing Setuptools ($SETUPTOOLS_VERSION)"
|
|
||||||
cd $ROOT_DIR/vendor/setuptools-$SETUPTOOLS_VERSION/
|
|
||||||
python setup.py install &> /dev/null
|
|
||||||
cd $WORKING_DIR
|
|
||||||
bpwatch stop install_setuptoools
|
|
||||||
|
|
||||||
bpwatch start install_pip
|
|
||||||
puts-step "Installing Pip ($PIP_VERSION)"
|
|
||||||
cd $ROOT_DIR/vendor/pip-$PIP_VERSION/
|
|
||||||
python setup.py install &> /dev/null
|
|
||||||
cd $WORKING_DIR
|
|
||||||
|
|
||||||
bpwatch stop install_pip
|
|
||||||
bpwatch stop prepare_environment
|
|
||||||
fi
|
|
||||||
|
|
||||||
set -e
|
|
||||||
hash -r
|
|
||||||
|
|
||||||
# Pylibmc support.
|
# Pylibmc support.
|
||||||
# See [`bin/steps/pylibmc`](pylibmc.html).
|
source $BIN_DIR/steps/pylibmc
|
||||||
bpwatch start pylibmc_install
|
|
||||||
source $BIN_DIR/steps/pylibmc
|
|
||||||
bpwatch stop pylibmc_install
|
|
||||||
|
|
||||||
# Install Mercurial if it appears to be required.
|
# Libffi support.
|
||||||
if (grep -Fiq "hg+" requirements.txt) then
|
source $BIN_DIR/steps/cryptography
|
||||||
bpwatch start mercurial_install
|
|
||||||
/app/.heroku/python/bin/pip install mercurial | cleanup | indent
|
|
||||||
bpwatch stop mercurial_install
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install dependencies with Pip.
|
# Support for Geo libraries.
|
||||||
puts-step "Installing dependencies using Pip ($PIP_VERSION)"
|
sub-env $BIN_DIR/steps/geo-libs
|
||||||
|
|
||||||
|
# GDAL support.
|
||||||
|
source $BIN_DIR/steps/gdal
|
||||||
|
|
||||||
[ ! "$FRESH_PYTHON" ] && bpwatch start pip_install
|
# Install dependencies with Pip (where the magic happens).
|
||||||
[ "$FRESH_PYTHON" ] && bpwatch start pip_install_first
|
source $BIN_DIR/steps/pip-install
|
||||||
|
|
||||||
/app/.heroku/python/bin/pip install -r requirements.txt --exists-action=w --src=./.heroku/src --allow-all-external | cleanup | indent
|
# Support for pip install -e.
|
||||||
|
rm -fr $BUILD_DIR/.heroku/src
|
||||||
[ ! "$FRESH_PYTHON" ] && bpwatch stop pip_install
|
deep-cp /app/.heroku/src $BUILD_DIR/.heroku/src
|
||||||
[ "$FRESH_PYTHON" ] && bpwatch stop pip_install_first
|
|
||||||
|
|
||||||
# Django collectstatic support.
|
# Django collectstatic support.
|
||||||
bpwatch start collectstatic
|
sub-env $BIN_DIR/steps/collectstatic
|
||||||
sub-env $BIN_DIR/steps/collectstatic
|
|
||||||
bpwatch stop 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-default-env LIBRARY_PATH /app/.heroku/vendor/lib
|
set-env LIBRARY_PATH '/app/.heroku/vendor/lib:/app/.heroku/python/lib:$LIBRARY_PATH'
|
||||||
set-default-env LD_LIBRARY_PATH /app/.heroku/vendor/lib
|
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 and $FORWARDED_ALLOW_IPS.
|
||||||
|
cp $ROOT_DIR/vendor/python.gunicorn.sh $GUNICORN_PROFILE_PATH
|
||||||
|
|
||||||
# Experimental post_compile hook.
|
# Experimental post_compile hook.
|
||||||
bpwatch start post_compile
|
bpwatch start post_compile
|
||||||
source $BIN_DIR/steps/hooks/post_compile
|
source $BIN_DIR/steps/hooks/post_compile
|
||||||
bpwatch stop post_compile
|
bpwatch stop post_compile
|
||||||
|
|
||||||
|
set +e
|
||||||
|
# rewrite build dir in egg links to /app so things are found at runtime
|
||||||
|
find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#$(pwd)#/app#" &> /dev/null
|
||||||
|
set -e
|
||||||
|
|
||||||
|
set +e
|
||||||
|
# Support for PyPy
|
||||||
|
find .heroku/python/lib-python/*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#$(pwd)#/app#" &> /dev/null
|
||||||
|
set -e
|
||||||
|
|
||||||
# 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
|
|
||||||
cp -R $dir $CACHE_DIR/
|
|
||||||
done
|
|
||||||
bpwatch stop dump_cache
|
|
||||||
|
|
||||||
# ### Fin.
|
rm -rf $CACHE_DIR/.heroku/python
|
||||||
bpwatch start appdir_commit
|
rm -rf $CACHE_DIR/.heroku/python-version
|
||||||
deep-mv $BUILD_DIR $ORIG_BUILD_DIR
|
rm -rf $CACHE_DIR/.heroku/python-stack
|
||||||
bpwatch stop appdir_commit
|
rm -rf $CACHE_DIR/.heroku/vendor
|
||||||
|
rm -rf $CACHE_DIR/.heroku/venv
|
||||||
|
rm -rf $CACHE_DIR/.heroku/src
|
||||||
|
|
||||||
bpwatch start anvil_appdir_commit
|
mkdir -p $CACHE_DIR/.heroku
|
||||||
if [ "$SLUG_ID" ]; then
|
cp -R .heroku/python $CACHE_DIR/.heroku/
|
||||||
deep-mv $TMP_APP_DIR $APP_DIR
|
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
|
||||||
|
if [[ -d .heroku/src ]]; then
|
||||||
|
cp -R .heroku/src $CACHE_DIR/.heroku/ &> /dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
bpwatch stop anvil_appdir_commit
|
bpwatch stop dump_cache
|
||||||
|
|
||||||
|
# Fin.
|
||||||
bpwatch stop compile
|
bpwatch stop compile
|
||||||
|
|||||||
+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
|
||||||
|
|||||||
+51
-20
@@ -1,36 +1,67 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Syntax sugar.
|
# Django Collectstatic runner. If you have Django installed, collectstatic will
|
||||||
indent() {
|
# automatically be executed as part of the build process. If collectstatic
|
||||||
RE="s/^/ /"
|
# fails, your build fails.
|
||||||
[ $(uname) == "Darwin" ] && sed -l "$RE" || sed -u "$RE"
|
|
||||||
}
|
|
||||||
|
|
||||||
MANAGE_FILE=$(find . -maxdepth 3 -type f -name 'manage.py' | head -1)
|
# 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
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ]; then
|
# Ensure that Django is explicitly specified in requirements.txt
|
||||||
|
pip-grep -s requirements.txt django Django && DJANGO_INSTALLED=1
|
||||||
|
|
||||||
|
bpwatch start collectstatic # metrics collection
|
||||||
|
|
||||||
|
if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ] && [ "$DJANGO_INSTALLED" ]; then
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
# Check if collectstatic is configured properly.
|
puts-cmd "python $MANAGE_FILE collectstatic --noinput"
|
||||||
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 "-----> Collecting static files"
|
set -e
|
||||||
python $MANAGE_FILE collectstatic --noinput 2>&1 | sed '/^Copying/d;/^$/d;/^ /d' | indent
|
|
||||||
|
|
||||||
[ $? -ne 0 ] && {
|
# Display a warning if collectstatic failed.
|
||||||
echo " ! Error running manage.py collectstatic. More info:"
|
[ $COLLECTSTATIC_STATUS -ne 0 ] && {
|
||||||
echo " http://devcenter.heroku.com/articles/django-assets"
|
|
||||||
}
|
echo
|
||||||
fi
|
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
|
||||||
|
}
|
||||||
|
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
bpwatch stop collectstatic # metrics collection
|
||||||
|
|||||||
Executable
+35
@@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# This script serves as the Cryptography 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 libffi binary.
|
||||||
|
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"
|
||||||
|
|
||||||
|
# Syntax sugar.
|
||||||
|
source $BIN_DIR/utils
|
||||||
|
|
||||||
|
bpwatch start libffi_install
|
||||||
|
|
||||||
|
# If a package using cffi exists within requirements, use vendored libffi.
|
||||||
|
if (pip-grep -s requirements.txt argon2-cffi bcrypt cffi cryptography django[argon2] Django[argon2] django[bcrypt] Django[bcrypt] PyNaCl pyOpenSSL PyOpenSSL requests[security] misaka &> /dev/null) then
|
||||||
|
|
||||||
|
if [ ! -d ".heroku/vendor/lib/libffi-3.1" ]; then
|
||||||
|
echo "-----> Noticed cffi. Bootstrapping libffi."
|
||||||
|
mkdir -p .heroku/vendor
|
||||||
|
# Download and extract libffi into target vendor directory.
|
||||||
|
curl $VENDORED_LIBFFI -s | tar zxv -C .heroku/vendor &> /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
export LIBFFI=$(pwd)/vendor
|
||||||
|
fi
|
||||||
|
|
||||||
|
bpwatch stop libffi_install
|
||||||
Executable
+35
@@ -0,0 +1,35 @@
|
|||||||
|
#!/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
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
|
||||||
|
export GDAL=$(pwd)/vendor
|
||||||
|
fi
|
||||||
|
|
||||||
|
bpwatch stop gdal_install
|
||||||
Executable
+39
@@ -0,0 +1,39 @@
|
|||||||
|
#!/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/proj" ]; then
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
|
||||||
|
export GDAL=$(pwd)/vendor
|
||||||
|
fi
|
||||||
|
|
||||||
|
bpwatch stop geo_libs_install
|
||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
# Install Mercurial if it appears to be required.
|
||||||
|
if (grep -Fiq "hg+" requirements.txt) then
|
||||||
|
bpwatch start mercurial_install
|
||||||
|
/app/.heroku/python/bin/pip install mercurial | cleanup | indent
|
||||||
|
bpwatch stop mercurial_install
|
||||||
|
fi
|
||||||
Executable
+38
@@ -0,0 +1,38 @@
|
|||||||
|
# Install dependencies with Pip.
|
||||||
|
puts-cmd "pip install -r requirements.txt"
|
||||||
|
|
||||||
|
set +e
|
||||||
|
# delete any existing egg links, to uninstall exisisting installations.
|
||||||
|
find .heroku/python/lib/python*/site-packages/ -name "*.egg-link" -delete 2> /dev/null
|
||||||
|
find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#/app/#/$(pwd)/#" &> /dev/null
|
||||||
|
set -e
|
||||||
|
|
||||||
|
set +e
|
||||||
|
# Support for the above, for PyPy.
|
||||||
|
find .heroku/python/lib-python/*/site-packages/ -name "*.egg-link" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#/app/#$(pwd)/#" &> /dev/null
|
||||||
|
find .heroku/python/lib-python/*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#/app/#/$(pwd)/#" &> /dev/null
|
||||||
|
set -e
|
||||||
|
|
||||||
|
[ ! "$FRESH_PYTHON" ] && bpwatch start pip_install
|
||||||
|
[ "$FRESH_PYTHON" ] && bpwatch start pip_install_first
|
||||||
|
|
||||||
|
set +e
|
||||||
|
/app/.heroku/python/bin/pip install -r $BUILD_DIR/requirements.txt --exists-action=w --src=/app/.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
|
||||||
|
cp requirements.txt .heroku/python/requirements-declared.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_first
|
||||||
|
|
||||||
|
echo
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
set +e
|
||||||
|
# Install dependencies with Pip.
|
||||||
|
bpwatch start pip_uninstall
|
||||||
|
if [[ -f .heroku/python/requirements-declared.txt ]]; then
|
||||||
|
|
||||||
|
cp .heroku/python/requirements-declared.txt requirements-declared.txt
|
||||||
|
|
||||||
|
pip-diff --stale requirements-declared.txt requirements.txt --exclude setuptools pip wheel > .heroku/python/requirements-stale.txt
|
||||||
|
|
||||||
|
rm -fr requirements-declared.txt
|
||||||
|
|
||||||
|
if [[ -s .heroku/python/requirements-stale.txt ]]; then
|
||||||
|
puts-step "Uninstalling stale dependencies"
|
||||||
|
/app/.heroku/python/bin/pip uninstall -r .heroku/python/requirements-stale.txt -y --exists-action=w | cleanup | indent
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
bpwatch stop pip_uninstall
|
||||||
|
set -e
|
||||||
+12
-16
@@ -4,35 +4,31 @@
|
|||||||
# [**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://cl.ly/0a191R3K160t1w1P0N25/vendor-libmemcached.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
|
||||||
|
|
||||||
# If pylibmc exists within requirements, use vendored libmemcached.
|
|
||||||
if (grep -Eiq "^\s*pylibmc" requirements.txt) then
|
|
||||||
echo "-----> Noticed pylibmc. Bootstrapping libmemcached."
|
|
||||||
cd .heroku
|
|
||||||
|
|
||||||
if [ -d "vendor/lib/sasl2" ]; then
|
bpwatch start pylibmc_install
|
||||||
export LIBMEMCACHED=$(pwd)/vendor
|
|
||||||
else
|
# If pylibmc exists within requirements, use vendored libmemcached.
|
||||||
|
if (pip-grep -s requirements.txt pylibmc &> /dev/null) then
|
||||||
|
|
||||||
|
if [ ! -d ".heroku/vendor/lib/sasl2" ]; then
|
||||||
|
echo "-----> Noticed pylibmc. Bootstrapping libmemcached."
|
||||||
|
mkdir -p .heroku/vendor
|
||||||
# Download and extract libmemcached into target vendor directory.
|
# Download and extract libmemcached into target vendor directory.
|
||||||
curl -s -L -o tmp-libmemcached.tar.gz $VENDORED_MEMCACHED
|
curl $VENDORED_MEMCACHED -s | tar zxv -C .heroku/vendor &> /dev/null
|
||||||
tar -zxvf tmp-libmemcached.tar.gz > /dev/null
|
|
||||||
rm tmp-libmemcached.tar.gz
|
|
||||||
export LIBMEMCACHED=$(pwd)/vendor
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export LIBMEMCACHED=$(pwd)/vendor
|
export LIBMEMCACHED=$(pwd)/vendor
|
||||||
cd ..
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
bpwatch stop pylibmc_install
|
||||||
|
|
||||||
|
|||||||
Executable
+78
@@ -0,0 +1,78 @@
|
|||||||
|
set +e
|
||||||
|
PYTHON_VERSION=$(cat runtime.txt)
|
||||||
|
|
||||||
|
# Install Python.
|
||||||
|
if [ -f .heroku/python-version ]; then
|
||||||
|
if [ ! $(cat .heroku/python-version) = $PYTHON_VERSION ]; then
|
||||||
|
bpwatch start uninstall_python
|
||||||
|
puts-step "Found $(cat .heroku/python-version), removing"
|
||||||
|
rm -fr .heroku/python
|
||||||
|
bpwatch stop uninstall_python
|
||||||
|
else
|
||||||
|
SKIP_INSTALL=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! $STACK = $CACHED_PYTHON_STACK ]; then
|
||||||
|
bpwatch start uninstall_python
|
||||||
|
rm -fr .heroku/python .heroku/python-stack .heroku/vendor
|
||||||
|
unset SKIP_INSTALL
|
||||||
|
bpwatch stop uninstall_python
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! "$SKIP_INSTALL" ]; then
|
||||||
|
bpwatch start install_python
|
||||||
|
puts-step "Installing $PYTHON_VERSION"
|
||||||
|
|
||||||
|
# Prepare destination directory.
|
||||||
|
mkdir -p .heroku/python
|
||||||
|
|
||||||
|
curl https://lang-python.s3.amazonaws.com/$STACK/runtimes/$PYTHON_VERSION.tar.gz -s | tar zxv -C .heroku/python &> /dev/null
|
||||||
|
if [[ $? != 0 ]] ; then
|
||||||
|
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"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
bpwatch stop install_python
|
||||||
|
|
||||||
|
# Record for future reference.
|
||||||
|
echo $PYTHON_VERSION > .heroku/python-version
|
||||||
|
echo $STACK > .heroku/python-stack
|
||||||
|
FRESH_PYTHON=true
|
||||||
|
|
||||||
|
hash -r
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If Pip isn't up to date:
|
||||||
|
if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_VERSION* ]]; then
|
||||||
|
WORKING_DIR=$(pwd)
|
||||||
|
|
||||||
|
bpwatch start prepare_environment
|
||||||
|
|
||||||
|
TMPTARDIR=$(mktemp -d)
|
||||||
|
trap "rm -rf $TMPTARDIR" RETURN
|
||||||
|
|
||||||
|
bpwatch start install_setuptools
|
||||||
|
# Prepare it for the real world
|
||||||
|
# puts-step "Installing Setuptools ($SETUPTOOLS_VERSION)"
|
||||||
|
tar zxf $ROOT_DIR/vendor/setuptools-$SETUPTOOLS_VERSION.tar.gz -C $TMPTARDIR
|
||||||
|
cd $TMPTARDIR/setuptools-$SETUPTOOLS_VERSION/
|
||||||
|
python setup.py install &> /dev/null
|
||||||
|
cd $WORKING_DIR
|
||||||
|
bpwatch stop install_setuptoools
|
||||||
|
|
||||||
|
bpwatch start install_pip
|
||||||
|
# puts-step "Installing Pip ($PIP_VERSION)"
|
||||||
|
tar zxf $ROOT_DIR/vendor/pip-$PIP_VERSION.tar.gz -C $TMPTARDIR
|
||||||
|
cd $TMPTARDIR/pip-$PIP_VERSION/
|
||||||
|
python setup.py install &> /dev/null
|
||||||
|
cd $WORKING_DIR
|
||||||
|
|
||||||
|
bpwatch stop install_pip
|
||||||
|
bpwatch stop prepare_environment
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -e
|
||||||
|
hash -r
|
||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Syntax sugar.
|
||||||
|
source $BIN_DIR/utils
|
||||||
|
|
||||||
|
if (pip-grep -s requirements.txt setuptools distribute &> /dev/null) then
|
||||||
|
|
||||||
|
puts-warn 'The package setuptools/distribute is listed in requirements.txt.'
|
||||||
|
puts-warn 'Please remove to ensure expected behavior. '
|
||||||
|
|
||||||
|
fi
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
#
|
|
||||||
# Create a Heroku app with the following buildpack:
|
|
||||||
# https://github.com/ddollar/buildpack-test
|
|
||||||
#
|
|
||||||
# Push this Python buildpack to that Heroku app to
|
|
||||||
# run the tests.
|
|
||||||
#
|
|
||||||
|
|
||||||
testDetectWithReqs() {
|
|
||||||
detect "simple-requirements"
|
|
||||||
assertCapturedEquals "Python"
|
|
||||||
assertCapturedSuccess
|
|
||||||
}
|
|
||||||
|
|
||||||
testDetectWithEmptyReqs() {
|
|
||||||
detect "empty-requirements"
|
|
||||||
assertCapturedEquals "Python"
|
|
||||||
assertCapturedSuccess
|
|
||||||
}
|
|
||||||
|
|
||||||
testDetectDjango15() {
|
|
||||||
detect "django-1.5-skeleton"
|
|
||||||
assertCapturedEquals "Python"
|
|
||||||
assertCapturedSuccess
|
|
||||||
}
|
|
||||||
|
|
||||||
testDetectDjango14() {
|
|
||||||
detect "django-1.4-skeleton"
|
|
||||||
assertCapturedEquals "Python"
|
|
||||||
assertCapturedSuccess
|
|
||||||
}
|
|
||||||
|
|
||||||
testDetectDjango13() {
|
|
||||||
detect "django-1.3-skeleton"
|
|
||||||
assertCapturedEquals "Python"
|
|
||||||
assertCapturedSuccess
|
|
||||||
}
|
|
||||||
|
|
||||||
testDetectNotDjangoWithSettings() {
|
|
||||||
detect "not-django"
|
|
||||||
assertCapturedEquals "Python"
|
|
||||||
assertCapturedSuccess
|
|
||||||
}
|
|
||||||
|
|
||||||
testDetectWithSetupPy() {
|
|
||||||
detect "distutils"
|
|
||||||
assertCapturedEquals "Python"
|
|
||||||
assertCapturedSuccess
|
|
||||||
}
|
|
||||||
|
|
||||||
testDetectWithSetupRequires() {
|
|
||||||
detect "no-requirements"
|
|
||||||
assertCapturedEquals "Python"
|
|
||||||
assertCapturedSuccess
|
|
||||||
}
|
|
||||||
|
|
||||||
testDetectNotPython() {
|
|
||||||
detect "not-python"
|
|
||||||
assertNotCaptured "Python"
|
|
||||||
assertEquals "1" "${RETURN}"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
## utils ########################################
|
|
||||||
|
|
||||||
pushd $(dirname 0) >/dev/null
|
|
||||||
BASE=$(pwd)
|
|
||||||
popd >/dev/null
|
|
||||||
|
|
||||||
source ${BASE}/vendor/test-utils
|
|
||||||
|
|
||||||
detect() {
|
|
||||||
capture ${BASE}/bin/detect ${BASE}/test/$1
|
|
||||||
}
|
|
||||||
|
|
||||||
compile() {
|
|
||||||
capture ${BASE}/bin/compile ${BASE}/test/$1
|
|
||||||
}
|
|
||||||
|
|
||||||
source ${BASE}/vendor/shunit2
|
|
||||||
|
|
||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Syntax sugar.
|
||||||
|
BIN_DIR=$(cd $(dirname $0); pwd) # absolute path
|
||||||
|
source $BIN_DIR/utils
|
||||||
|
|
||||||
|
DISABLE_COLLECTSTATIC=1 "$(dirname ${0:-})/compile" "$1" "$2" "$3"
|
||||||
|
|
||||||
|
if [[ -f "$1/requirements-test.txt" ]]; then
|
||||||
|
/app/.heroku/python/bin/pip install -r "$1/requirements-test.txt" --exists-action=w --src=./.heroku/src --disable-pip-version-check --no-cache-dir 2>&1 | cleanup | indent
|
||||||
|
fi
|
||||||
@@ -1,69 +1,98 @@
|
|||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
||||||
[ $(uname) == "Darwin" ] && SED_FLAG='-l' || SED_FLAG='-u'
|
if [ $(uname) == Darwin ]; then
|
||||||
|
sed() { command sed -l "$@"; }
|
||||||
|
else
|
||||||
|
sed() { command sed -u "$@"; }
|
||||||
|
fi
|
||||||
|
|
||||||
# Syntax sugar.
|
# Syntax sugar.
|
||||||
indent() {
|
indent() {
|
||||||
RE="s/^/ /"
|
sed "s/^/ /"
|
||||||
sed $SED_FLAG "$RE"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Clean up pip output
|
# Clean up pip output
|
||||||
cleanup() {
|
cleanup() {
|
||||||
sed $SED_FLAG -e 's/\.\.\.\+/.../g' | sed $SED_FLAG '/already satisfied/Id' | sed $SED_FLAG -e '/Overwriting/Id' | sed $SED_FLAG -e '/python executable/Id' | sed $SED_FLAG -e '/no previously-included files/Id'
|
sed -e 's/\.\.\.\+/.../g' | sed -e '/already satisfied/Id' | sed -e '/No files were found to uninstall/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.
|
||||||
function puts-step (){
|
puts-step() {
|
||||||
echo "-----> $@"
|
echo "-----> $@"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Buildpack Warnings.
|
# Buildpack Warnings.
|
||||||
function puts-warn (){
|
puts-warn() {
|
||||||
echo " ! $@"
|
echo " ! $@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Buildpack Commands.
|
||||||
|
puts-cmd() {
|
||||||
|
echo " $ $@"
|
||||||
|
}
|
||||||
|
|
||||||
# Usage: $ set-env key value
|
# Usage: $ set-env key value
|
||||||
function set-env (){
|
set-env() {
|
||||||
echo "export $1=$2" >> $PROFILE_PATH
|
echo "export $1=$2" >> $PROFILE_PATH
|
||||||
|
echo "export $1=$2" >> $EXPORT_PATH
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: $ set-default-env key value
|
# Usage: $ set-default-env key value
|
||||||
function set-default-env (){
|
set-default-env() {
|
||||||
echo "export $1=\${$1:-$2}" >> $PROFILE_PATH
|
echo "export $1=\${$1:-$2}" >> $PROFILE_PATH
|
||||||
|
echo "export $1=\${$1:-$2}" >> $EXPORT_PATH
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: $ set-default-env key value
|
# Usage: $ un-set-env key
|
||||||
function un-set-env (){
|
un-set-env() {
|
||||||
echo "unset $1" >> $PROFILE_PATH
|
echo "unset $1" >> $PROFILE_PATH
|
||||||
}
|
}
|
||||||
|
|
||||||
# Does some serious copying.
|
# Does some serious copying.
|
||||||
function deep-cp (){
|
deep-cp() {
|
||||||
find -H $1 -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec cp -a '{}' $2 \;
|
declare source="$1" target="$2"
|
||||||
cp -r $1/!(tmp) $2
|
|
||||||
# echo copying $1 to $2
|
mkdir -p "$target"
|
||||||
|
|
||||||
|
# cp doesn't like being called without source params,
|
||||||
|
# so make sure they expand to something first.
|
||||||
|
# subshell to avoid surprising caller with shopts.
|
||||||
|
(
|
||||||
|
shopt -s nullglob dotglob
|
||||||
|
set -- "$source"/!(tmp|.|..)
|
||||||
|
[[ $# == 0 ]] || cp -a "$@" "$target"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
# Does some serious moving.
|
# Does some serious moving.
|
||||||
function deep-mv (){
|
deep-mv() {
|
||||||
deep-cp $1 $2
|
deep-cp "$1" "$2"
|
||||||
|
deep-rm "$1"
|
||||||
rm -fr $1/!(tmp)
|
|
||||||
find -H $1 -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec rm -fr '{}' \;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Does some serious deleting.
|
# Does some serious deleting.
|
||||||
function deep-rm (){
|
deep-rm() {
|
||||||
rm -fr $1/!(tmp)
|
# subshell to avoid surprising caller with shopts.
|
||||||
find -H $1 -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec rm -fr '{}' \;
|
(
|
||||||
|
shopt -s dotglob
|
||||||
|
rm -rf "$1"/!(.curlrc|.netrc|tmp|.|..)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub-env() {
|
sub-env() {
|
||||||
|
|
||||||
WHITELIST=${2:-''}
|
WHITELIST=${2:-''}
|
||||||
BLACKLIST=${3:-'^(GIT_DIR|PYTHONHOME|PYTHONPATH|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
|
||||||
@@ -78,3 +107,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
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# Python Buildpack Binaries
|
||||||
|
|
||||||
|
|
||||||
|
To get started with it, create an app on Heroku inside a clone of this repository, and set your S3 config vars:
|
||||||
|
|
||||||
|
$ heroku create --buildpack https://github.com/heroku/heroku-buildpack-python#not-heroku
|
||||||
|
$ heroku config:set WORKSPACE_DIR=builds
|
||||||
|
$ heroku config:set AWS_ACCESS_KEY_ID=<your_aws_key>
|
||||||
|
$ heroku config:set AWS_SECRET_ACCESS_KEY=<your_aws_secret>
|
||||||
|
$ heroku config:set S3_BUCKET=<your_s3_bucket_name>
|
||||||
|
|
||||||
|
|
||||||
|
Then, shell into an instance and run a build by giving the name of the formula inside `builds`:
|
||||||
|
|
||||||
|
$ heroku run bash
|
||||||
|
Running `bash` attached to terminal... up, run.6880
|
||||||
|
~ $ bob build runtimes/python-2.7.6
|
||||||
|
|
||||||
|
Fetching dependencies... found 2:
|
||||||
|
- libraries/sqlite
|
||||||
|
|
||||||
|
Building formula runtimes/python-2.7.6:
|
||||||
|
=== Building Python 2.7.6
|
||||||
|
Fetching Python v2.7.6 source...
|
||||||
|
Compiling...
|
||||||
|
|
||||||
|
If this works, run `bob deploy` instead of `bob build` to have the result uploaded to S3 for you.
|
||||||
|
|
||||||
|
To speed things up drastically, it'll usually be a good idea to `heroku run bash --size PX` instead.
|
||||||
|
|
||||||
|
Enjoy :)
|
||||||
Executable
+22
@@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building SQLite..."
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE_TARBALL='https://www.sqlite.org/sqlite-autoconf-3070900.tar.gz'
|
||||||
|
|
||||||
|
curl $SOURCE_TARBALL | tar xz
|
||||||
|
# jx
|
||||||
|
mv sqlite-autoconf-3070900 sqlite
|
||||||
|
|
||||||
|
cd sqlite
|
||||||
|
./configure --prefix=$OUT_PREFIX
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
cd ..
|
||||||
|
rm -fr sqlite
|
||||||
+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 ..
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/vendor/
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Skip the build for heroku-16.
|
||||||
|
if [[ $S3_PREFIX == "heroku-16" ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use new path, containing autoconf.
|
||||||
|
export PATH="/app/.heroku/python/bin/:$PATH"
|
||||||
|
hash -r
|
||||||
|
|
||||||
|
|
||||||
|
echo "Building libffi..."
|
||||||
|
|
||||||
|
SOURCE_TARBALL='ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz'
|
||||||
|
|
||||||
|
curl -L $SOURCE_TARBALL | tar x
|
||||||
|
|
||||||
|
cd libffi-3.1
|
||||||
|
./configure --prefix=$OUT_PREFIX --disable-static &&
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
cd ..
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/vendor/
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
# Skip the build for heroku-16.
|
||||||
|
if [[ $S3_PREFIX == "heroku-16" ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# fail hard
|
||||||
|
set -o pipefail
|
||||||
|
# fail harder
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
DEFAULT_VERSION="1.0.18"
|
||||||
|
dep_version=${VERSION:-$DEFAULT_VERSION}
|
||||||
|
dep_dirname=libmemcached-${dep_version}
|
||||||
|
dep_archive_name=${dep_dirname}.tar.gz
|
||||||
|
dep_url=https://launchpad.net/libmemcached/1.0/${dep_version}/+download/${dep_archive_name}
|
||||||
|
|
||||||
|
# SASL Support.
|
||||||
|
echo "-----> Building cyrus-sasl 2.1.26..."
|
||||||
|
|
||||||
|
curl -LO ftp://ftp.cyrusimap.org/cyrus-sasl/cyrus-sasl-2.1.26.tar.gz
|
||||||
|
# FTP doesn't play well with piping into tar xz
|
||||||
|
tar xzf cyrus-sasl-2.1.26.tar.gz
|
||||||
|
|
||||||
|
pushd cyrus-sasl-2.1.26
|
||||||
|
./configure --prefix=${OUT_PREFIX} --with-plugindir=${OUT_PREFIX}lib/sasl2 --with-configdir=${OUT_PREFIX}lib/sasl2
|
||||||
|
|
||||||
|
make -s -j 9
|
||||||
|
make install -s
|
||||||
|
popd
|
||||||
|
|
||||||
|
echo "-----> Building libmemcached ${dep_version}..."
|
||||||
|
|
||||||
|
curl -L ${dep_url} | tar xz
|
||||||
|
pushd ${dep_dirname}
|
||||||
|
CPPFLAGS=-I${OUT_PREFIX}/include LDFLAGS=-L${OUT_PREFIX}/lib ./configure --prefix=${OUT_PREFIX} --without-memcached
|
||||||
|
make -s -j 9
|
||||||
|
make install -s
|
||||||
|
popd
|
||||||
|
|
||||||
|
echo "-----> Done."
|
||||||
+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/pypy2-v5.3.1-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy2-v5.3.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/pypy2-v5.6.0-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy2-v5.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/pypy3-2.4.0-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy3-2.4.0-linux64/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy3 $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/pypy3.3-v5.5.0-alpha-linux64.tar.bz2'
|
||||||
|
curl -L $SOURCE_TARBALL | tar jx
|
||||||
|
cp -R pypy3-v5.5.0-linux64/* $OUT_PREFIX
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/pypy3 $OUT_PREFIX/bin/python
|
||||||
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://python.org/ftp/python/2.7.12/Python-2.7.12.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.12 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.13/Python-2.7.13.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.13 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --enable-unicode=ucs4 --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.9/Python-2.7.9.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-2.7.9 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||||
|
make
|
||||||
|
make install
|
||||||
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.2/Python-3.5.2.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.5.2 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
# ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
|
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build Path: /app/.heroku/python/
|
||||||
|
# Build Deps: libraries/sqlite
|
||||||
|
|
||||||
|
OUT_PREFIX=$1
|
||||||
|
|
||||||
|
echo "Building Python..."
|
||||||
|
SOURCE_TARBALL='https://python.org/ftp/python/3.6.0/Python-3.6.0.tgz'
|
||||||
|
curl -L $SOURCE_TARBALL | tar xz
|
||||||
|
mv Python-3.6.0 src
|
||||||
|
cd src
|
||||||
|
|
||||||
|
./configure --prefix=$OUT_PREFIX --with-ensurepip=no
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
ln $OUT_PREFIX/bin/python3 $OUT_PREFIX/bin/python
|
||||||
|
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
requests
|
bob-builder==0.0.5
|
||||||
|
|||||||
@@ -1,210 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""
|
|
||||||
envoy.core
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
This module provides envoy awesomeness.
|
|
||||||
|
|
||||||
Copyright 2012, Kenneth Reitz.
|
|
||||||
MIT Licensed.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shlex
|
|
||||||
import subprocess
|
|
||||||
import threading
|
|
||||||
|
|
||||||
|
|
||||||
__version__ = '0.0.2'
|
|
||||||
__license__ = 'MIT'
|
|
||||||
__author__ = 'Kenneth Reitz'
|
|
||||||
|
|
||||||
|
|
||||||
class Command(object):
|
|
||||||
def __init__(self, cmd):
|
|
||||||
self.cmd = cmd
|
|
||||||
self.process = None
|
|
||||||
self.out = None
|
|
||||||
self.err = None
|
|
||||||
self.returncode = None
|
|
||||||
self.data = None
|
|
||||||
|
|
||||||
def run(self, data, timeout, env):
|
|
||||||
self.data = data
|
|
||||||
environ = dict(os.environ).update(env or {})
|
|
||||||
|
|
||||||
def target():
|
|
||||||
|
|
||||||
self.process = subprocess.Popen(self.cmd,
|
|
||||||
universal_newlines=True,
|
|
||||||
shell=False,
|
|
||||||
env=environ,
|
|
||||||
stdin=subprocess.PIPE,
|
|
||||||
stdout=subprocess.PIPE,
|
|
||||||
stderr=subprocess.PIPE,
|
|
||||||
bufsize=0,
|
|
||||||
)
|
|
||||||
|
|
||||||
self.out, self.err = self.process.communicate(self.data)
|
|
||||||
|
|
||||||
thread = threading.Thread(target=target)
|
|
||||||
thread.start()
|
|
||||||
|
|
||||||
thread.join(timeout)
|
|
||||||
if thread.is_alive():
|
|
||||||
self.process.terminate()
|
|
||||||
thread.join()
|
|
||||||
self.returncode = self.process.returncode
|
|
||||||
return self.out, self.err
|
|
||||||
|
|
||||||
|
|
||||||
class ConnectedCommand(object):
|
|
||||||
def __init__(self,
|
|
||||||
process=None,
|
|
||||||
std_in=None,
|
|
||||||
std_out=None,
|
|
||||||
std_err=None):
|
|
||||||
|
|
||||||
self._process = process
|
|
||||||
self.std_in = std_in
|
|
||||||
self.std_out = std_out
|
|
||||||
self.std_err = std_out
|
|
||||||
|
|
||||||
def __enter__(self):
|
|
||||||
return self
|
|
||||||
|
|
||||||
def __exit__(self, type, value, traceback):
|
|
||||||
self.kill()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def status_code(self):
|
|
||||||
"""The status code of the process.
|
|
||||||
If the code is None, assume that it's still running.
|
|
||||||
"""
|
|
||||||
if self._status_code is not None:
|
|
||||||
return self._status_code
|
|
||||||
|
|
||||||
# investigate
|
|
||||||
return None
|
|
||||||
|
|
||||||
@property
|
|
||||||
def pid(self):
|
|
||||||
"""The process' PID."""
|
|
||||||
return self._process.pid
|
|
||||||
|
|
||||||
def kill(self):
|
|
||||||
"""Kills the process."""
|
|
||||||
return self._process.kill()
|
|
||||||
|
|
||||||
def expect(self, bytes, stream=None):
|
|
||||||
"""Block until given bytes appear in the stream."""
|
|
||||||
if stream is None:
|
|
||||||
stream = self.std_out
|
|
||||||
pass
|
|
||||||
|
|
||||||
def send(self, end='\n'):
|
|
||||||
"""Sends a line to std_in."""
|
|
||||||
#TODO: Y U LINE BUFFER
|
|
||||||
pass
|
|
||||||
|
|
||||||
def block(self):
|
|
||||||
"""Blocks until command finishes. Returns Response instance."""
|
|
||||||
self._status_code = self._process.wait()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Response(object):
|
|
||||||
"""A command's response"""
|
|
||||||
|
|
||||||
def __init__(self, process=None):
|
|
||||||
super(Response, self).__init__()
|
|
||||||
|
|
||||||
self._process = process
|
|
||||||
self.command = None
|
|
||||||
self.std_err = None
|
|
||||||
self.std_out = None
|
|
||||||
self.status_code = None
|
|
||||||
self.history = []
|
|
||||||
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
if len(self.command):
|
|
||||||
return '<Response [{0}]>'.format(self.command[0])
|
|
||||||
else:
|
|
||||||
return '<Response>'
|
|
||||||
|
|
||||||
|
|
||||||
def expand_args(command):
|
|
||||||
"""Parses command strings and returns a Popen-ready list."""
|
|
||||||
|
|
||||||
# Prepare arguments.
|
|
||||||
if isinstance(command, basestring):
|
|
||||||
splitter = shlex.shlex(command, posix=True)
|
|
||||||
splitter.whitespace = '|'
|
|
||||||
splitter.whitespace_split = True
|
|
||||||
command = []
|
|
||||||
|
|
||||||
while True:
|
|
||||||
token = splitter.get_token()
|
|
||||||
if token:
|
|
||||||
command.append(token)
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
|
|
||||||
command = map(shlex.split, command)
|
|
||||||
|
|
||||||
return command
|
|
||||||
|
|
||||||
|
|
||||||
def run(command, data=None, timeout=None, env=None):
|
|
||||||
"""Executes a given commmand and returns Response.
|
|
||||||
|
|
||||||
Blocks until process is complete, or timeout is reached.
|
|
||||||
"""
|
|
||||||
|
|
||||||
command = expand_args(command)
|
|
||||||
|
|
||||||
history = []
|
|
||||||
for c in command:
|
|
||||||
|
|
||||||
if len(history):
|
|
||||||
# due to broken pipe problems pass only first 10MB
|
|
||||||
data = history[-1].std_out[0:10*1024]
|
|
||||||
|
|
||||||
cmd = Command(c)
|
|
||||||
out, err = cmd.run(data, timeout, env)
|
|
||||||
|
|
||||||
r = Response(process=cmd)
|
|
||||||
|
|
||||||
r.command = c
|
|
||||||
r.std_out = out
|
|
||||||
r.std_err = err
|
|
||||||
r.status_code = cmd.returncode
|
|
||||||
|
|
||||||
history.append(r)
|
|
||||||
|
|
||||||
r = history.pop()
|
|
||||||
r.history = history
|
|
||||||
|
|
||||||
return r
|
|
||||||
|
|
||||||
|
|
||||||
def connect(command, data=None, env=None):
|
|
||||||
"""Spawns a new process from the given command."""
|
|
||||||
|
|
||||||
# TODO: support piped commands
|
|
||||||
command_str = expand_args(command).pop()
|
|
||||||
environ = dict(os.environ).update(env or {})
|
|
||||||
|
|
||||||
process = subprocess.Popen(command_str,
|
|
||||||
universal_newlines=True,
|
|
||||||
shell=False,
|
|
||||||
env=environ,
|
|
||||||
stdin=subprocess.PIPE,
|
|
||||||
stdout=subprocess.PIPE,
|
|
||||||
stderr=subprocess.PIPE,
|
|
||||||
bufsize=0,
|
|
||||||
)
|
|
||||||
|
|
||||||
return ConnectedCommand(process=process)
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import envoy
|
|
||||||
|
|
||||||
try:
|
|
||||||
from setuptools import setup
|
|
||||||
except ImportError:
|
|
||||||
from distutils.core import setup
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if sys.argv[-1] == "publish":
|
|
||||||
os.system("python setup.py sdist upload")
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
required = []
|
|
||||||
|
|
||||||
setup(
|
|
||||||
name='envoy',
|
|
||||||
version=envoy.__version__,
|
|
||||||
description='Simple API for running external processes.',
|
|
||||||
author='Kenneth Reitz',
|
|
||||||
author_email='me@kennethreitz.com',
|
|
||||||
url='https://github.com/kennethreitz/envoy',
|
|
||||||
py_modules= ['envoy'],
|
|
||||||
install_requires=required,
|
|
||||||
license='MIT',
|
|
||||||
classifiers=(
|
|
||||||
'Development Status :: 5 - Production/Stable',
|
|
||||||
'Intended Audience :: Developers',
|
|
||||||
'Natural Language :: English',
|
|
||||||
'License :: OSI Approved :: MIT License',
|
|
||||||
'Programming Language :: Python',
|
|
||||||
'Programming Language :: Python :: 2.5',
|
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
|
||||||
# 'Programming Language :: Python :: 3.0',
|
|
||||||
# 'Programming Language :: Python :: 3.1',
|
|
||||||
),
|
|
||||||
)
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
from django.core.management import execute_manager
|
|
||||||
import imp
|
|
||||||
try:
|
|
||||||
imp.find_module('settings') # Assumed to be in the same directory.
|
|
||||||
except ImportError:
|
|
||||||
import sys
|
|
||||||
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
import settings
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
execute_manager(settings)
|
|
||||||
@@ -1,145 +0,0 @@
|
|||||||
# Django settings for haystack project.
|
|
||||||
|
|
||||||
DEBUG = True
|
|
||||||
TEMPLATE_DEBUG = DEBUG
|
|
||||||
|
|
||||||
ADMINS = (
|
|
||||||
# ('Your Name', 'your_email@example.com'),
|
|
||||||
)
|
|
||||||
|
|
||||||
MANAGERS = ADMINS
|
|
||||||
|
|
||||||
DATABASES = {
|
|
||||||
'default': {
|
|
||||||
'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
|
|
||||||
'NAME': '', # Or path to database file if using sqlite3.
|
|
||||||
'USER': '', # Not used with sqlite3.
|
|
||||||
'PASSWORD': '', # Not used with sqlite3.
|
|
||||||
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
|
|
||||||
'PORT': '', # Set to empty string for default. Not used with sqlite3.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Local time zone for this installation. Choices can be found here:
|
|
||||||
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
|
||||||
# although not all choices may be available on all operating systems.
|
|
||||||
# On Unix systems, a value of None will cause Django to use the same
|
|
||||||
# timezone as the operating system.
|
|
||||||
# If running in a Windows environment this must be set to the same as your
|
|
||||||
# system time zone.
|
|
||||||
TIME_ZONE = 'America/Chicago'
|
|
||||||
|
|
||||||
# Language code for this installation. All choices can be found here:
|
|
||||||
# http://www.i18nguy.com/unicode/language-identifiers.html
|
|
||||||
LANGUAGE_CODE = 'en-us'
|
|
||||||
|
|
||||||
SITE_ID = 1
|
|
||||||
|
|
||||||
# If you set this to False, Django will make some optimizations so as not
|
|
||||||
# to load the internationalization machinery.
|
|
||||||
USE_I18N = True
|
|
||||||
|
|
||||||
# If you set this to False, Django will not format dates, numbers and
|
|
||||||
# calendars according to the current locale
|
|
||||||
USE_L10N = True
|
|
||||||
|
|
||||||
# Absolute filesystem path to the directory that will hold user-uploaded files.
|
|
||||||
# Example: "/home/media/media.lawrence.com/media/"
|
|
||||||
MEDIA_ROOT = ''
|
|
||||||
|
|
||||||
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
|
|
||||||
# trailing slash.
|
|
||||||
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
|
|
||||||
MEDIA_URL = ''
|
|
||||||
|
|
||||||
# Absolute path to the directory static files should be collected to.
|
|
||||||
# Don't put anything in this directory yourself; store your static files
|
|
||||||
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
|
|
||||||
# Example: "/home/media/media.lawrence.com/static/"
|
|
||||||
STATIC_ROOT = ''
|
|
||||||
|
|
||||||
# URL prefix for static files.
|
|
||||||
# Example: "http://media.lawrence.com/static/"
|
|
||||||
STATIC_URL = '/static/'
|
|
||||||
|
|
||||||
# URL prefix for admin static files -- CSS, JavaScript and images.
|
|
||||||
# Make sure to use a trailing slash.
|
|
||||||
# Examples: "http://foo.com/static/admin/", "/static/admin/".
|
|
||||||
ADMIN_MEDIA_PREFIX = '/static/admin/'
|
|
||||||
|
|
||||||
# Additional locations of static files
|
|
||||||
STATICFILES_DIRS = (
|
|
||||||
# Put strings here, like "/home/html/static" or "C:/www/django/static".
|
|
||||||
# Always use forward slashes, even on Windows.
|
|
||||||
# Don't forget to use absolute paths, not relative paths.
|
|
||||||
)
|
|
||||||
|
|
||||||
# List of finder classes that know how to find static files in
|
|
||||||
# various locations.
|
|
||||||
STATICFILES_FINDERS = (
|
|
||||||
'django.contrib.staticfiles.finders.FileSystemFinder',
|
|
||||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
|
||||||
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
|
|
||||||
)
|
|
||||||
|
|
||||||
# Make this unique, and don't share it with anybody.
|
|
||||||
SECRET_KEY = '@$87s&royz$nvav^3*$4u6^htybq*o=ge504rqp7r2)@ec*g(3'
|
|
||||||
|
|
||||||
# List of callables that know how to import templates from various sources.
|
|
||||||
TEMPLATE_LOADERS = (
|
|
||||||
'django.template.loaders.filesystem.Loader',
|
|
||||||
'django.template.loaders.app_directories.Loader',
|
|
||||||
# 'django.template.loaders.eggs.Loader',
|
|
||||||
)
|
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES = (
|
|
||||||
'django.middleware.common.CommonMiddleware',
|
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
||||||
'django.middleware.csrf.CsrfViewMiddleware',
|
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
|
||||||
)
|
|
||||||
|
|
||||||
ROOT_URLCONF = 'haystack.urls'
|
|
||||||
|
|
||||||
TEMPLATE_DIRS = (
|
|
||||||
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
|
|
||||||
# Always use forward slashes, even on Windows.
|
|
||||||
# Don't forget to use absolute paths, not relative paths.
|
|
||||||
)
|
|
||||||
|
|
||||||
INSTALLED_APPS = (
|
|
||||||
'django.contrib.auth',
|
|
||||||
'django.contrib.contenttypes',
|
|
||||||
'django.contrib.sessions',
|
|
||||||
'django.contrib.sites',
|
|
||||||
'django.contrib.messages',
|
|
||||||
'django.contrib.staticfiles',
|
|
||||||
# Uncomment the next line to enable the admin:
|
|
||||||
# 'django.contrib.admin',
|
|
||||||
# Uncomment the next line to enable admin documentation:
|
|
||||||
# 'django.contrib.admindocs',
|
|
||||||
)
|
|
||||||
|
|
||||||
# A sample logging configuration. The only tangible logging
|
|
||||||
# performed by this configuration is to send an email to
|
|
||||||
# the site admins on every HTTP 500 error.
|
|
||||||
# See http://docs.djangoproject.com/en/dev/topics/logging for
|
|
||||||
# more details on how to customize your logging configuration.
|
|
||||||
LOGGING = {
|
|
||||||
'version': 1,
|
|
||||||
'disable_existing_loggers': False,
|
|
||||||
'handlers': {
|
|
||||||
'mail_admins': {
|
|
||||||
'level': 'ERROR',
|
|
||||||
'class': 'django.utils.log.AdminEmailHandler'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'loggers': {
|
|
||||||
'django.request': {
|
|
||||||
'handlers': ['mail_admins'],
|
|
||||||
'level': 'ERROR',
|
|
||||||
'propagate': True,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
from django.conf.urls.defaults import patterns, include, url
|
|
||||||
|
|
||||||
# Uncomment the next two lines to enable the admin:
|
|
||||||
# from django.contrib import admin
|
|
||||||
# admin.autodiscover()
|
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
|
||||||
# Examples:
|
|
||||||
# url(r'^$', 'haystack.views.home', name='home'),
|
|
||||||
# url(r'^haystack/', include('haystack.foo.urls')),
|
|
||||||
|
|
||||||
# Uncomment the admin/doc line below to enable admin documentation:
|
|
||||||
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
|
||||||
|
|
||||||
# Uncomment the next line to enable the admin:
|
|
||||||
# url(r'^admin/', include(admin.site.urls)),
|
|
||||||
)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
django==1.3
|
|
||||||
BIN
Binary file not shown.
@@ -1,154 +0,0 @@
|
|||||||
# Django settings for haystack project.
|
|
||||||
|
|
||||||
DEBUG = True
|
|
||||||
TEMPLATE_DEBUG = DEBUG
|
|
||||||
|
|
||||||
ADMINS = (
|
|
||||||
# ('Your Name', 'your_email@example.com'),
|
|
||||||
)
|
|
||||||
|
|
||||||
MANAGERS = ADMINS
|
|
||||||
|
|
||||||
DATABASES = {
|
|
||||||
'default': {
|
|
||||||
'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
|
|
||||||
'NAME': '', # Or path to database file if using sqlite3.
|
|
||||||
'USER': '', # Not used with sqlite3.
|
|
||||||
'PASSWORD': '', # Not used with sqlite3.
|
|
||||||
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
|
|
||||||
'PORT': '', # Set to empty string for default. Not used with sqlite3.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Local time zone for this installation. Choices can be found here:
|
|
||||||
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
|
||||||
# although not all choices may be available on all operating systems.
|
|
||||||
# On Unix systems, a value of None will cause Django to use the same
|
|
||||||
# timezone as the operating system.
|
|
||||||
# If running in a Windows environment this must be set to the same as your
|
|
||||||
# system time zone.
|
|
||||||
TIME_ZONE = 'America/Chicago'
|
|
||||||
|
|
||||||
# Language code for this installation. All choices can be found here:
|
|
||||||
# http://www.i18nguy.com/unicode/language-identifiers.html
|
|
||||||
LANGUAGE_CODE = 'en-us'
|
|
||||||
|
|
||||||
SITE_ID = 1
|
|
||||||
|
|
||||||
# If you set this to False, Django will make some optimizations so as not
|
|
||||||
# to load the internationalization machinery.
|
|
||||||
USE_I18N = True
|
|
||||||
|
|
||||||
# If you set this to False, Django will not format dates, numbers and
|
|
||||||
# calendars according to the current locale.
|
|
||||||
USE_L10N = True
|
|
||||||
|
|
||||||
# If you set this to False, Django will not use timezone-aware datetimes.
|
|
||||||
USE_TZ = True
|
|
||||||
|
|
||||||
# Absolute filesystem path to the directory that will hold user-uploaded files.
|
|
||||||
# Example: "/home/media/media.lawrence.com/media/"
|
|
||||||
MEDIA_ROOT = ''
|
|
||||||
|
|
||||||
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
|
|
||||||
# trailing slash.
|
|
||||||
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
|
|
||||||
MEDIA_URL = ''
|
|
||||||
|
|
||||||
# Absolute path to the directory static files should be collected to.
|
|
||||||
# Don't put anything in this directory yourself; store your static files
|
|
||||||
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
|
|
||||||
# Example: "/home/media/media.lawrence.com/static/"
|
|
||||||
STATIC_ROOT = ''
|
|
||||||
|
|
||||||
# URL prefix for static files.
|
|
||||||
# Example: "http://media.lawrence.com/static/"
|
|
||||||
STATIC_URL = '/static/'
|
|
||||||
|
|
||||||
# Additional locations of static files
|
|
||||||
STATICFILES_DIRS = (
|
|
||||||
# Put strings here, like "/home/html/static" or "C:/www/django/static".
|
|
||||||
# Always use forward slashes, even on Windows.
|
|
||||||
# Don't forget to use absolute paths, not relative paths.
|
|
||||||
)
|
|
||||||
|
|
||||||
# List of finder classes that know how to find static files in
|
|
||||||
# various locations.
|
|
||||||
STATICFILES_FINDERS = (
|
|
||||||
'django.contrib.staticfiles.finders.FileSystemFinder',
|
|
||||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
|
||||||
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
|
|
||||||
)
|
|
||||||
|
|
||||||
# Make this unique, and don't share it with anybody.
|
|
||||||
SECRET_KEY = '633$+yuh67kvt_v8gpi9zmkvqb*m5nts6&a=q^dwhi+e#^j_ki'
|
|
||||||
|
|
||||||
# List of callables that know how to import templates from various sources.
|
|
||||||
TEMPLATE_LOADERS = (
|
|
||||||
'django.template.loaders.filesystem.Loader',
|
|
||||||
'django.template.loaders.app_directories.Loader',
|
|
||||||
# 'django.template.loaders.eggs.Loader',
|
|
||||||
)
|
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES = (
|
|
||||||
'django.middleware.common.CommonMiddleware',
|
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
||||||
'django.middleware.csrf.CsrfViewMiddleware',
|
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
|
||||||
# Uncomment the next line for simple clickjacking protection:
|
|
||||||
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
|
||||||
)
|
|
||||||
|
|
||||||
ROOT_URLCONF = 'haystack.urls'
|
|
||||||
|
|
||||||
# Python dotted path to the WSGI application used by Django's runserver.
|
|
||||||
WSGI_APPLICATION = 'haystack.wsgi.application'
|
|
||||||
|
|
||||||
TEMPLATE_DIRS = (
|
|
||||||
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
|
|
||||||
# Always use forward slashes, even on Windows.
|
|
||||||
# Don't forget to use absolute paths, not relative paths.
|
|
||||||
)
|
|
||||||
|
|
||||||
INSTALLED_APPS = (
|
|
||||||
'django.contrib.auth',
|
|
||||||
'django.contrib.contenttypes',
|
|
||||||
'django.contrib.sessions',
|
|
||||||
'django.contrib.sites',
|
|
||||||
'django.contrib.messages',
|
|
||||||
'django.contrib.staticfiles',
|
|
||||||
# Uncomment the next line to enable the admin:
|
|
||||||
# 'django.contrib.admin',
|
|
||||||
# Uncomment the next line to enable admin documentation:
|
|
||||||
# 'django.contrib.admindocs',
|
|
||||||
)
|
|
||||||
|
|
||||||
# A sample logging configuration. The only tangible logging
|
|
||||||
# performed by this configuration is to send an email to
|
|
||||||
# the site admins on every HTTP 500 error when DEBUG=False.
|
|
||||||
# See http://docs.djangoproject.com/en/dev/topics/logging for
|
|
||||||
# more details on how to customize your logging configuration.
|
|
||||||
LOGGING = {
|
|
||||||
'version': 1,
|
|
||||||
'disable_existing_loggers': False,
|
|
||||||
'filters': {
|
|
||||||
'require_debug_false': {
|
|
||||||
'()': 'django.utils.log.RequireDebugFalse'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'handlers': {
|
|
||||||
'mail_admins': {
|
|
||||||
'level': 'ERROR',
|
|
||||||
'filters': ['require_debug_false'],
|
|
||||||
'class': 'django.utils.log.AdminEmailHandler'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'loggers': {
|
|
||||||
'django.request': {
|
|
||||||
'handlers': ['mail_admins'],
|
|
||||||
'level': 'ERROR',
|
|
||||||
'propagate': True,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
from django.conf.urls import patterns, include, url
|
|
||||||
|
|
||||||
# Uncomment the next two lines to enable the admin:
|
|
||||||
# from django.contrib import admin
|
|
||||||
# admin.autodiscover()
|
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
|
||||||
# Examples:
|
|
||||||
# url(r'^$', 'haystack.views.home', name='home'),
|
|
||||||
# url(r'^haystack/', include('haystack.foo.urls')),
|
|
||||||
|
|
||||||
# Uncomment the admin/doc line below to enable admin documentation:
|
|
||||||
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
|
||||||
|
|
||||||
# Uncomment the next line to enable the admin:
|
|
||||||
# url(r'^admin/', include(admin.site.urls)),
|
|
||||||
)
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
"""
|
|
||||||
WSGI config for haystack project.
|
|
||||||
|
|
||||||
This module contains the WSGI application used by Django's development server
|
|
||||||
and any production WSGI deployments. It should expose a module-level variable
|
|
||||||
named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
|
|
||||||
this application via the ``WSGI_APPLICATION`` setting.
|
|
||||||
|
|
||||||
Usually you will have the standard Django WSGI application here, but it also
|
|
||||||
might make sense to replace the whole Django WSGI application with a custom one
|
|
||||||
that later delegates to the Django one. For example, you could introduce WSGI
|
|
||||||
middleware here, or combine a Django application with an application of another
|
|
||||||
framework.
|
|
||||||
|
|
||||||
"""
|
|
||||||
import os
|
|
||||||
|
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "haystack.settings")
|
|
||||||
|
|
||||||
# This application object is used by any WSGI server configured to use this
|
|
||||||
# file. This includes Django's development server, if the WSGI_APPLICATION
|
|
||||||
# setting points here.
|
|
||||||
from django.core.wsgi import get_wsgi_application
|
|
||||||
application = get_wsgi_application()
|
|
||||||
|
|
||||||
# Apply WSGI middleware here.
|
|
||||||
# from helloworld.wsgi import HelloWorldApplication
|
|
||||||
# application = HelloWorldApplication(application)
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "haystack.settings")
|
|
||||||
|
|
||||||
from django.core.management import execute_from_command_line
|
|
||||||
|
|
||||||
execute_from_command_line(sys.argv)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Django==1.4
|
|
||||||
@@ -1,156 +0,0 @@
|
|||||||
# Django settings for haystack project.
|
|
||||||
|
|
||||||
DEBUG = True
|
|
||||||
TEMPLATE_DEBUG = DEBUG
|
|
||||||
|
|
||||||
ADMINS = (
|
|
||||||
# ('Your Name', 'your_email@example.com'),
|
|
||||||
)
|
|
||||||
|
|
||||||
MANAGERS = ADMINS
|
|
||||||
|
|
||||||
DATABASES = {
|
|
||||||
'default': {
|
|
||||||
'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
|
|
||||||
'NAME': '', # Or path to database file if using sqlite3.
|
|
||||||
# The following settings are not used with sqlite3:
|
|
||||||
'USER': '',
|
|
||||||
'PASSWORD': '',
|
|
||||||
'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
|
|
||||||
'PORT': '', # Set to empty string for default.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Hosts/domain names that are valid for this site; required if DEBUG is False
|
|
||||||
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
|
|
||||||
ALLOWED_HOSTS = []
|
|
||||||
|
|
||||||
# Local time zone for this installation. Choices can be found here:
|
|
||||||
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
|
||||||
# although not all choices may be available on all operating systems.
|
|
||||||
# In a Windows environment this must be set to your system time zone.
|
|
||||||
TIME_ZONE = 'America/Chicago'
|
|
||||||
|
|
||||||
# Language code for this installation. All choices can be found here:
|
|
||||||
# http://www.i18nguy.com/unicode/language-identifiers.html
|
|
||||||
LANGUAGE_CODE = 'en-us'
|
|
||||||
|
|
||||||
SITE_ID = 1
|
|
||||||
|
|
||||||
# If you set this to False, Django will make some optimizations so as not
|
|
||||||
# to load the internationalization machinery.
|
|
||||||
USE_I18N = True
|
|
||||||
|
|
||||||
# If you set this to False, Django will not format dates, numbers and
|
|
||||||
# calendars according to the current locale.
|
|
||||||
USE_L10N = True
|
|
||||||
|
|
||||||
# If you set this to False, Django will not use timezone-aware datetimes.
|
|
||||||
USE_TZ = True
|
|
||||||
|
|
||||||
# Absolute filesystem path to the directory that will hold user-uploaded files.
|
|
||||||
# Example: "/var/www/example.com/media/"
|
|
||||||
MEDIA_ROOT = ''
|
|
||||||
|
|
||||||
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
|
|
||||||
# trailing slash.
|
|
||||||
# Examples: "http://example.com/media/", "http://media.example.com/"
|
|
||||||
MEDIA_URL = ''
|
|
||||||
|
|
||||||
# Absolute path to the directory static files should be collected to.
|
|
||||||
# Don't put anything in this directory yourself; store your static files
|
|
||||||
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
|
|
||||||
# Example: "/var/www/example.com/static/"
|
|
||||||
STATIC_ROOT = ''
|
|
||||||
|
|
||||||
# URL prefix for static files.
|
|
||||||
# Example: "http://example.com/static/", "http://static.example.com/"
|
|
||||||
STATIC_URL = '/static/'
|
|
||||||
|
|
||||||
# Additional locations of static files
|
|
||||||
STATICFILES_DIRS = (
|
|
||||||
# Put strings here, like "/home/html/static" or "C:/www/django/static".
|
|
||||||
# Always use forward slashes, even on Windows.
|
|
||||||
# Don't forget to use absolute paths, not relative paths.
|
|
||||||
)
|
|
||||||
|
|
||||||
# List of finder classes that know how to find static files in
|
|
||||||
# various locations.
|
|
||||||
STATICFILES_FINDERS = (
|
|
||||||
'django.contrib.staticfiles.finders.FileSystemFinder',
|
|
||||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
|
||||||
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
|
|
||||||
)
|
|
||||||
|
|
||||||
# Make this unique, and don't share it with anybody.
|
|
||||||
SECRET_KEY = '@w-1$9#jh05!qvbh#1k)c4=w9llcq116f$5(4&s_c)n4@%n=pc'
|
|
||||||
|
|
||||||
# List of callables that know how to import templates from various sources.
|
|
||||||
TEMPLATE_LOADERS = (
|
|
||||||
'django.template.loaders.filesystem.Loader',
|
|
||||||
'django.template.loaders.app_directories.Loader',
|
|
||||||
# 'django.template.loaders.eggs.Loader',
|
|
||||||
)
|
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES = (
|
|
||||||
'django.middleware.common.CommonMiddleware',
|
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
||||||
'django.middleware.csrf.CsrfViewMiddleware',
|
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
|
||||||
# Uncomment the next line for simple clickjacking protection:
|
|
||||||
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
|
||||||
)
|
|
||||||
|
|
||||||
ROOT_URLCONF = 'haystack.urls'
|
|
||||||
|
|
||||||
# Python dotted path to the WSGI application used by Django's runserver.
|
|
||||||
WSGI_APPLICATION = 'haystack.wsgi.application'
|
|
||||||
|
|
||||||
TEMPLATE_DIRS = (
|
|
||||||
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
|
|
||||||
# Always use forward slashes, even on Windows.
|
|
||||||
# Don't forget to use absolute paths, not relative paths.
|
|
||||||
)
|
|
||||||
|
|
||||||
INSTALLED_APPS = (
|
|
||||||
'django.contrib.auth',
|
|
||||||
'django.contrib.contenttypes',
|
|
||||||
'django.contrib.sessions',
|
|
||||||
'django.contrib.sites',
|
|
||||||
'django.contrib.messages',
|
|
||||||
'django.contrib.staticfiles',
|
|
||||||
# Uncomment the next line to enable the admin:
|
|
||||||
# 'django.contrib.admin',
|
|
||||||
# Uncomment the next line to enable admin documentation:
|
|
||||||
# 'django.contrib.admindocs',
|
|
||||||
)
|
|
||||||
|
|
||||||
# A sample logging configuration. The only tangible logging
|
|
||||||
# performed by this configuration is to send an email to
|
|
||||||
# the site admins on every HTTP 500 error when DEBUG=False.
|
|
||||||
# See http://docs.djangoproject.com/en/dev/topics/logging for
|
|
||||||
# more details on how to customize your logging configuration.
|
|
||||||
LOGGING = {
|
|
||||||
'version': 1,
|
|
||||||
'disable_existing_loggers': False,
|
|
||||||
'filters': {
|
|
||||||
'require_debug_false': {
|
|
||||||
'()': 'django.utils.log.RequireDebugFalse'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'handlers': {
|
|
||||||
'mail_admins': {
|
|
||||||
'level': 'ERROR',
|
|
||||||
'filters': ['require_debug_false'],
|
|
||||||
'class': 'django.utils.log.AdminEmailHandler'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'loggers': {
|
|
||||||
'django.request': {
|
|
||||||
'handlers': ['mail_admins'],
|
|
||||||
'level': 'ERROR',
|
|
||||||
'propagate': True,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
from django.conf.urls import patterns, include, url
|
|
||||||
|
|
||||||
# Uncomment the next two lines to enable the admin:
|
|
||||||
# from django.contrib import admin
|
|
||||||
# admin.autodiscover()
|
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
|
||||||
# Examples:
|
|
||||||
# url(r'^$', 'haystack.views.home', name='home'),
|
|
||||||
# url(r'^haystack/', include('haystack.foo.urls')),
|
|
||||||
|
|
||||||
# Uncomment the admin/doc line below to enable admin documentation:
|
|
||||||
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
|
||||||
|
|
||||||
# Uncomment the next line to enable the admin:
|
|
||||||
# url(r'^admin/', include(admin.site.urls)),
|
|
||||||
)
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
"""
|
|
||||||
WSGI config for haystack project.
|
|
||||||
|
|
||||||
This module contains the WSGI application used by Django's development server
|
|
||||||
and any production WSGI deployments. It should expose a module-level variable
|
|
||||||
named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
|
|
||||||
this application via the ``WSGI_APPLICATION`` setting.
|
|
||||||
|
|
||||||
Usually you will have the standard Django WSGI application here, but it also
|
|
||||||
might make sense to replace the whole Django WSGI application with a custom one
|
|
||||||
that later delegates to the Django one. For example, you could introduce WSGI
|
|
||||||
middleware here, or combine a Django application with an application of another
|
|
||||||
framework.
|
|
||||||
|
|
||||||
"""
|
|
||||||
import os
|
|
||||||
|
|
||||||
# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
|
|
||||||
# if running multiple sites in the same mod_wsgi process. To fix this, use
|
|
||||||
# mod_wsgi daemon mode with each site in its own daemon process, or use
|
|
||||||
# os.environ["DJANGO_SETTINGS_MODULE"] = "haystack.settings"
|
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "haystack.settings")
|
|
||||||
|
|
||||||
# This application object is used by any WSGI server configured to use this
|
|
||||||
# file. This includes Django's development server, if the WSGI_APPLICATION
|
|
||||||
# setting points here.
|
|
||||||
from django.core.wsgi import get_wsgi_application
|
|
||||||
application = get_wsgi_application()
|
|
||||||
|
|
||||||
# Apply WSGI middleware here.
|
|
||||||
# from helloworld.wsgi import HelloWorldApplication
|
|
||||||
# application = HelloWorldApplication(application)
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "haystack.settings")
|
|
||||||
|
|
||||||
from django.core.management import execute_from_command_line
|
|
||||||
|
|
||||||
execute_from_command_line(sys.argv)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
django==1.5
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
try:
|
|
||||||
from setuptools import setup
|
|
||||||
except ImportError:
|
|
||||||
from distutils.core import setup
|
|
||||||
|
|
||||||
required = ['httpbin']
|
|
||||||
|
|
||||||
setup(
|
|
||||||
name='haystack',
|
|
||||||
version='0.0.1',
|
|
||||||
description='Simple API for running external processes.',
|
|
||||||
author='Kenneth Reitz',
|
|
||||||
author_email='me@kennethreitz.com',
|
|
||||||
install_requires=required,
|
|
||||||
license='MIT',
|
|
||||||
classifiers=(
|
|
||||||
'Development Status :: 5 - Production/Stable',
|
|
||||||
'Intended Audience :: Developers',
|
|
||||||
'Natural Language :: English',
|
|
||||||
'License :: OSI Approved :: MIT License',
|
|
||||||
'Programming Language :: Python',
|
|
||||||
'Programming Language :: Python :: 2.5',
|
|
||||||
'Programming Language :: Python :: 2.6',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
|
||||||
# 'Programming Language :: Python :: 3.0',
|
|
||||||
# 'Programming Language :: Python :: 3.1',
|
|
||||||
),
|
|
||||||
)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
flask==0.8
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
pylibmc
|
|
||||||
psycopg2
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
requests
|
|
||||||
distribute==0.6.49
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
requests==1.0.3
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
python-3.3.2
|
|
||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python2
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|||||||
Vendored
-120
@@ -1,120 +0,0 @@
|
|||||||
Alex Gaynor
|
|
||||||
Alex Grönholm
|
|
||||||
Alex Morega
|
|
||||||
Alexandre Conrad
|
|
||||||
Andrey Bulgakov
|
|
||||||
Anrs Hu
|
|
||||||
Anton Patrushev
|
|
||||||
Antti Kaihola
|
|
||||||
Armin Ronacher
|
|
||||||
Aziz Köksal
|
|
||||||
Ben Rosser
|
|
||||||
Bernardo B. Marques
|
|
||||||
Bradley Ayers
|
|
||||||
Brian Rosner
|
|
||||||
Carl Meyer
|
|
||||||
Chris McDonough
|
|
||||||
Christian Oudard
|
|
||||||
Clay McClure
|
|
||||||
Cody Soyland
|
|
||||||
Craig Kerstiens
|
|
||||||
Cristian Sorinel
|
|
||||||
Dan Sully
|
|
||||||
Daniel Holth
|
|
||||||
Dave Abrahams
|
|
||||||
David (d1b)
|
|
||||||
David Aguilar
|
|
||||||
David Evans
|
|
||||||
David Pursehouse
|
|
||||||
dengzhp
|
|
||||||
Dmitry Gladkov
|
|
||||||
Donald Stufft
|
|
||||||
Endoh Takanao
|
|
||||||
enoch
|
|
||||||
Erik M. Bray
|
|
||||||
Francesco
|
|
||||||
Gabriel de Perthuis
|
|
||||||
Garry Polley
|
|
||||||
Geoffrey Lehée
|
|
||||||
George Song
|
|
||||||
Georgi Valkov
|
|
||||||
Herbert Pfennig
|
|
||||||
hetmankp
|
|
||||||
Hugo Lopes Tavares
|
|
||||||
Hynek Schlawack
|
|
||||||
Ian Bicking
|
|
||||||
Igor Sobreira
|
|
||||||
Ionel Maries Cristian
|
|
||||||
Jakub Vysoky
|
|
||||||
James Cleveland
|
|
||||||
Jannis Leidel
|
|
||||||
Jakub Stasiak
|
|
||||||
Jay Graves
|
|
||||||
Jeff Dairiki
|
|
||||||
John-Scott Atlakson
|
|
||||||
Jon Parise
|
|
||||||
Jonas Nockert
|
|
||||||
Jon Parise
|
|
||||||
Jorge Niedbalski
|
|
||||||
Josh Bronson
|
|
||||||
Josh Hansen
|
|
||||||
Kamal Bin Mustafa
|
|
||||||
Kelsey Hightower
|
|
||||||
Kenneth Belitzky
|
|
||||||
Kenneth Reitz
|
|
||||||
Kevin Frommelt
|
|
||||||
Kumar McMillan
|
|
||||||
Lev Givon
|
|
||||||
Lincoln de Sousa
|
|
||||||
Luke Macken
|
|
||||||
Masklinn
|
|
||||||
Marc Abramowitz
|
|
||||||
Marc Tamlyn
|
|
||||||
Marcus Smith
|
|
||||||
Markus Hametner
|
|
||||||
Matt Maker
|
|
||||||
Maxime Rouyrre
|
|
||||||
Michael Williamson
|
|
||||||
Miguel Araujo Perez
|
|
||||||
Monty Taylor
|
|
||||||
Nick Stenning
|
|
||||||
Nowell Strite
|
|
||||||
Oliver Tonnhofer
|
|
||||||
Olivier Girardot
|
|
||||||
Ollie Rutherfurd
|
|
||||||
Oren Held
|
|
||||||
Patrick Jenkins
|
|
||||||
Patrick Dubroy
|
|
||||||
Paul Moore
|
|
||||||
Paul Nasrat
|
|
||||||
Paul Oswald
|
|
||||||
Paul van der Linden
|
|
||||||
Peter Waller
|
|
||||||
Phil Freo
|
|
||||||
Phil Whelan
|
|
||||||
Piet Delport
|
|
||||||
Preston Holmes
|
|
||||||
Przemek Wrzos
|
|
||||||
Qiangning Hong
|
|
||||||
Rafael Caricio
|
|
||||||
Rene Dudfield
|
|
||||||
Roey Berman
|
|
||||||
Ronny Pfannschmidt
|
|
||||||
Rory McCann
|
|
||||||
Ross Brattain
|
|
||||||
Sergey Vasilyev
|
|
||||||
Seth Woodworth
|
|
||||||
Simon Cross
|
|
||||||
Stavros Korokithakis
|
|
||||||
Stéphane Klein
|
|
||||||
Steven Myint
|
|
||||||
Takayuki SHIMIZUKAWA
|
|
||||||
Thomas Fenzl
|
|
||||||
Thomas Johansson
|
|
||||||
Toshio Kuratomi
|
|
||||||
Travis Swicegood
|
|
||||||
Vinay Sajip
|
|
||||||
Vitaly Babiy
|
|
||||||
W. Trevor King
|
|
||||||
Wil Tan
|
|
||||||
Hsiaoming Yang
|
|
||||||
Vendored
-915
@@ -1,915 +0,0 @@
|
|||||||
**1.5.4 (2014-02-21)**
|
|
||||||
|
|
||||||
|
|
||||||
* Correct deprecation warning for ``pip install --build`` to only notify when
|
|
||||||
the `--build` value is different than the default.
|
|
||||||
|
|
||||||
|
|
||||||
**1.5.3 (2014-02-20)**
|
|
||||||
|
|
||||||
|
|
||||||
* **DEPRECATION** ``pip install --build`` and ``pip install --no-clean`` are now
|
|
||||||
deprecated. See Issue #906 for discussion.
|
|
||||||
|
|
||||||
* Fixed #1112. Couldn't download directly from wheel paths/urls, and when wheel
|
|
||||||
downloads did occur using requirement specifiers, dependencies weren't
|
|
||||||
downloaded (PR #1527)
|
|
||||||
|
|
||||||
* Fixed #1320. ``pip wheel`` was not downloading wheels that already existed (PR
|
|
||||||
#1524)
|
|
||||||
|
|
||||||
* Fixed #1111. ``pip install --download`` was failing using local
|
|
||||||
``--find-links`` (PR #1524)
|
|
||||||
|
|
||||||
* Workaround for Python bug http://bugs.python.org/issue20053 (PR #1544)
|
|
||||||
|
|
||||||
* Don't pass a unicode __file__ to setup.py on Python 2.x (PR #1583)
|
|
||||||
|
|
||||||
* Verify that the Wheel version is compatible with this pip (PR #1569)
|
|
||||||
|
|
||||||
|
|
||||||
**1.5.2 (2014-01-26)**
|
|
||||||
|
|
||||||
|
|
||||||
* Upgraded the vendored ``pkg_resources`` and ``_markerlib`` to setuptools 2.1.
|
|
||||||
|
|
||||||
* Fixed an error that prevented accessing PyPI when pyopenssl, ndg-httpsclient,
|
|
||||||
and pyasn1 are installed
|
|
||||||
|
|
||||||
* Fixed an issue that caused trailing comments to be incorrectly included as
|
|
||||||
part of the URL in a requirements file
|
|
||||||
|
|
||||||
|
|
||||||
**1.5.1 (2014-01-20)**
|
|
||||||
|
|
||||||
|
|
||||||
* pip now only requires setuptools (any setuptools, not a certain version) when
|
|
||||||
installing distributions from src (i.e. not from wheel). (Pull #1434).
|
|
||||||
|
|
||||||
* `get-pip.py` now installs setuptools, when it's not already installed (Pull
|
|
||||||
#1475)
|
|
||||||
|
|
||||||
* Don't decode downloaded files that have a ``Content-Encoding`` header. (Pull
|
|
||||||
#1435)
|
|
||||||
|
|
||||||
* Fix to correctly parse wheel filenames with single digit versions. (Pull
|
|
||||||
#1445)
|
|
||||||
|
|
||||||
* If `--allow-unverified` is used assume it also means `--allow-external`. (Pull
|
|
||||||
#1457)
|
|
||||||
|
|
||||||
|
|
||||||
**1.5 (2014-01-01)**
|
|
||||||
|
|
||||||
|
|
||||||
* **BACKWARD INCOMPATIBLE** pip no longer supports the ``--use-mirrors``,
|
|
||||||
``-M``, and ``--mirrors`` flags. The mirroring support has been removed. In
|
|
||||||
order to use a mirror specify it as the primary index with ``-i`` or
|
|
||||||
``--index-url``, or as an additional index with ``--extra-index-url``. (Pull #1098, CVE-2013-5123)
|
|
||||||
|
|
||||||
* **BACKWARD INCOMPATIBLE** pip no longer will scrape insecure external urls by
|
|
||||||
default nor will it install externally hosted files by default. Users may opt
|
|
||||||
into installing externally hosted or insecure files or urls using
|
|
||||||
``--allow-external PROJECT`` and ``--allow-unverified PROJECT``. (Pull #1055)
|
|
||||||
|
|
||||||
* **BACKWARD INCOMPATIBLE** pip no longer respects dependency links by default.
|
|
||||||
Users may opt into respecting them again using ``--process-dependency-links``.
|
|
||||||
|
|
||||||
* **DEPRECATION** ``pip install --no-install`` and ``pip install
|
|
||||||
--no-download`` are now formally deprecated. See Issue #906 for discussion on
|
|
||||||
possible alternatives, or lack thereof, in future releases.
|
|
||||||
|
|
||||||
* **DEPRECATION** ``pip zip`` and ``pip unzip`` are now formally deprecated.
|
|
||||||
|
|
||||||
* pip will now install Mac OSX platform wheels from PyPI. (Pull #1278)
|
|
||||||
|
|
||||||
* pip now generates the appropriate platform-specific console scripts when
|
|
||||||
installing wheels. (Pull #1251)
|
|
||||||
|
|
||||||
* Pip now confirms a wheel is supported when installing directly from a path or
|
|
||||||
url. (Pull #1315)
|
|
||||||
|
|
||||||
* Fixed #1097, ``--ignore-installed`` now behaves again as designed, after it was
|
|
||||||
unintentionally broke in v0.8.3 when fixing Issue #14 (Pull #1352).
|
|
||||||
|
|
||||||
* Fixed a bug where global scripts were being removed when uninstalling --user
|
|
||||||
installed packages (Pull #1353).
|
|
||||||
|
|
||||||
* Fixed #1163, --user wasn't being respected when installing scripts from wheels (Pull #1176).
|
|
||||||
|
|
||||||
* Fixed #1150, we now assume '_' means '-' in versions from wheel filenames (Pull #1158).
|
|
||||||
|
|
||||||
* Fixed #219, error when using --log with a failed install (Pull #1205).
|
|
||||||
|
|
||||||
* Fixed #1131, logging was buffered and choppy in Python 3.
|
|
||||||
|
|
||||||
* Fixed #70, --timeout was being ignored (Pull #1202).
|
|
||||||
|
|
||||||
* Fixed #772, error when setting PIP_EXISTS_ACTION (Pull #1201).
|
|
||||||
|
|
||||||
* Added colors to the logging output in order to draw attention to important
|
|
||||||
warnings and errors. (Pull #1109)
|
|
||||||
|
|
||||||
* Added warnings when using an insecure index, find-link, or dependency link. (Pull #1121)
|
|
||||||
|
|
||||||
* Added support for installing packages from a subdirectory using the ``subdirectory``
|
|
||||||
editable option. ( Pull #1082 )
|
|
||||||
|
|
||||||
* Fixed #1192. "TypeError: bad operand type for unary" in some cases when
|
|
||||||
installing wheels using --find-links (Pull #1218).
|
|
||||||
|
|
||||||
* Fixed #1133 and #317. Archive contents are now written based on system
|
|
||||||
defaults and umask (i.e. permissions are not preserved), except that regular
|
|
||||||
files with any execute permissions have the equivalent of "chmod +x" applied
|
|
||||||
after being written (Pull #1146).
|
|
||||||
|
|
||||||
* PreviousBuildDirError now returns a non-zero exit code and prevents the
|
|
||||||
previous build dir from being cleaned in all cases (Pull #1162).
|
|
||||||
|
|
||||||
* Renamed --allow-insecure to --allow-unverified, however the old name will
|
|
||||||
continue to work for a period of time (Pull #1257).
|
|
||||||
|
|
||||||
* Fixed #1006, error when installing local projects with symlinks in
|
|
||||||
Python 3. (Pull #1311)
|
|
||||||
|
|
||||||
* The previously hidden ``--log-file`` otion, is now shown as a general option.
|
|
||||||
(Pull #1316)
|
|
||||||
|
|
||||||
|
|
||||||
**1.4.1 (2013-08-07)**
|
|
||||||
|
|
||||||
|
|
||||||
* **New Signing Key** Release 1.4.1 is using a different key than normal with
|
|
||||||
fingerprint: 7C6B 7C5D 5E2B 6356 A926 F04F 6E3C BCE9 3372 DCFA
|
|
||||||
* Fixed issues with installing from pybundle files (Pull #1116).
|
|
||||||
* Fixed error when sysconfig module throws an exception (Pull #1095).
|
|
||||||
* Don't ignore already installed pre-releases (Pull #1076).
|
|
||||||
* Fixes related to upgrading setuptools (Pull #1092).
|
|
||||||
* Fixes so that --download works with wheel archives (Pull #1113).
|
|
||||||
* Fixes related to recognizing and cleaning global build dirs (Pull #1080).
|
|
||||||
|
|
||||||
|
|
||||||
**1.4 (2013-07-23)**
|
|
||||||
|
|
||||||
|
|
||||||
* **BACKWARD INCOMPATIBLE** pip now only installs stable versions by default,
|
|
||||||
and offers a new ``--pre`` option to also find pre-release and development
|
|
||||||
versions. (Pull #834)
|
|
||||||
|
|
||||||
* **BACKWARD INCOMPATIBLE** Dropped support for Python 2.5. The minimum
|
|
||||||
supported Python version for pip 1.4 is Python 2.6.
|
|
||||||
|
|
||||||
* Added support for installing and building wheel archives.
|
|
||||||
Thanks Daniel Holth, Marcus Smith, Paul Moore, and Michele Lacchia
|
|
||||||
(Pull #845)
|
|
||||||
|
|
||||||
* Applied security patch to pip's ssl support related to certificate DNS
|
|
||||||
wildcard matching (http://bugs.python.org/issue17980).
|
|
||||||
|
|
||||||
* To satisfy pip's setuptools requirement, pip now recommends setuptools>=0.8,
|
|
||||||
not distribute. setuptools and distribute are now merged into one project
|
|
||||||
called 'setuptools'. (Pull #1003)
|
|
||||||
|
|
||||||
* pip will now warn when installing a file that is either hosted externally to
|
|
||||||
the index or cannot be verified with a hash. In the future pip will default
|
|
||||||
to not installing them and will require the flags --allow-external NAME, and
|
|
||||||
--allow-insecure NAME respectively. (Pull #985)
|
|
||||||
|
|
||||||
* If an already-downloaded or cached file has a bad hash, re-download it rather
|
|
||||||
than erroring out. (Issue #963).
|
|
||||||
|
|
||||||
* ``pip bundle`` and support for installing from pybundle files is now
|
|
||||||
considered deprecated and will be removed in pip v1.5.
|
|
||||||
|
|
||||||
* Fixed a number of issues (#413, #709, #634, #602, and #939) related to
|
|
||||||
cleaning up and not reusing build directories. (Pull #865, #948)
|
|
||||||
|
|
||||||
* Added a User Agent so that pip is identifiable in logs. (Pull #901)
|
|
||||||
|
|
||||||
* Added ssl and --user support to get-pip.py. Thanks Gabriel de Perthuis.
|
|
||||||
(Pull #895)
|
|
||||||
|
|
||||||
* Fixed the proxy support, which was broken in pip 1.3.x (Pull #840)
|
|
||||||
|
|
||||||
* Fixed issue #32 - pip fails when server does not send content-type header.
|
|
||||||
Thanks Hugo Lopes Tavares and Kelsey Hightower (Pull #872).
|
|
||||||
|
|
||||||
* "Vendorized" distlib as pip.vendor.distlib (https://distlib.readthedocs.org/).
|
|
||||||
|
|
||||||
* Fixed git VCS backend with git 1.8.3. (Pull #967)
|
|
||||||
|
|
||||||
|
|
||||||
**1.3.1 (2013-03-08)**
|
|
||||||
|
|
||||||
|
|
||||||
* Fixed a major backward incompatible change of parsing URLs to externally
|
|
||||||
hosted packages that got accidentily included in 1.3.
|
|
||||||
|
|
||||||
|
|
||||||
**1.3 (2013-03-07)**
|
|
||||||
|
|
||||||
|
|
||||||
* SSL Cert Verification; Make https the default for PyPI access.
|
|
||||||
Thanks James Cleveland, Giovanni Bajo, Marcus Smith and many others (Pull #791, CVE-2013-1629).
|
|
||||||
|
|
||||||
* Added "pip list" for listing installed packages and the latest version
|
|
||||||
available. Thanks Rafael Caricio, Miguel Araujo, Dmitry Gladkov (Pull #752)
|
|
||||||
|
|
||||||
* Fixed security issues with pip's use of temp build directories.
|
|
||||||
Thanks David (d1b) and Thomas Guttler. (Pull #780, CVE-2013-1888)
|
|
||||||
|
|
||||||
* Improvements to sphinx docs and cli help. (Pull #773)
|
|
||||||
|
|
||||||
* Fixed issue #707, dealing with OS X temp dir handling, which was causing
|
|
||||||
global NumPy installs to fail. (Pull #768)
|
|
||||||
|
|
||||||
* Split help output into general vs command-specific option groups.
|
|
||||||
Thanks Georgi Valkov. (Pull #744; Pull #721 contains preceding refactor)
|
|
||||||
|
|
||||||
* Fixed dependency resolution when installing from archives with uppercase
|
|
||||||
project names. (Pull #724)
|
|
||||||
|
|
||||||
* Fixed problem where re-installs always occurred when using file:// find-links.
|
|
||||||
(Pulls #683/#702)
|
|
||||||
|
|
||||||
* "pip install -v" now shows the full download url, not just the archive name.
|
|
||||||
Thanks Marc Abramowitz (Pull #687)
|
|
||||||
|
|
||||||
* Fix to prevent unnecessary PyPI redirects. Thanks Alex Gronholm (Pull #695)
|
|
||||||
|
|
||||||
* Fixed issue #670 - install failure under Python 3 when the same version
|
|
||||||
of a package is found under 2 different URLs. Thanks Paul Moore (Pull #671)
|
|
||||||
|
|
||||||
* Fix git submodule recursive updates. Thanks Roey Berman. (Pulls #674)
|
|
||||||
|
|
||||||
* Explicitly ignore rel='download' links while looking for html pages.
|
|
||||||
Thanks Maxime R. (Pull #677)
|
|
||||||
|
|
||||||
* --user/--upgrade install options now work together. Thanks 'eevee' for
|
|
||||||
discovering the problem. (Pull #705)
|
|
||||||
|
|
||||||
* Added check in ``install --download`` to prevent re-downloading if the target
|
|
||||||
file already exists. Thanks Andrey Bulgakov. (Pull #669)
|
|
||||||
|
|
||||||
* Added support for bare paths (including relative paths) as argument to
|
|
||||||
`--find-links`. Thanks Paul Moore for draft patch.
|
|
||||||
|
|
||||||
* Added support for --no-index in requirements files.
|
|
||||||
|
|
||||||
* Added "pip show" command to get information about an installed package.
|
|
||||||
Fixes #131. Thanks Kelsey Hightower and Rafael Caricio.
|
|
||||||
|
|
||||||
* Added `--root` option for "pip install" to specify root directory. Behaves
|
|
||||||
like the same option in distutils but also plays nice with pip's egg-info.
|
|
||||||
Thanks Przemek Wrzos. (Issue #253 / Pull #693)
|
|
||||||
|
|
||||||
|
|
||||||
**1.2.1 (2012-09-06)**
|
|
||||||
|
|
||||||
|
|
||||||
* Fixed a regression introduced in 1.2 about raising an exception when
|
|
||||||
not finding any files to uninstall in the current environment. Thanks for
|
|
||||||
the fix, Marcus Smith.
|
|
||||||
|
|
||||||
|
|
||||||
**1.2 (2012-09-01)**
|
|
||||||
|
|
||||||
|
|
||||||
* **Dropped support for Python 2.4** The minimum supported Python version is
|
|
||||||
now Python 2.5.
|
|
||||||
|
|
||||||
* Fixed issue #605 - pypi mirror support broken on some DNS responses. Thanks
|
|
||||||
philwhin.
|
|
||||||
|
|
||||||
* Fixed issue #355 - pip uninstall removes files it didn't install. Thanks
|
|
||||||
pjdelport.
|
|
||||||
|
|
||||||
* Fixed issues #493, #494, #440, and #573 related to improving support for the
|
|
||||||
user installation scheme. Thanks Marcus Smith.
|
|
||||||
|
|
||||||
* Write failure log to temp file if default location is not writable. Thanks
|
|
||||||
andreigc.
|
|
||||||
|
|
||||||
* Pull in submodules for git editable checkouts. Fixes #289 and #421. Thanks
|
|
||||||
Hsiaoming Yang and Markus Hametner.
|
|
||||||
|
|
||||||
* Use a temporary directory as the default build location outside of a
|
|
||||||
virtualenv. Fixes issues #339 and #381. Thanks Ben Rosser.
|
|
||||||
|
|
||||||
* Added support for specifying extras with local editables. Thanks Nick
|
|
||||||
Stenning.
|
|
||||||
|
|
||||||
* Added ``--egg`` flag to request egg-style rather than flat installation. Refs
|
|
||||||
issue #3. Thanks Kamal Bin Mustafa.
|
|
||||||
|
|
||||||
* Fixed issue #510 - prevent e.g. ``gmpy2-2.0.tar.gz`` from matching a request
|
|
||||||
to ``pip install gmpy``; sdist filename must begin with full project name
|
|
||||||
followed by a dash. Thanks casevh for the report.
|
|
||||||
|
|
||||||
* Fixed issue #504 - allow package URLS to have querystrings. Thanks W.
|
|
||||||
Trevor King.
|
|
||||||
|
|
||||||
* Fixed issue #58 - pip freeze now falls back to non-editable format rather
|
|
||||||
than blowing up if it can't determine the origin repository of an editable.
|
|
||||||
Thanks Rory McCann.
|
|
||||||
|
|
||||||
* Added a `__main__.py` file to enable `python -m pip` on Python versions
|
|
||||||
that support it. Thanks Alexey Luchko.
|
|
||||||
|
|
||||||
* Fixed issue #487 - upgrade from VCS url of project that does exist on
|
|
||||||
index. Thanks Andrew Knapp for the report.
|
|
||||||
|
|
||||||
* Fixed issue #486 - fix upgrade from VCS url of project with no distribution
|
|
||||||
on index. Thanks Andrew Knapp for the report.
|
|
||||||
|
|
||||||
* Fixed issue #427 - clearer error message on a malformed VCS url. Thanks
|
|
||||||
Thomas Fenzl.
|
|
||||||
|
|
||||||
* Added support for using any of the built in guaranteed algorithms in
|
|
||||||
``hashlib`` as a checksum hash.
|
|
||||||
|
|
||||||
* Fixed issue #321 - Raise an exception if current working directory can't be
|
|
||||||
found or accessed.
|
|
||||||
|
|
||||||
* Fixed issue #82 - Removed special casing of the user directory and use the
|
|
||||||
Python default instead.
|
|
||||||
|
|
||||||
* Fixed #436 - Only warn about version conflicts if there is actually one.
|
|
||||||
This re-enables using ``==dev`` in requirements files.
|
|
||||||
|
|
||||||
* Moved tests to be run on Travis CI: http://travis-ci.org/pypa/pip
|
|
||||||
|
|
||||||
* Added a better help formatter.
|
|
||||||
|
|
||||||
|
|
||||||
**1.1 (2012-02-16)**
|
|
||||||
|
|
||||||
|
|
||||||
* Fixed issue #326 - don't crash when a package's setup.py emits UTF-8 and
|
|
||||||
then fails. Thanks Marc Abramowitz.
|
|
||||||
|
|
||||||
* Added ``--target`` option for installing directly to arbitrary directory.
|
|
||||||
Thanks Stavros Korokithakis.
|
|
||||||
|
|
||||||
* Added support for authentication with Subversion repositories. Thanks
|
|
||||||
Qiangning Hong.
|
|
||||||
|
|
||||||
* Fixed issue #315 - ``--download`` now downloads dependencies as well.
|
|
||||||
Thanks Qiangning Hong.
|
|
||||||
|
|
||||||
* Errors from subprocesses will display the current working directory.
|
|
||||||
Thanks Antti Kaihola.
|
|
||||||
|
|
||||||
* Fixed issue #369 - compatibility with Subversion 1.7. Thanks Qiangning
|
|
||||||
Hong. Note that setuptools remains incompatible with Subversion 1.7; to
|
|
||||||
get the benefits of pip's support you must use Distribute rather than
|
|
||||||
setuptools.
|
|
||||||
|
|
||||||
* Fixed issue #57 - ignore py2app-generated OS X mpkg zip files in finder.
|
|
||||||
Thanks Rene Dudfield.
|
|
||||||
|
|
||||||
* Fixed issue #182 - log to ~/Library/Logs/ by default on OS X framework
|
|
||||||
installs. Thanks Dan Callahan for report and patch.
|
|
||||||
|
|
||||||
* Fixed issue #310 - understand version tags without minor version ("py3")
|
|
||||||
in sdist filenames. Thanks Stuart Andrews for report and Olivier Girardot for
|
|
||||||
patch.
|
|
||||||
|
|
||||||
* Fixed issue #7 - Pip now supports optionally installing setuptools
|
|
||||||
"extras" dependencies; e.g. "pip install Paste[openid]". Thanks Matt Maker
|
|
||||||
and Olivier Girardot.
|
|
||||||
|
|
||||||
* Fixed issue #391 - freeze no longer borks on requirements files with
|
|
||||||
--index-url or --find-links. Thanks Herbert Pfennig.
|
|
||||||
|
|
||||||
* Fixed issue #288 - handle symlinks properly. Thanks lebedov for the patch.
|
|
||||||
|
|
||||||
* Fixed issue #49 - pip install -U no longer reinstalls the same versions of
|
|
||||||
packages. Thanks iguananaut for the pull request.
|
|
||||||
|
|
||||||
* Removed ``-E``/``--environment`` option and ``PIP_RESPECT_VIRTUALENV``;
|
|
||||||
both use a restart-in-venv mechanism that's broken, and neither one is
|
|
||||||
useful since every virtualenv now has pip inside it. Replace ``pip -E
|
|
||||||
path/to/venv install Foo`` with ``virtualenv path/to/venv &&
|
|
||||||
path/to/venv/pip install Foo``.
|
|
||||||
|
|
||||||
* Fixed issue #366 - pip throws IndexError when it calls `scraped_rel_links`
|
|
||||||
|
|
||||||
* Fixed issue #22 - pip search should set and return a userful shell status code
|
|
||||||
|
|
||||||
* Fixed issue #351 and #365 - added global ``--exists-action`` command line
|
|
||||||
option to easier script file exists conflicts, e.g. from editable
|
|
||||||
requirements from VCS that have a changed repo URL.
|
|
||||||
|
|
||||||
|
|
||||||
**1.0.2 (2011-07-16)**
|
|
||||||
|
|
||||||
|
|
||||||
* Fixed docs issues.
|
|
||||||
* Fixed issue #295 - Reinstall a package when using the ``install -I`` option
|
|
||||||
* Fixed issue #283 - Finds a Git tag pointing to same commit as origin/master
|
|
||||||
* Fixed issue #279 - Use absolute path for path to docs in setup.py
|
|
||||||
* Fixed issue #314 - Correctly handle exceptions on Python3.
|
|
||||||
* Fixed issue #320 - Correctly parse ``--editable`` lines in requirements files
|
|
||||||
|
|
||||||
|
|
||||||
**1.0.1 (2011-04-30)**
|
|
||||||
|
|
||||||
|
|
||||||
* Start to use git-flow.
|
|
||||||
* Fixed issue #274 - `find_command` should not raise AttributeError
|
|
||||||
* Fixed issue #273 - respect Content-Disposition header. Thanks Bradley Ayers.
|
|
||||||
* Fixed issue #233 - pathext handling on Windows.
|
|
||||||
* Fixed issue #252 - svn+svn protocol.
|
|
||||||
* Fixed issue #44 - multiple CLI searches.
|
|
||||||
* Fixed issue #266 - current working directory when running setup.py clean.
|
|
||||||
|
|
||||||
|
|
||||||
**1.0 (2011-04-04)**
|
|
||||||
|
|
||||||
|
|
||||||
* Added Python 3 support! Huge thanks to Vinay Sajip, Vitaly Babiy, Kelsey
|
|
||||||
Hightower, and Alex Gronholm, among others.
|
|
||||||
|
|
||||||
* Download progress only shown on a real TTY. Thanks Alex Morega.
|
|
||||||
|
|
||||||
* Fixed finding of VCS binaries to not be fooled by same-named directories.
|
|
||||||
Thanks Alex Morega.
|
|
||||||
|
|
||||||
* Fixed uninstall of packages from system Python for users of Debian/Ubuntu
|
|
||||||
python-setuptools package (workaround until fixed in Debian and Ubuntu).
|
|
||||||
|
|
||||||
* Added `get-pip.py <https://raw.github.com/pypa/pip/master/contrib/get-pip.py>`_
|
|
||||||
installer. Simply download and execute it, using the Python interpreter of
|
|
||||||
your choice::
|
|
||||||
|
|
||||||
$ curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
|
|
||||||
$ python get-pip.py
|
|
||||||
|
|
||||||
This may have to be run as root.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Make sure you have `distribute <http://pypi.python.org/pypi/distribute>`_
|
|
||||||
installed before using the installer!
|
|
||||||
|
|
||||||
|
|
||||||
**0.8.3**
|
|
||||||
|
|
||||||
|
|
||||||
* Moved main repository to Github: https://github.com/pypa/pip
|
|
||||||
|
|
||||||
* Transferred primary maintenance from Ian to Jannis Leidel, Carl Meyer, Brian Rosner
|
|
||||||
|
|
||||||
* Fixed issue #14 - No uninstall-on-upgrade with URL package. Thanks Oliver Tonnhofer
|
|
||||||
|
|
||||||
* Fixed issue #163 - Egg name not properly resolved. Thanks Igor Sobreira
|
|
||||||
|
|
||||||
* Fixed issue #178 - Non-alphabetical installation of requirements. Thanks Igor Sobreira
|
|
||||||
|
|
||||||
* Fixed issue #199 - Documentation mentions --index instead of --index-url. Thanks Kelsey Hightower
|
|
||||||
|
|
||||||
* Fixed issue #204 - rmtree undefined in mercurial.py. Thanks Kelsey Hightower
|
|
||||||
|
|
||||||
* Fixed bug in Git vcs backend that would break during reinstallation.
|
|
||||||
|
|
||||||
* Fixed bug in Mercurial vcs backend related to pip freeze and branch/tag resolution.
|
|
||||||
|
|
||||||
* Fixed bug in version string parsing related to the suffix "-dev".
|
|
||||||
|
|
||||||
|
|
||||||
**0.8.2**
|
|
||||||
|
|
||||||
|
|
||||||
* Avoid redundant unpacking of bundles (from pwaller)
|
|
||||||
|
|
||||||
* Fixed issue #32, #150, #161 - Fixed checking out the correct
|
|
||||||
tag/branch/commit when updating an editable Git requirement.
|
|
||||||
|
|
||||||
* Fixed issue #49 - Added ability to install version control requirements
|
|
||||||
without making them editable, e.g.::
|
|
||||||
|
|
||||||
pip install git+https://github.com/pypa/pip/
|
|
||||||
|
|
||||||
* Fixed issue #175 - Correctly locate build and source directory on Mac OS X.
|
|
||||||
|
|
||||||
* Added ``git+https://`` scheme to Git VCS backend.
|
|
||||||
|
|
||||||
|
|
||||||
**0.8.1**
|
|
||||||
|
|
||||||
|
|
||||||
* Added global --user flag as shortcut for --install-option="--user". From
|
|
||||||
Ronny Pfannschmidt.
|
|
||||||
|
|
||||||
* Added support for `PyPI mirrors <http://pypi.python.org/mirrors>`_ as
|
|
||||||
defined in `PEP 381 <http://www.python.org/dev/peps/pep-0381/>`_, from
|
|
||||||
Jannis Leidel.
|
|
||||||
|
|
||||||
* Fixed issue #138 - Git revisions ignored. Thanks John-Scott Atlakson.
|
|
||||||
|
|
||||||
* Fixed issue #95 - Initial editable install of github package from a tag fails. Thanks John-Scott Atlakson.
|
|
||||||
|
|
||||||
* Fixed issue #107 - Can't install if a directory in cwd has the same name as the package you're installing.
|
|
||||||
|
|
||||||
* Fixed issue #39 - --install-option="--prefix=~/.local" ignored with -e.
|
|
||||||
Thanks Ronny Pfannschmidt and Wil Tan.
|
|
||||||
|
|
||||||
|
|
||||||
**0.8**
|
|
||||||
|
|
||||||
|
|
||||||
* Track which ``build/`` directories pip creates, never remove directories
|
|
||||||
it doesn't create. From Hugo Lopes Tavares.
|
|
||||||
|
|
||||||
* Pip now accepts file:// index URLs. Thanks Dave Abrahams.
|
|
||||||
|
|
||||||
* Various cleanup to make test-running more consistent and less fragile.
|
|
||||||
Thanks Dave Abrahams.
|
|
||||||
|
|
||||||
* Real Windows support (with passing tests). Thanks Dave Abrahams.
|
|
||||||
|
|
||||||
* ``pip-2.7`` etc. scripts are created (Python-version specific scripts)
|
|
||||||
|
|
||||||
* ``contrib/build-standalone`` script creates a runnable ``.zip`` form of
|
|
||||||
pip, from Jannis Leidel
|
|
||||||
|
|
||||||
* Editable git repos are updated when reinstalled
|
|
||||||
|
|
||||||
* Fix problem with ``--editable`` when multiple ``.egg-info/`` directories
|
|
||||||
are found.
|
|
||||||
|
|
||||||
* A number of VCS-related fixes for ``pip freeze``, from Hugo Lopes Tavares.
|
|
||||||
|
|
||||||
* Significant test framework changes, from Hugo Lopes Tavares.
|
|
||||||
|
|
||||||
|
|
||||||
**0.7.2**
|
|
||||||
|
|
||||||
|
|
||||||
* Set zip_safe=False to avoid problems some people are encountering where
|
|
||||||
pip is installed as a zip file.
|
|
||||||
|
|
||||||
|
|
||||||
**0.7.1**
|
|
||||||
|
|
||||||
|
|
||||||
* Fixed opening of logfile with no directory name. Thanks Alexandre Conrad.
|
|
||||||
|
|
||||||
* Temporary files are consistently cleaned up, especially after
|
|
||||||
installing bundles, also from Alex Conrad.
|
|
||||||
|
|
||||||
* Tests now require at least ScriptTest 1.0.3.
|
|
||||||
|
|
||||||
|
|
||||||
**0.7**
|
|
||||||
|
|
||||||
|
|
||||||
* Fixed uninstallation on Windows
|
|
||||||
* Added ``pip search`` command.
|
|
||||||
* Tab-complete names of installed distributions for ``pip uninstall``.
|
|
||||||
* Support tab-completion when there is a global-option before the
|
|
||||||
subcommand.
|
|
||||||
* Install header files in standard (scheme-default) location when installing
|
|
||||||
outside a virtualenv. Install them to a slightly more consistent
|
|
||||||
non-standard location inside a virtualenv (since the standard location is
|
|
||||||
a non-writable symlink to the global location).
|
|
||||||
* pip now logs to a central location by default (instead of creating
|
|
||||||
``pip-log.txt`` all over the place) and constantly overwrites the
|
|
||||||
file in question. On Unix and Mac OS X this is ``'$HOME/.pip/pip.log'``
|
|
||||||
and on Windows it's ``'%HOME%\\pip\\pip.log'``. You are still able to
|
|
||||||
override this location with the ``$PIP_LOG_FILE`` environment variable.
|
|
||||||
For a complete (appended) logfile use the separate ``'--log'`` command line
|
|
||||||
option.
|
|
||||||
* Fixed an issue with Git that left an editable packge as a checkout of a
|
|
||||||
remote branch, even if the default behaviour would have been fine, too.
|
|
||||||
* Fixed installing from a Git tag with older versions of Git.
|
|
||||||
* Expand "~" in logfile and download cache paths.
|
|
||||||
* Speed up installing from Mercurial repositories by cloning without
|
|
||||||
updating the working copy multiple times.
|
|
||||||
* Fixed installing directly from directories (e.g.
|
|
||||||
``pip install path/to/dir/``).
|
|
||||||
* Fixed installing editable packages with ``svn+ssh`` URLs.
|
|
||||||
* Don't print unwanted debug information when running the freeze command.
|
|
||||||
* Create log file directory automatically. Thanks Alexandre Conrad.
|
|
||||||
* Make test suite easier to run successfully. Thanks Dave Abrahams.
|
|
||||||
* Fixed "pip install ." and "pip install .."; better error for directory
|
|
||||||
without setup.py. Thanks Alexandre Conrad.
|
|
||||||
* Support Debian/Ubuntu "dist-packages" in zip command. Thanks duckx.
|
|
||||||
* Fix relative --src folder. Thanks Simon Cross.
|
|
||||||
* Handle missing VCS with an error message. Thanks Alexandre Conrad.
|
|
||||||
* Added --no-download option to install; pairs with --no-install to separate
|
|
||||||
download and installation into two steps. Thanks Simon Cross.
|
|
||||||
* Fix uninstalling from requirements file containing -f, -i, or
|
|
||||||
--extra-index-url.
|
|
||||||
* Leftover build directories are now removed. Thanks Alexandre Conrad.
|
|
||||||
|
|
||||||
|
|
||||||
**0.6.3**
|
|
||||||
|
|
||||||
|
|
||||||
* Fixed import error on Windows with regard to the backwards compatibility
|
|
||||||
package
|
|
||||||
|
|
||||||
|
|
||||||
**0.6.2**
|
|
||||||
|
|
||||||
|
|
||||||
* Fixed uninstall when /tmp is on a different filesystem.
|
|
||||||
|
|
||||||
* Fixed uninstallation of distributions with namespace packages.
|
|
||||||
|
|
||||||
|
|
||||||
**0.6.1**
|
|
||||||
|
|
||||||
|
|
||||||
* Added support for the ``https`` and ``http-static`` schemes to the
|
|
||||||
Mercurial and ``ftp`` scheme to the Bazaar backend.
|
|
||||||
|
|
||||||
* Fixed uninstallation of scripts installed with easy_install.
|
|
||||||
|
|
||||||
* Fixed an issue in the package finder that could result in an
|
|
||||||
infinite loop while looking for links.
|
|
||||||
|
|
||||||
* Fixed issue with ``pip bundle`` and local files (which weren't being
|
|
||||||
copied into the bundle), from Whit Morriss.
|
|
||||||
|
|
||||||
|
|
||||||
**0.6**
|
|
||||||
|
|
||||||
|
|
||||||
* Add ``pip uninstall`` and uninstall-before upgrade (from Carl
|
|
||||||
Meyer).
|
|
||||||
|
|
||||||
* Extended configurability with config files and environment variables.
|
|
||||||
|
|
||||||
* Allow packages to be upgraded, e.g., ``pip install Package==0.1``
|
|
||||||
then ``pip install Package==0.2``.
|
|
||||||
|
|
||||||
* Allow installing/upgrading to Package==dev (fix "Source version does not
|
|
||||||
match target version" errors).
|
|
||||||
|
|
||||||
* Added command and option completion for bash and zsh.
|
|
||||||
|
|
||||||
* Extended integration with virtualenv by providing an option to
|
|
||||||
automatically use an active virtualenv and an option to warn if no active
|
|
||||||
virtualenv is found.
|
|
||||||
|
|
||||||
* Fixed a bug with pip install --download and editable packages, where
|
|
||||||
directories were being set with 0000 permissions, now defaults to 755.
|
|
||||||
|
|
||||||
* Fixed uninstallation of easy_installed console_scripts.
|
|
||||||
|
|
||||||
* Fixed uninstallation on Mac OS X Framework layout installs
|
|
||||||
|
|
||||||
* Fixed bug preventing uninstall of editables with source outside venv.
|
|
||||||
|
|
||||||
* Creates download cache directory if not existing.
|
|
||||||
|
|
||||||
|
|
||||||
**0.5.1**
|
|
||||||
|
|
||||||
|
|
||||||
* Fixed a couple little bugs, with git and with extensions.
|
|
||||||
|
|
||||||
|
|
||||||
**0.5**
|
|
||||||
|
|
||||||
|
|
||||||
* Added ability to override the default log file name (``pip-log.txt``)
|
|
||||||
with the environmental variable ``$PIP_LOG_FILE``.
|
|
||||||
|
|
||||||
* Made the freeze command print installed packages to stdout instead of
|
|
||||||
writing them to a file. Use simple redirection (e.g.
|
|
||||||
``pip freeze > stable-req.txt``) to get a file with requirements.
|
|
||||||
|
|
||||||
* Fixed problem with freezing editable packages from a Git repository.
|
|
||||||
|
|
||||||
* Added support for base URLs using ``<base href='...'>`` when parsing
|
|
||||||
HTML pages.
|
|
||||||
|
|
||||||
* Fixed installing of non-editable packages from version control systems.
|
|
||||||
|
|
||||||
* Fixed issue with Bazaar's bzr+ssh scheme.
|
|
||||||
|
|
||||||
* Added --download-dir option to the install command to retrieve package
|
|
||||||
archives. If given an editable package it will create an archive of it.
|
|
||||||
|
|
||||||
* Added ability to pass local file and directory paths to ``--find-links``,
|
|
||||||
e.g. ``--find-links=file:///path/to/my/private/archive``
|
|
||||||
|
|
||||||
* Reduced the amount of console log messages when fetching a page to find a
|
|
||||||
distribution was problematic. The full messages can be found in pip-log.txt.
|
|
||||||
|
|
||||||
* Added ``--no-deps`` option to install ignore package dependencies
|
|
||||||
|
|
||||||
* Added ``--no-index`` option to ignore the package index (PyPI) temporarily
|
|
||||||
|
|
||||||
* Fixed installing editable packages from Git branches.
|
|
||||||
|
|
||||||
* Fixes freezing of editable packages from Mercurial repositories.
|
|
||||||
|
|
||||||
* Fixed handling read-only attributes of build files, e.g. of Subversion and
|
|
||||||
Bazaar on Windows.
|
|
||||||
|
|
||||||
* When downloading a file from a redirect, use the redirected
|
|
||||||
location's extension to guess the compression (happens specifically
|
|
||||||
when redirecting to a bitbucket.org tip.gz file).
|
|
||||||
|
|
||||||
* Editable freeze URLs now always use revision hash/id rather than tip or
|
|
||||||
branch names which could move.
|
|
||||||
|
|
||||||
* Fixed comparison of repo URLs so incidental differences such as
|
|
||||||
presence/absence of final slashes or quoted/unquoted special
|
|
||||||
characters don't trigger "ignore/switch/wipe/backup" choice.
|
|
||||||
|
|
||||||
* Fixed handling of attempt to checkout editable install to a
|
|
||||||
non-empty, non-repo directory.
|
|
||||||
|
|
||||||
|
|
||||||
**0.4**
|
|
||||||
|
|
||||||
|
|
||||||
* Make ``-e`` work better with local hg repositories
|
|
||||||
|
|
||||||
* Construct PyPI URLs the exact way easy_install constructs URLs (you
|
|
||||||
might notice this if you use a custom index that is
|
|
||||||
slash-sensitive).
|
|
||||||
|
|
||||||
* Improvements on Windows (from `Ionel Maries Cristian
|
|
||||||
<http://ionelmc.wordpress.com/>`_).
|
|
||||||
|
|
||||||
* Fixed problem with not being able to install private git repositories.
|
|
||||||
|
|
||||||
* Make ``pip zip`` zip all its arguments, not just the first.
|
|
||||||
|
|
||||||
* Fix some filename issues on Windows.
|
|
||||||
|
|
||||||
* Allow the ``-i`` and ``--extra-index-url`` options in requirements
|
|
||||||
files.
|
|
||||||
|
|
||||||
* Fix the way bundle components are unpacked and moved around, to make
|
|
||||||
bundles work.
|
|
||||||
|
|
||||||
* Adds ``-s`` option to allow the access to the global site-packages if a
|
|
||||||
virtualenv is to be created.
|
|
||||||
|
|
||||||
* Fixed support for Subversion 1.6.
|
|
||||||
|
|
||||||
|
|
||||||
**0.3.1**
|
|
||||||
|
|
||||||
|
|
||||||
* Improved virtualenv restart and various path/cleanup problems on win32.
|
|
||||||
|
|
||||||
* Fixed a regression with installing from svn repositories (when not
|
|
||||||
using ``-e``).
|
|
||||||
|
|
||||||
* Fixes when installing editable packages that put their source in a
|
|
||||||
subdirectory (like ``src/``).
|
|
||||||
|
|
||||||
* Improve ``pip -h``
|
|
||||||
|
|
||||||
|
|
||||||
**0.3**
|
|
||||||
|
|
||||||
|
|
||||||
* Added support for editable packages created from Git, Mercurial and Bazaar
|
|
||||||
repositories and ability to freeze them. Refactored support for version
|
|
||||||
control systems.
|
|
||||||
|
|
||||||
* Do not use ``sys.exit()`` from inside the code, instead use a
|
|
||||||
return. This will make it easier to invoke programmatically.
|
|
||||||
|
|
||||||
* Put the install record in ``Package.egg-info/installed-files.txt``
|
|
||||||
(previously they went in
|
|
||||||
``site-packages/install-record-Package.txt``).
|
|
||||||
|
|
||||||
* Fix a problem with ``pip freeze`` not including ``-e svn+`` when an
|
|
||||||
svn structure is peculiar.
|
|
||||||
|
|
||||||
* Allow ``pip -E`` to work with a virtualenv that uses a different
|
|
||||||
version of Python than the parent environment.
|
|
||||||
|
|
||||||
* Fixed Win32 virtualenv (``-E``) option.
|
|
||||||
|
|
||||||
* Search the links passed in with ``-f`` for packages.
|
|
||||||
|
|
||||||
* Detect zip files, even when the file doesn't have a ``.zip``
|
|
||||||
extension and it is served with the wrong Content-Type.
|
|
||||||
|
|
||||||
* Installing editable from existing source now works, like ``pip
|
|
||||||
install -e some/path/`` will install the package in ``some/path/``.
|
|
||||||
Most importantly, anything that package requires will also be
|
|
||||||
installed by pip.
|
|
||||||
|
|
||||||
* Add a ``--path`` option to ``pip un/zip``, so you can avoid zipping
|
|
||||||
files that are outside of where you expect.
|
|
||||||
|
|
||||||
* Add ``--simulate`` option to ``pip zip``.
|
|
||||||
|
|
||||||
|
|
||||||
**0.2.1**
|
|
||||||
|
|
||||||
|
|
||||||
* Fixed small problem that prevented using ``pip.py`` without actually
|
|
||||||
installing pip.
|
|
||||||
|
|
||||||
* Fixed ``--upgrade``, which would download and appear to install
|
|
||||||
upgraded packages, but actually just reinstall the existing package.
|
|
||||||
|
|
||||||
* Fixed Windows problem with putting the install record in the right
|
|
||||||
place, and generating the ``pip`` script with Setuptools.
|
|
||||||
|
|
||||||
* Download links that include embedded spaces or other unsafe
|
|
||||||
characters (those characters get %-encoded).
|
|
||||||
|
|
||||||
* Fixed use of URLs in requirement files, and problems with some blank
|
|
||||||
lines.
|
|
||||||
|
|
||||||
* Turn some tar file errors into warnings.
|
|
||||||
|
|
||||||
|
|
||||||
**0.2**
|
|
||||||
|
|
||||||
|
|
||||||
* Renamed to ``pip``, and to install you now do ``pip install
|
|
||||||
PACKAGE``
|
|
||||||
|
|
||||||
* Added command ``pip zip PACKAGE`` and ``pip unzip PACKAGE``. This
|
|
||||||
is particularly intended for Google App Engine to manage libraries
|
|
||||||
to stay under the 1000-file limit.
|
|
||||||
|
|
||||||
* Some fixes to bundles, especially editable packages and when
|
|
||||||
creating a bundle using unnamed packages (like just an svn
|
|
||||||
repository without ``#egg=Package``).
|
|
||||||
|
|
||||||
|
|
||||||
**0.1.4**
|
|
||||||
|
|
||||||
|
|
||||||
* Added an option ``--install-option`` to pass options to pass
|
|
||||||
arguments to ``setup.py install``
|
|
||||||
|
|
||||||
* ``.svn/`` directories are no longer included in bundles, as these
|
|
||||||
directories are specific to a version of svn -- if you build a
|
|
||||||
bundle on a system with svn 1.5, you can't use the checkout on a
|
|
||||||
system with svn 1.4. Instead a file ``svn-checkout.txt`` is
|
|
||||||
included that notes the original location and revision, and the
|
|
||||||
command you can use to turn it back into an svn checkout. (Probably
|
|
||||||
unpacking the bundle should, maybe optionally, recreate this
|
|
||||||
information -- but that is not currently implemented, and it would
|
|
||||||
require network access.)
|
|
||||||
|
|
||||||
* Avoid ambiguities over project name case, where for instance
|
|
||||||
MyPackage and mypackage would be considered different packages.
|
|
||||||
This in particular caused problems on Macs, where ``MyPackage/`` and
|
|
||||||
``mypackage/`` are the same directory.
|
|
||||||
|
|
||||||
* Added support for an environmental variable
|
|
||||||
``$PIP_DOWNLOAD_CACHE`` which will cache package downloads, so
|
|
||||||
future installations won't require large downloads. Network access
|
|
||||||
is still required, but just some downloads will be avoided when
|
|
||||||
using this.
|
|
||||||
|
|
||||||
|
|
||||||
**0.1.3**
|
|
||||||
|
|
||||||
|
|
||||||
* Always use ``svn checkout`` (not ``export``) so that
|
|
||||||
``tag_svn_revision`` settings give the revision of the package.
|
|
||||||
|
|
||||||
* Don't update checkouts that came from ``.pybundle`` files.
|
|
||||||
|
|
||||||
|
|
||||||
**0.1.2**
|
|
||||||
|
|
||||||
|
|
||||||
* Improve error text when there are errors fetching HTML pages when
|
|
||||||
seeking packages.
|
|
||||||
|
|
||||||
* Improve bundles: include empty directories, make them work with
|
|
||||||
editable packages.
|
|
||||||
|
|
||||||
* If you use ``-E env`` and the environment ``env/`` doesn't exist, a
|
|
||||||
new virtual environment will be created.
|
|
||||||
|
|
||||||
* Fix ``dependency_links`` for finding packages.
|
|
||||||
|
|
||||||
|
|
||||||
**0.1.1**
|
|
||||||
|
|
||||||
|
|
||||||
* Fixed a NameError exception when running pip outside of a
|
|
||||||
virtualenv environment.
|
|
||||||
|
|
||||||
* Added HTTP proxy support (from Prabhu Ramachandran)
|
|
||||||
|
|
||||||
* Fixed use of ``hashlib.md5`` on python2.5+ (also from Prabhu
|
|
||||||
Ramachandran)
|
|
||||||
|
|
||||||
|
|
||||||
**0.1**
|
|
||||||
|
|
||||||
|
|
||||||
* Initial release
|
|
||||||
Vendored
-20
@@ -1,20 +0,0 @@
|
|||||||
Copyright (c) 2008-2014 The pip developers (see AUTHORS.txt file)
|
|
||||||
|
|
||||||
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:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
Vendored
-9
@@ -1,9 +0,0 @@
|
|||||||
include AUTHORS.txt
|
|
||||||
include LICENSE.txt
|
|
||||||
include CHANGES.txt
|
|
||||||
include PROJECT.txt
|
|
||||||
include pip/cacert.pem
|
|
||||||
recursive-include docs *.rst
|
|
||||||
recursive-include docs *.html
|
|
||||||
recursive-exclude docs/_build *.rst
|
|
||||||
prune docs/_build/_sources
|
|
||||||
Vendored
-91
@@ -1,91 +0,0 @@
|
|||||||
Metadata-Version: 1.1
|
|
||||||
Name: pip
|
|
||||||
Version: 1.5.4
|
|
||||||
Summary: A tool for installing and managing Python packages.
|
|
||||||
Home-page: http://www.pip-installer.org
|
|
||||||
Author: The pip developers
|
|
||||||
Author-email: python-virtualenv@groups.google.com
|
|
||||||
License: MIT
|
|
||||||
Description:
|
|
||||||
Project Info
|
|
||||||
============
|
|
||||||
|
|
||||||
* Project Page: https://github.com/pypa/pip
|
|
||||||
* Install howto: http://www.pip-installer.org/en/latest/installing.html
|
|
||||||
* Changelog: http://www.pip-installer.org/en/latest/news.html
|
|
||||||
* Bug Tracking: https://github.com/pypa/pip/issues
|
|
||||||
* Mailing list: http://groups.google.com/group/python-virtualenv
|
|
||||||
* Docs: http://www.pip-installer.org/
|
|
||||||
* User IRC: #pip on Freenode.
|
|
||||||
* Dev IRC: #pypa on Freenode.
|
|
||||||
|
|
||||||
Quickstart
|
|
||||||
==========
|
|
||||||
|
|
||||||
First, :doc:`Install pip <installing>`.
|
|
||||||
|
|
||||||
Install a package from `PyPI`_:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install SomePackage
|
|
||||||
[...]
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
Show what files were installed:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip show --files SomePackage
|
|
||||||
Name: SomePackage
|
|
||||||
Version: 1.0
|
|
||||||
Location: /my/env/lib/pythonx.x/site-packages
|
|
||||||
Files:
|
|
||||||
../somepackage/__init__.py
|
|
||||||
[...]
|
|
||||||
|
|
||||||
List what packages are outdated:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip list --outdated
|
|
||||||
SomePackage (Current: 1.0 Latest: 2.0)
|
|
||||||
|
|
||||||
Upgrade a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install --upgrade SomePackage
|
|
||||||
[...]
|
|
||||||
Found existing installation: SomePackage 1.0
|
|
||||||
Uninstalling SomePackage:
|
|
||||||
Successfully uninstalled SomePackage
|
|
||||||
Running setup.py install for SomePackage
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
Uninstall a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip uninstall SomePackage
|
|
||||||
Uninstalling SomePackage:
|
|
||||||
/my/env/lib/pythonx.x/site-packages/somepackage
|
|
||||||
Proceed (y/n)? y
|
|
||||||
Successfully uninstalled SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
.. _PyPI: http://pypi.python.org/pypi/
|
|
||||||
|
|
||||||
Keywords: easy_install distutils setuptools egg virtualenv
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: MIT License
|
|
||||||
Classifier: Topic :: Software Development :: Build Tools
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.6
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.1
|
|
||||||
Classifier: Programming Language :: Python :: 3.2
|
|
||||||
Classifier: Programming Language :: Python :: 3.3
|
|
||||||
Vendored
-11
@@ -1,11 +0,0 @@
|
|||||||
Project Info
|
|
||||||
============
|
|
||||||
|
|
||||||
* Project Page: https://github.com/pypa/pip
|
|
||||||
* Install howto: http://www.pip-installer.org/en/latest/installing.html
|
|
||||||
* Changelog: http://www.pip-installer.org/en/latest/news.html
|
|
||||||
* Bug Tracking: https://github.com/pypa/pip/issues
|
|
||||||
* Mailing list: http://groups.google.com/group/python-virtualenv
|
|
||||||
* Docs: http://www.pip-installer.org/
|
|
||||||
* User IRC: #pip on Freenode.
|
|
||||||
* Dev IRC: #pypa on Freenode.
|
|
||||||
Vendored
-10
@@ -1,10 +0,0 @@
|
|||||||
pip
|
|
||||||
===
|
|
||||||
|
|
||||||
.. image:: https://pypip.in/v/pip/badge.png
|
|
||||||
:target: https://crate.io/packages/pip
|
|
||||||
|
|
||||||
.. image:: https://secure.travis-ci.org/pypa/pip.png?branch=develop
|
|
||||||
:target: http://travis-ci.org/pypa/pip
|
|
||||||
|
|
||||||
For documentation, see http://www.pip-installer.org
|
|
||||||
-8
@@ -1,8 +0,0 @@
|
|||||||
:orphan:
|
|
||||||
|
|
||||||
Configuration
|
|
||||||
=============
|
|
||||||
|
|
||||||
This content is now covered in the :doc:`User Guide <user_guide>`
|
|
||||||
|
|
||||||
|
|
||||||
Vendored
-8
@@ -1,8 +0,0 @@
|
|||||||
:orphan:
|
|
||||||
|
|
||||||
============
|
|
||||||
Cookbook
|
|
||||||
============
|
|
||||||
|
|
||||||
This content is now covered in the :doc:`User Guide <user_guide>`
|
|
||||||
|
|
||||||
-126
@@ -1,126 +0,0 @@
|
|||||||
===========
|
|
||||||
Development
|
|
||||||
===========
|
|
||||||
|
|
||||||
Pull Requests
|
|
||||||
=============
|
|
||||||
|
|
||||||
Submit Pull Requests against the `develop` branch.
|
|
||||||
|
|
||||||
Provide a good description of what you're doing and why.
|
|
||||||
|
|
||||||
Provide tests that cover your changes and try to run the tests locally first.
|
|
||||||
|
|
||||||
Automated Testing
|
|
||||||
=================
|
|
||||||
|
|
||||||
All pull requests and merges to 'develop' branch are tested in `Travis <https://travis-ci.org/>`_
|
|
||||||
based on our `.travis.yml file <https://github.com/pypa/pip/blob/develop/.travis.yml>`_.
|
|
||||||
|
|
||||||
Usually, a link to your specific travis build appears in pull requests, but if not,
|
|
||||||
you can find it on our `travis pull requests page <https://travis-ci.org/pypa/pip/pull_requests>`_
|
|
||||||
|
|
||||||
The only way to trigger Travis to run again for a pull request, is to submit another change to the pull branch.
|
|
||||||
|
|
||||||
We also have Jenkins CI that runs regularly for certain python versions on windows and centos.
|
|
||||||
|
|
||||||
Running tests
|
|
||||||
=============
|
|
||||||
|
|
||||||
OS Requirements: subversion, bazaar, git, and mercurial.
|
|
||||||
|
|
||||||
Python Requirements: tox or pytest, virtualenv, scripttest, and mock
|
|
||||||
|
|
||||||
Ways to run the tests locally:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ tox -e py33 # The preferred way to run the tests, can use pyNN to
|
|
||||||
# run for a particular version or leave off the -e to
|
|
||||||
# run for all versions.
|
|
||||||
$ python setup.py test # Using the setuptools test plugin
|
|
||||||
$ py.test # Using py.test directly
|
|
||||||
$ tox # Using tox against pip's tox.ini
|
|
||||||
|
|
||||||
|
|
||||||
Getting Involved
|
|
||||||
================
|
|
||||||
|
|
||||||
The pip project welcomes help in the following ways:
|
|
||||||
|
|
||||||
- Making Pull Requests for code, tests, or docs.
|
|
||||||
- Commenting on open issues and pull requests.
|
|
||||||
- Helping to answer questions on the mailing list.
|
|
||||||
|
|
||||||
If you want to become an official maintainer, start by helping out.
|
|
||||||
|
|
||||||
Later, when you think you're ready, get in touch with one of the maintainers,
|
|
||||||
and they will initiate a vote.
|
|
||||||
|
|
||||||
Release Process
|
|
||||||
===============
|
|
||||||
|
|
||||||
This process includes virtualenv, since pip releases necessitate a virtualenv release.
|
|
||||||
|
|
||||||
As an example, the instructions assume we're releasing pip-1.4, and virtualenv-1.10.
|
|
||||||
|
|
||||||
1. Upgrade setuptools, if needed:
|
|
||||||
|
|
||||||
#. Upgrade setuptools in ``virtualenv/develop`` using the :ref:`Refresh virtualenv` process.
|
|
||||||
#. Create a pull request against ``pip/develop`` with a modified ``.travis.yml`` file that installs virtualenv from ``virtualenv/develop``, to confirm the travis builds are still passing.
|
|
||||||
|
|
||||||
2. Create Release branches:
|
|
||||||
|
|
||||||
#. Create ``pip/release-1.4`` branch.
|
|
||||||
#. In ``pip/develop``, change ``pip.version`` to '1.5.dev1'.
|
|
||||||
#. Create ``virtualenv/release-1.10`` branch.
|
|
||||||
#. In ``virtualenv/develop``, change ``virtualenv.version`` to '1.11.dev1'.
|
|
||||||
|
|
||||||
3. Prepare "rcX":
|
|
||||||
|
|
||||||
#. In ``pip/release-1.4``, change ``pip.version`` to '1.4rcX', and tag with '1.4rcX'.
|
|
||||||
#. Build a pip sdist from ``pip/release-1.4``, and build it into ``virtualenv/release-1.10`` using the :ref:`Refresh virtualenv` process.
|
|
||||||
#. In ``virtualenv/release-1.10``, change ``virtualenv.version`` to '1.10rcX', and tag with '1.10rcX'.
|
|
||||||
|
|
||||||
4. Announce ``pip-1.4rcX`` and ``virtualenv-1.10rcX`` with the :ref:`RC Install Instructions` and elicit feedback.
|
|
||||||
|
|
||||||
5. Apply fixes to 'rcX':
|
|
||||||
|
|
||||||
#. Apply fixes to ``pip/release-1.4`` and ``virtualenv/release-1.10``
|
|
||||||
#. Periodically merge fixes to ``pip/develop`` and ``virtualenv/develop``
|
|
||||||
|
|
||||||
6. Repeat #4 thru #6 if needed.
|
|
||||||
|
|
||||||
7. Final Release:
|
|
||||||
|
|
||||||
#. In ``pip/release-1.4``, change ``pip.version`` to '1.4', and tag with '1.4'.
|
|
||||||
#. Merge ``pip/release-1.4`` to ``pip/master``.
|
|
||||||
#. Build a pip sdist from ``pip/release-1.4``, and load it into ``virtualenv/release-1.10`` using the :ref:`Refresh virtualenv` process.
|
|
||||||
#. Merge ``vitualenv/release-1.10`` to ``virtualenv/develop``.
|
|
||||||
#. In ``virtualenv/release-1.10``, change ``virtualenv.version`` to '1.10', and tag with '1.10'.
|
|
||||||
#. Merge ``virtualenv/release-1.10`` to ``virtualenv/master``
|
|
||||||
#. Build and upload pip and virtualenv sdists to PyPI.
|
|
||||||
|
|
||||||
.. _`Refresh virtualenv`:
|
|
||||||
|
|
||||||
Refresh virtualenv
|
|
||||||
++++++++++++++++++
|
|
||||||
|
|
||||||
#. Update the embedded versions of pip and setuptools in ``virtualenv_support``.
|
|
||||||
#. Run ``bin/rebuild-script.py`` to rebuild virtualenv based on the latest versions.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`RC Install Instructions`:
|
|
||||||
|
|
||||||
RC Install Instructions
|
|
||||||
+++++++++++++++++++++++
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ curl -L -O https://github.com/pypa/virtualenv/archive/1.10rc1.tar.gz
|
|
||||||
$ echo "<md5sum value> 1.10rc1.tar.gz" | md5sum -c
|
|
||||||
1.10rc1.tar.gz: OK
|
|
||||||
$ tar zxf 1.10rc1.tar.gz
|
|
||||||
$ python virtualenv-1.10rc1/virtualenv.py myVE
|
|
||||||
$ myVE/bin/pip install SomePackage
|
|
||||||
|
|
||||||
-69
@@ -1,69 +0,0 @@
|
|||||||
:orphan:
|
|
||||||
|
|
||||||
"ImportError: No module named setuptools"
|
|
||||||
+++++++++++++++++++++++++++++++++++++++++
|
|
||||||
|
|
||||||
Although using ``pip install --upgrade setuptools`` to upgrade from distribute
|
|
||||||
to setuptools works in isolation, it's possible to get "ImportError: No module
|
|
||||||
named setuptools" when using pip<1.4 to upgrade a package that depends on
|
|
||||||
setuptools or distribute.
|
|
||||||
|
|
||||||
e.g. when running a command like this: `pip install --upgrade pyramid`
|
|
||||||
|
|
||||||
Solution
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
To prevent the problem in *new* environments (that aren't broken yet):
|
|
||||||
|
|
||||||
* Option 1:
|
|
||||||
|
|
||||||
* *First* run `pip install -U setuptools`,
|
|
||||||
* *Then* run the command to upgrade your package (e.g. `pip install --upgrade pyramid`)
|
|
||||||
|
|
||||||
* Option 2:
|
|
||||||
|
|
||||||
* Upgrade pip using :ref:`get-pip <get-pip>`
|
|
||||||
* *Then* run the command to upgrade your package (e.g. `pip install --upgrade pyramid`)
|
|
||||||
|
|
||||||
To fix the problem once it's occurred, you'll need to manually install the new
|
|
||||||
setuptools, then rerun the upgrade that failed.
|
|
||||||
|
|
||||||
1. Download `ez_setup.py` (https://bitbucket.org/pypa/setuptools/downloads/ez_setup.py)
|
|
||||||
2. Run `python ez_setup.py`
|
|
||||||
3. Then rerun your upgrade (e.g. `pip install --upgrade pyramid`)
|
|
||||||
|
|
||||||
|
|
||||||
Cause
|
|
||||||
~~~~~
|
|
||||||
|
|
||||||
distribute-0.7.3 is just an empty wrapper that only serves to require the new
|
|
||||||
setuptools (setuptools>=0.7) so that it will be installed. (If you don't know
|
|
||||||
yet, the "new setuptools" is a merge of distribute and setuptools back into one
|
|
||||||
project).
|
|
||||||
|
|
||||||
distribute-0.7.3 does its job well, when the upgrade is done in isolation.
|
|
||||||
E.g. if you're currently on distribute-0.6.X, then running `pip install -U
|
|
||||||
setuptools` works fine to upgrade you to setuptools>=0.7.
|
|
||||||
|
|
||||||
The problem occurs when:
|
|
||||||
|
|
||||||
1. you are currently using an older distribute (i.e. 0.6.X)
|
|
||||||
2. and you try to use pip to upgrade a package that *depends* on setuptools or
|
|
||||||
distribute.
|
|
||||||
|
|
||||||
As part of the upgrade process, pip builds an install list that ends up
|
|
||||||
including distribute-0.7.3 and setuptools>=0.7 , but they can end up being
|
|
||||||
separated by other dependencies in the list, so what can happen is this:
|
|
||||||
|
|
||||||
1. pip uninstalls the existing distribute
|
|
||||||
2. pip installs distribute-0.7.3 (which has no importable setuptools, that pip
|
|
||||||
*needs* internally to function)
|
|
||||||
3. pip moves on to install another dependency (before setuptools>=0.7) and is
|
|
||||||
unable to proceed without the setuptools package
|
|
||||||
|
|
||||||
Note that pip v1.4 has fixes to prevent this. distribute-0.7.3 (or
|
|
||||||
setuptools>=0.7) by themselves cannot prevent this kind of problem.
|
|
||||||
|
|
||||||
|
|
||||||
.. _setuptools: https://pypi.python.org/pypi/setuptools
|
|
||||||
.. _distribute: https://pypi.python.org/pypi/distribute
|
|
||||||
Vendored
-25
@@ -1,25 +0,0 @@
|
|||||||
pip
|
|
||||||
===
|
|
||||||
|
|
||||||
`User list <http://groups.google.com/group/python-virtualenv>`_ |
|
|
||||||
`Dev list <http://groups.google.com/group/pypa-dev>`_ |
|
|
||||||
`Github <https://github.com/pypa/pip>`_ |
|
|
||||||
`PyPI <https://pypi.python.org/pypi/pip/>`_ |
|
|
||||||
User IRC: #pip |
|
|
||||||
Dev IRC: #pypa
|
|
||||||
|
|
||||||
The `PyPA recommended
|
|
||||||
<https://python-packaging-user-guide.readthedocs.org/en/latest/current.html>`_
|
|
||||||
tool for installing and managing Python packages.
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
quickstart
|
|
||||||
installing
|
|
||||||
user_guide
|
|
||||||
reference/index
|
|
||||||
development
|
|
||||||
news
|
|
||||||
|
|
||||||
|
|
||||||
Vendored
-66
@@ -1,66 +0,0 @@
|
|||||||
.. _`Installation`:
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
Python & OS Support
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
pip works with CPython versions 2.6, 2.7, 3.1, 3.2, 3.3, 3.4 and also pypy.
|
|
||||||
|
|
||||||
pip works on Unix/Linux, OS X, and Windows.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Python 2.5 was supported through v1.3.1, and Python 2.4 was supported through v1.1.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`get-pip`:
|
|
||||||
|
|
||||||
Install or Upgrade pip
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
To install or upgrade pip, securely download `get-pip.py
|
|
||||||
<https://raw.github.com/pypa/pip/master/contrib/get-pip.py>`_. [1]_
|
|
||||||
|
|
||||||
Then run the following (which may require administrator access)::
|
|
||||||
|
|
||||||
$ python get-pip.py
|
|
||||||
|
|
||||||
If `setuptools`_ (or `distribute`_) is not already installed, ``get-pip.py`` will
|
|
||||||
install `setuptools`_ for you. [2]_
|
|
||||||
|
|
||||||
To upgrade an existing `setuptools`_ (or `distribute`_), run ``pip install -U setuptools`` [3]_
|
|
||||||
|
|
||||||
|
|
||||||
Using Package Managers
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
On Linux, pip will generally be available for the system install of python using
|
|
||||||
the system package manager, although often the latest version will be
|
|
||||||
unavailable.
|
|
||||||
|
|
||||||
On Debian and Ubuntu::
|
|
||||||
|
|
||||||
$ sudo apt-get install python-pip
|
|
||||||
|
|
||||||
On Fedora::
|
|
||||||
|
|
||||||
$ sudo yum install python-pip
|
|
||||||
|
|
||||||
|
|
||||||
.. [1] "Secure" in this context means using a modern browser or a
|
|
||||||
tool like `curl` that verifies SSL certificates when downloading from
|
|
||||||
https URLs.
|
|
||||||
|
|
||||||
.. [2] Beginning with pip v1.5.1, ``get-pip.py`` stopped requiring setuptools to
|
|
||||||
be installed first.
|
|
||||||
|
|
||||||
.. [3] Although using ``pip install --upgrade setuptools`` to upgrade from
|
|
||||||
distribute to setuptools works in isolation, it's possible to get
|
|
||||||
"ImportError: No module named setuptools" when using pip<1.4 to upgrade a
|
|
||||||
package that depends on setuptools or distribute. See :doc:`here for
|
|
||||||
details <distribute_setuptools>`.
|
|
||||||
|
|
||||||
.. _setuptools: https://pypi.python.org/pypi/setuptools
|
|
||||||
.. _distribute: https://pypi.python.org/pypi/distribute
|
|
||||||
Vendored
-8
@@ -1,8 +0,0 @@
|
|||||||
:orphan:
|
|
||||||
|
|
||||||
================
|
|
||||||
Internal Details
|
|
||||||
================
|
|
||||||
|
|
||||||
This content is now covered in the :doc:`Reference Guide <reference/index>`
|
|
||||||
|
|
||||||
Vendored
-5
@@ -1,5 +0,0 @@
|
|||||||
=============
|
|
||||||
Release Notes
|
|
||||||
=============
|
|
||||||
|
|
||||||
.. include:: ../CHANGES.txt
|
|
||||||
Vendored
-56
@@ -1,56 +0,0 @@
|
|||||||
Quickstart
|
|
||||||
==========
|
|
||||||
|
|
||||||
First, :doc:`Install pip <installing>`.
|
|
||||||
|
|
||||||
Install a package from `PyPI`_:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install SomePackage
|
|
||||||
[...]
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
Show what files were installed:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip show --files SomePackage
|
|
||||||
Name: SomePackage
|
|
||||||
Version: 1.0
|
|
||||||
Location: /my/env/lib/pythonx.x/site-packages
|
|
||||||
Files:
|
|
||||||
../somepackage/__init__.py
|
|
||||||
[...]
|
|
||||||
|
|
||||||
List what packages are outdated:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip list --outdated
|
|
||||||
SomePackage (Current: 1.0 Latest: 2.0)
|
|
||||||
|
|
||||||
Upgrade a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install --upgrade SomePackage
|
|
||||||
[...]
|
|
||||||
Found existing installation: SomePackage 1.0
|
|
||||||
Uninstalling SomePackage:
|
|
||||||
Successfully uninstalled SomePackage
|
|
||||||
Running setup.py install for SomePackage
|
|
||||||
Successfully installed SomePackage
|
|
||||||
|
|
||||||
Uninstall a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip uninstall SomePackage
|
|
||||||
Uninstalling SomePackage:
|
|
||||||
/my/env/lib/pythonx.x/site-packages/somepackage
|
|
||||||
Proceed (y/n)? y
|
|
||||||
Successfully uninstalled SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
.. _PyPI: http://pypi.python.org/pypi/
|
|
||||||
-17
@@ -1,17 +0,0 @@
|
|||||||
===============
|
|
||||||
Reference Guide
|
|
||||||
===============
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
pip
|
|
||||||
pip_install
|
|
||||||
pip_uninstall
|
|
||||||
pip_freeze
|
|
||||||
pip_list
|
|
||||||
pip_show
|
|
||||||
pip_search
|
|
||||||
pip_wheel
|
|
||||||
|
|
||||||
|
|
||||||
-80
@@ -1,80 +0,0 @@
|
|||||||
|
|
||||||
pip
|
|
||||||
---
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
pip <command> [options]
|
|
||||||
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Logging`:
|
|
||||||
|
|
||||||
Logging
|
|
||||||
=======
|
|
||||||
|
|
||||||
Console logging
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
pip offers :ref:`-v, --verbose <--verbose>` and :ref:`-q, --quiet <--quiet>`
|
|
||||||
to control the console log level. Each option can be used multiple times and
|
|
||||||
used together. One ``-v`` increases the verbosity by one, whereas one ``-q`` decreases it by
|
|
||||||
one.
|
|
||||||
|
|
||||||
The series of log levels, in order, are as follows::
|
|
||||||
|
|
||||||
VERBOSE_DEBUG, DEBUG, INFO, NOTIFY, WARN, ERROR, FATAL
|
|
||||||
|
|
||||||
``NOTIFY`` is the default level.
|
|
||||||
|
|
||||||
A few examples on how the parameters work to affect the level:
|
|
||||||
|
|
||||||
* specifying nothing results in ``NOTIFY``
|
|
||||||
* ``-v`` results in ``INFO``
|
|
||||||
* ``-vv`` results in ``DEBUG``
|
|
||||||
* ``-q`` results in ``WARN``
|
|
||||||
* ``-vq`` results in ``NOTIFY``
|
|
||||||
|
|
||||||
The most practical use case for users is either ``-v`` or ``-vv`` to see
|
|
||||||
additional logging to help troubleshoot an issue.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`FileLogging`:
|
|
||||||
|
|
||||||
File logging
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
pip offers the :ref:`--log <--log>` option for specifying a file where a maximum
|
|
||||||
verbosity log will be kept. This option is empty by default. This log appends
|
|
||||||
to previous logging.
|
|
||||||
|
|
||||||
Additionally, when commands fail (i.e. return a non-zero exit code), pip writes
|
|
||||||
a "failure log" for the failed command. This log overwrites previous
|
|
||||||
logging. The default location is as follows:
|
|
||||||
|
|
||||||
* On Unix and Mac OS X: :file:`$HOME/.pip/pip.log`
|
|
||||||
* On Windows, the configuration file is: :file:`%HOME%\\pip\\pip.log`
|
|
||||||
|
|
||||||
The option for the failure log, is :ref:`--log-file <--log-file>`.
|
|
||||||
|
|
||||||
Both logs add a line per execution to specify the date and what pip executable wrote the log.
|
|
||||||
|
|
||||||
Like all pip options, ``--log`` and ``log-file``, can also be set as an environment
|
|
||||||
variable, or placed into the pip config file. See the :ref:`Configuration`
|
|
||||||
section.
|
|
||||||
|
|
||||||
.. _`General Options`:
|
|
||||||
|
|
||||||
General Options
|
|
||||||
***************
|
|
||||||
|
|
||||||
.. pip-general-options::
|
|
||||||
|
|
||||||
-46
@@ -1,46 +0,0 @@
|
|||||||
|
|
||||||
.. _`pip freeze`:
|
|
||||||
|
|
||||||
pip freeze
|
|
||||||
-----------
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: freeze
|
|
||||||
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: freeze
|
|
||||||
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
.. pip-command-options:: freeze
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1) Generate output suitable for a requirements file.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip freeze
|
|
||||||
Jinja2==2.6
|
|
||||||
Pygments==1.5
|
|
||||||
Sphinx==1.1.3
|
|
||||||
docutils==0.9.1
|
|
||||||
|
|
||||||
|
|
||||||
2) Generate a requirements file and then install from it in another environment.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ env1/bin/pip freeze > requirements.txt
|
|
||||||
$ env2/bin/pip install -r requirements.txt
|
|
||||||
-439
@@ -1,439 +0,0 @@
|
|||||||
|
|
||||||
.. _`pip install`:
|
|
||||||
|
|
||||||
pip install
|
|
||||||
-----------
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: install
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: install
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Requirements File Format`:
|
|
||||||
|
|
||||||
Requirements File Format
|
|
||||||
++++++++++++++++++++++++
|
|
||||||
|
|
||||||
Each line of the requirements file indicates something to be installed,
|
|
||||||
and like arguments to :ref:`pip install`, the following forms are supported::
|
|
||||||
|
|
||||||
<requirement specifier>
|
|
||||||
<archive url/path>
|
|
||||||
[-e] <local project path>
|
|
||||||
[-e] <vcs project url>
|
|
||||||
|
|
||||||
See the :ref:`pip install Examples<pip install Examples>` for examples of all these forms.
|
|
||||||
|
|
||||||
A line beginning with ``#`` is treated as a comment and ignored.
|
|
||||||
|
|
||||||
Additionally, the following Package Index Options are supported:
|
|
||||||
|
|
||||||
* :ref:`-i, --index-url <--index-url>`
|
|
||||||
* :ref:`--extra-index-url <--extra-index-url>`
|
|
||||||
* :ref:`--no-index <--no-index>`
|
|
||||||
* :ref:`-f, --find-links <--find-links>`
|
|
||||||
* :ref:`--allow-external <--allow-external>`
|
|
||||||
* :ref:`--allow-all-external <--allow-external>`
|
|
||||||
* :ref:`--allow-unverified <--allow-unverified>`
|
|
||||||
|
|
||||||
For example, to specify :ref:`--no-index <--no-index>` and 2 :ref:`--find-links <--find-links>` locations:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
--no-index
|
|
||||||
--find-links /my/local/archives
|
|
||||||
--find-links http://some.archives.com/archives
|
|
||||||
|
|
||||||
|
|
||||||
Lastly, if you wish, you can refer to other requirements files, like this::
|
|
||||||
|
|
||||||
-r more_requirements.txt
|
|
||||||
|
|
||||||
.. _`Requirement Specifiers`:
|
|
||||||
|
|
||||||
Requirement Specifiers
|
|
||||||
++++++++++++++++++++++
|
|
||||||
|
|
||||||
pip supports installing from "requirement specifiers" as implemented in
|
|
||||||
`pkg_resources Requirements <http://packages.python.org/setuptools/pkg_resources.html#requirement-objects>`_
|
|
||||||
|
|
||||||
Some Examples:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
'FooProject >= 1.2'
|
|
||||||
Fizzy [foo, bar]
|
|
||||||
'PickyThing<1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1'
|
|
||||||
SomethingWhoseVersionIDontCareAbout
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Use single or double quotes around specifiers to avoid ``>`` and ``<`` being
|
|
||||||
interpreted as shell redirects. e.g. ``pip install 'FooProject>=1.2'``.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. _`Pre Release Versions`:
|
|
||||||
|
|
||||||
Pre-release Versions
|
|
||||||
++++++++++++++++++++
|
|
||||||
|
|
||||||
Starting with v1.4, pip will only install stable versions as specified by
|
|
||||||
`PEP426`_ by default. If a version cannot be parsed as a compliant `PEP426`_
|
|
||||||
version then it is assumed to be a pre-release.
|
|
||||||
|
|
||||||
If a Requirement specifier includes a pre-release or development version
|
|
||||||
(e.g. ``>=0.0.dev0``) then pip will allow pre-release and development versions
|
|
||||||
for that requirement. This does not include the != flag.
|
|
||||||
|
|
||||||
The ``pip install`` command also supports a :ref:`--pre <install_--pre>` flag
|
|
||||||
that will enable installing pre-releases and development releases.
|
|
||||||
|
|
||||||
|
|
||||||
.. _PEP426: http://www.python.org/dev/peps/pep-0426
|
|
||||||
|
|
||||||
.. _`Externally Hosted Files`:
|
|
||||||
|
|
||||||
Externally Hosted Files
|
|
||||||
+++++++++++++++++++++++
|
|
||||||
|
|
||||||
Starting with v1.4, pip will warn about installing any file that does not come
|
|
||||||
from the primary index. As of version 1.5, pip defaults to ignoring these files
|
|
||||||
unless asked to consider them.
|
|
||||||
|
|
||||||
The ``pip install`` command supports a
|
|
||||||
:ref:`--allow-external PROJECT <--allow-external>` option that will enable
|
|
||||||
installing links that are linked directly from the simple index but to an
|
|
||||||
external host that also have a supported hash fragment. Externally hosted
|
|
||||||
files for all projects may be enabled using the
|
|
||||||
:ref:`--allow-all-external <--allow-all-external>` flag to the ``pip install``
|
|
||||||
command.
|
|
||||||
|
|
||||||
The ``pip install`` command also supports a
|
|
||||||
:ref:`--allow-unverified PROJECT <--allow-unverified>` option that will enable
|
|
||||||
installing insecurely linked files. These are either directly linked (as above)
|
|
||||||
files without a hash, or files that are linked from either the home page or the
|
|
||||||
download url of a package.
|
|
||||||
|
|
||||||
These options can be used in a requirements file. Assuming some fictional
|
|
||||||
`ExternalPackage` that is hosted external and unverified, then your requirements
|
|
||||||
file would be like so::
|
|
||||||
|
|
||||||
--allow-external ExternalPackage
|
|
||||||
--allow-unverified ExternalPackage
|
|
||||||
ExternalPackage
|
|
||||||
|
|
||||||
|
|
||||||
.. _`VCS Support`:
|
|
||||||
|
|
||||||
VCS Support
|
|
||||||
+++++++++++
|
|
||||||
|
|
||||||
pip supports installing from Git, Mercurial, Subversion and Bazaar, and detects
|
|
||||||
the type of VCS using url prefixes: "git+", "hg+", "bzr+", "svn+".
|
|
||||||
|
|
||||||
pip requires a working VCS command on your path: git, hg, svn, or bzr.
|
|
||||||
|
|
||||||
VCS projects can be installed in :ref:`editable mode <editable-installs>` (using
|
|
||||||
the :ref:`--editable <install_--editable>` option) or not.
|
|
||||||
|
|
||||||
* For editable installs, the clone location by default is "<venv
|
|
||||||
path>/src/SomeProject" in virtual environments, and "<cwd>/src/SomeProject"
|
|
||||||
for global installs. The :ref:`--src <install_--src>` option can be used to
|
|
||||||
modify this location.
|
|
||||||
* For non-editable installs, the project is built locally in a temp dir and then
|
|
||||||
installed normally.
|
|
||||||
|
|
||||||
The url suffix "egg=<project name>" is used by pip in it's dependency logic to
|
|
||||||
identify the project prior to pip downloading and analyzing the metadata.
|
|
||||||
|
|
||||||
Git
|
|
||||||
~~~
|
|
||||||
|
|
||||||
pip currently supports cloning over ``git``, ``git+https`` and ``git+ssh``:
|
|
||||||
|
|
||||||
Here are the supported forms::
|
|
||||||
|
|
||||||
[-e] git+git://git.myproject.org/MyProject#egg=MyProject
|
|
||||||
[-e] git+https://git.myproject.org/MyProject#egg=MyProject
|
|
||||||
[-e] git+ssh://git.myproject.org/MyProject#egg=MyProject
|
|
||||||
-e git+git@git.myproject.org:MyProject#egg=MyProject
|
|
||||||
|
|
||||||
Passing branch names, a commit hash or a tag name is possible like so::
|
|
||||||
|
|
||||||
[-e] git://git.myproject.org/MyProject.git@master#egg=MyProject
|
|
||||||
[-e] git://git.myproject.org/MyProject.git@v1.0#egg=MyProject
|
|
||||||
[-e] git://git.myproject.org/MyProject.git@da39a3ee5e6b4b0d3255bfef95601890afd80709#egg=MyProject
|
|
||||||
|
|
||||||
Mercurial
|
|
||||||
~~~~~~~~~
|
|
||||||
|
|
||||||
The supported schemes are: ``hg+http``, ``hg+https``,
|
|
||||||
``hg+static-http`` and ``hg+ssh``.
|
|
||||||
|
|
||||||
Here are the supported forms::
|
|
||||||
|
|
||||||
[-e] hg+http://hg.myproject.org/MyProject#egg=MyProject
|
|
||||||
[-e] hg+https://hg.myproject.org/MyProject#egg=MyProject
|
|
||||||
[-e] hg+ssh://hg.myproject.org/MyProject#egg=MyProject
|
|
||||||
|
|
||||||
You can also specify a revision number, a revision hash, a tag name or a local
|
|
||||||
branch name like so::
|
|
||||||
|
|
||||||
[-e] hg+http://hg.myproject.org/MyProject@da39a3ee5e6b#egg=MyProject
|
|
||||||
[-e] hg+http://hg.myproject.org/MyProject@2019#egg=MyProject
|
|
||||||
[-e] hg+http://hg.myproject.org/MyProject@v1.0#egg=MyProject
|
|
||||||
[-e] hg+http://hg.myproject.org/MyProject@special_feature#egg=MyProject
|
|
||||||
|
|
||||||
Subversion
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
pip supports the URL schemes ``svn``, ``svn+svn``, ``svn+http``, ``svn+https``, ``svn+ssh``.
|
|
||||||
|
|
||||||
You can also give specific revisions to an SVN URL, like so::
|
|
||||||
|
|
||||||
[-e] svn+svn://svn.myproject.org/svn/MyProject#egg=MyProject
|
|
||||||
[-e] svn+http://svn.myproject.org/svn/MyProject/trunk@2019#egg=MyProject
|
|
||||||
|
|
||||||
which will check out revision 2019. ``@{20080101}`` would also check
|
|
||||||
out the revision from 2008-01-01. You can only check out specific
|
|
||||||
revisions using ``-e svn+...``.
|
|
||||||
|
|
||||||
Bazaar
|
|
||||||
~~~~~~
|
|
||||||
|
|
||||||
pip supports Bazaar using the ``bzr+http``, ``bzr+https``, ``bzr+ssh``,
|
|
||||||
``bzr+sftp``, ``bzr+ftp`` and ``bzr+lp`` schemes.
|
|
||||||
|
|
||||||
Here are the supported forms::
|
|
||||||
|
|
||||||
[-e] bzr+http://bzr.myproject.org/MyProject/trunk#egg=MyProject
|
|
||||||
[-e] bzr+sftp://user@myproject.org/MyProject/trunk#egg=MyProject
|
|
||||||
[-e] bzr+ssh://user@myproject.org/MyProject/trunk#egg=MyProject
|
|
||||||
[-e] bzr+ftp://user@myproject.org/MyProject/trunk#egg=MyProject
|
|
||||||
[-e] bzr+lp:MyProject#egg=MyProject
|
|
||||||
|
|
||||||
Tags or revisions can be installed like so::
|
|
||||||
|
|
||||||
[-e] bzr+https://bzr.myproject.org/MyProject/trunk@2019#egg=MyProject
|
|
||||||
[-e] bzr+http://bzr.myproject.org/MyProject/trunk@v1.0#egg=MyProject
|
|
||||||
|
|
||||||
|
|
||||||
Finding Packages
|
|
||||||
++++++++++++++++
|
|
||||||
|
|
||||||
pip searches for packages on `PyPI`_ using the
|
|
||||||
`http simple interface <http://pypi.python.org/simple>`_,
|
|
||||||
which is documented `here <http://packages.python.org/setuptools/easy_install.html#package-index-api>`_
|
|
||||||
and `there <http://www.python.org/dev/peps/pep-0301/>`_
|
|
||||||
|
|
||||||
pip offers a number of Package Index Options for modifying how packages are found.
|
|
||||||
|
|
||||||
See the :ref:`pip install Examples<pip install Examples>`.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`SSL Certificate Verification`:
|
|
||||||
|
|
||||||
SSL Certificate Verification
|
|
||||||
++++++++++++++++++++++++++++
|
|
||||||
|
|
||||||
Starting with v1.3, pip provides SSL certificate verification over https, for the purpose
|
|
||||||
of providing secure, certified downloads from PyPI.
|
|
||||||
|
|
||||||
|
|
||||||
Hash Verification
|
|
||||||
+++++++++++++++++
|
|
||||||
|
|
||||||
PyPI provides md5 hashes in the hash fragment of package download urls.
|
|
||||||
|
|
||||||
pip supports checking this, as well as any of the
|
|
||||||
guaranteed hashlib algorithms (sha1, sha224, sha384, sha256, sha512, md5).
|
|
||||||
|
|
||||||
The hash fragment is case sensitive (i.e. sha1 not SHA1).
|
|
||||||
|
|
||||||
This check is only intended to provide basic download corruption protection.
|
|
||||||
It is not intended to provide security against tampering. For that,
|
|
||||||
see :ref:`SSL Certificate Verification`
|
|
||||||
|
|
||||||
|
|
||||||
Download Cache
|
|
||||||
++++++++++++++
|
|
||||||
|
|
||||||
pip offers a :ref:`--download-cache <install_--download-cache>` option for
|
|
||||||
installs to prevent redundant downloads of archives from PyPI.
|
|
||||||
|
|
||||||
The point of this cache is *not* to circumvent the index crawling process, but
|
|
||||||
to *just* prevent redundant downloads.
|
|
||||||
|
|
||||||
Items are stored in this cache based on the url the archive was found at, not
|
|
||||||
simply the archive name.
|
|
||||||
|
|
||||||
If you want a fast/local install solution that circumvents crawling PyPI, see
|
|
||||||
the :ref:`Fast & Local Installs`.
|
|
||||||
|
|
||||||
Like all options, :ref:`--download-cache <install_--download-cache>`, can also
|
|
||||||
be set as an environment variable, or placed into the pip config file. See the
|
|
||||||
:ref:`Configuration` section.
|
|
||||||
|
|
||||||
|
|
||||||
.. _`editable-installs`:
|
|
||||||
|
|
||||||
"Editable" Installs
|
|
||||||
+++++++++++++++++++
|
|
||||||
|
|
||||||
"Editable" installs are fundamentally `"setuptools develop mode"
|
|
||||||
<http://packages.python.org/setuptools/setuptools.html#development-mode>`_
|
|
||||||
installs.
|
|
||||||
|
|
||||||
You can install local projects or VCS projects in "editable" mode::
|
|
||||||
|
|
||||||
$ pip install -e path/to/SomeProject
|
|
||||||
$ pip install -e git+http://repo/my_project.git#egg=SomeProject
|
|
||||||
|
|
||||||
For local projects, the "SomeProject.egg-info" directory is created relative to
|
|
||||||
the project path. This is one advantage over just using ``setup.py develop``,
|
|
||||||
which creates the "egg-info" directly relative the current working directory.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Controlling setup_requires
|
|
||||||
++++++++++++++++++++++++++
|
|
||||||
|
|
||||||
Setuptools offers the ``setup_requires`` `setup() keyword
|
|
||||||
<http://pythonhosted.org/setuptools/setuptools.html#new-and-changed-setup-keywords>`_
|
|
||||||
for specifying dependencies that need to be present in order for the `setup.py`
|
|
||||||
script to run. Internally, Setuptools uses ``easy_install`` to fulfill these
|
|
||||||
dependencies.
|
|
||||||
|
|
||||||
pip has no way to control how these dependencies are located. None of the
|
|
||||||
Package Index Options have an effect.
|
|
||||||
|
|
||||||
The solution is to configure a "system" or "personal" `Distutils configuration
|
|
||||||
file
|
|
||||||
<http://docs.python.org/2/install/index.html#distutils-configuration-files>`_ to
|
|
||||||
manage the fulfillment.
|
|
||||||
|
|
||||||
For example, to have the dependency located at an alternate index, add this:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
[easy_install]
|
|
||||||
index_url = https://my.index-mirror.com
|
|
||||||
|
|
||||||
To have the dependency located from a local directory and not crawl PyPI, add this:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
[easy_install]
|
|
||||||
allow_hosts = ''
|
|
||||||
find_links = file:///path/to/local/archives
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
.. pip-command-options:: install
|
|
||||||
|
|
||||||
.. pip-index-options::
|
|
||||||
|
|
||||||
|
|
||||||
.. _`pip install Examples`:
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1) Install `SomePackage` and it's dependencies from `PyPI`_ using :ref:`Requirement Specifiers`
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install SomePackage # latest version
|
|
||||||
$ pip install SomePackage==1.0.4 # specific version
|
|
||||||
$ pip install 'SomePackage>=1.0.4' # minimum version
|
|
||||||
|
|
||||||
|
|
||||||
2) Install a list of requirements specified in a file. See the :ref:`Requirements files <Requirements Files>`.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install -r requirements.txt
|
|
||||||
|
|
||||||
|
|
||||||
3) Upgrade an already installed `SomePackage` to the latest from PyPI.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install --upgrade SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
4) Install a local project in "editable" mode. See the section on :ref:`Editable Installs <editable-installs>`.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install -e . # project in current directory
|
|
||||||
$ pip install -e path/to/project # project in another directory
|
|
||||||
|
|
||||||
|
|
||||||
5) Install a project from VCS in "editable" mode. See the sections on :ref:`VCS Support <VCS Support>` and :ref:`Editable Installs <editable-installs>`.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install -e git+https://git.repo/some_pkg.git#egg=SomePackage # from git
|
|
||||||
$ pip install -e hg+https://hg.repo/some_pkg.git#egg=SomePackage # from mercurial
|
|
||||||
$ pip install -e svn+svn://svn.repo/some_pkg/trunk/#egg=SomePackage # from svn
|
|
||||||
$ pip install -e git+https://git.repo/some_pkg.git@feature#egg=SomePackage # from 'feature' branch
|
|
||||||
$ pip install -e git+https://git.repo/some_repo.git@egg=subdir&subdirectory=subdir_path # install a python package from a repo subdirectory
|
|
||||||
|
|
||||||
6) Install a package with `setuptools extras`_.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install SomePackage[PDF]
|
|
||||||
$ pip install SomePackage[PDF]==3.0
|
|
||||||
$ pip install -e .[PDF]==3.0 # editable project in current directory
|
|
||||||
|
|
||||||
|
|
||||||
7) Install a particular source archive file.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install ./downloads/SomePackage-1.0.4.tar.gz
|
|
||||||
$ pip install http://my.package.repo/SomePackage-1.0.4.zip
|
|
||||||
|
|
||||||
|
|
||||||
8) Install from alternative package repositories.
|
|
||||||
|
|
||||||
Install from a different index, and not `PyPI`_ ::
|
|
||||||
|
|
||||||
$ pip install --index-url http://my.package.repo/simple/ SomePackage
|
|
||||||
|
|
||||||
Search an additional index during install, in addition to `PyPI`_ ::
|
|
||||||
|
|
||||||
$ pip install --extra-index-url http://my.package.repo/simple SomePackage
|
|
||||||
|
|
||||||
Install from a local flat directory containing archives (and don't scan indexes)::
|
|
||||||
|
|
||||||
$ pip install --no-index --find-links=file:///local/dir/ SomePackage
|
|
||||||
$ pip install --no-index --find-links=/local/dir/ SomePackage
|
|
||||||
$ pip install --no-index --find-links=relative/dir/ SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
9) Find pre-release and development versions, in addition to stable versions. By default, pip only finds stable versions.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip install --pre SomePackage
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. _PyPI: http://pypi.python.org/pypi/
|
|
||||||
.. _setuptools extras: http://packages.python.org/setuptools/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies
|
|
||||||
-45
@@ -1,45 +0,0 @@
|
|||||||
.. _`pip list`:
|
|
||||||
|
|
||||||
pip list
|
|
||||||
---------
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: list
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: list
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
.. pip-command-options:: list
|
|
||||||
|
|
||||||
.. pip-index-options::
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1) List installed packages.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip list
|
|
||||||
Pygments (1.5)
|
|
||||||
docutils (0.9.1)
|
|
||||||
Sphinx (1.1.2)
|
|
||||||
Jinja2 (2.6)
|
|
||||||
|
|
||||||
2) List outdated packages (excluding editables), and the latest version available
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip list --outdated
|
|
||||||
docutils (Current: 0.9.1 Latest: 0.10)
|
|
||||||
Sphinx (Current: 1.1.2 Latest: 1.1.3)
|
|
||||||
-36
@@ -1,36 +0,0 @@
|
|||||||
.. _`pip search`:
|
|
||||||
|
|
||||||
pip search
|
|
||||||
----------
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: search
|
|
||||||
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: search
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
.. pip-command-options:: search
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1. Search for "peppercorn"
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip search peppercorn
|
|
||||||
pepperedform - Helpers for using peppercorn with formprocess.
|
|
||||||
peppercorn - A library for converting a token stream into [...]
|
|
||||||
|
|
||||||
.. _`pip wheel`:
|
|
||||||
-37
@@ -1,37 +0,0 @@
|
|||||||
.. _`pip show`:
|
|
||||||
|
|
||||||
pip show
|
|
||||||
--------
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: show
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: show
|
|
||||||
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
.. pip-command-options:: show
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1. Show information about a package:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip show sphinx
|
|
||||||
---
|
|
||||||
Name: Sphinx
|
|
||||||
Version: 1.1.3
|
|
||||||
Location: /my/env/lib/pythonx.x/site-packages
|
|
||||||
Requires: Pygments, Jinja2, docutils
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
.. _`pip uninstall`:
|
|
||||||
|
|
||||||
pip uninstall
|
|
||||||
-------------
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: uninstall
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: uninstall
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
.. pip-command-options:: uninstall
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1) Uninstall a package.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip uninstall simplejson
|
|
||||||
Uninstalling simplejson:
|
|
||||||
/home/me/env/lib/python2.7/site-packages/simplejson
|
|
||||||
/home/me/env/lib/python2.7/site-packages/simplejson-2.2.1-py2.7.egg-info
|
|
||||||
Proceed (y/n)? y
|
|
||||||
Successfully uninstalled simplejson
|
|
||||||
|
|
||||||
-37
@@ -1,37 +0,0 @@
|
|||||||
|
|
||||||
.. _`pip wheel`:
|
|
||||||
|
|
||||||
pip wheel
|
|
||||||
---------
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
|
|
||||||
Usage
|
|
||||||
*****
|
|
||||||
|
|
||||||
.. pip-command-usage:: wheel
|
|
||||||
|
|
||||||
|
|
||||||
Description
|
|
||||||
***********
|
|
||||||
|
|
||||||
.. pip-command-description:: wheel
|
|
||||||
|
|
||||||
|
|
||||||
Options
|
|
||||||
*******
|
|
||||||
|
|
||||||
.. pip-command-options:: wheel
|
|
||||||
|
|
||||||
.. pip-index-options::
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
********
|
|
||||||
|
|
||||||
1. Build wheels for a requirement (and all its dependencies), and then install
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage
|
|
||||||
$ pip install --no-index --find-links=/tmp/wheelhouse SomePackage
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user