mirror of
https://github.com/pyenv/pyenv.git
synced 2025-11-11 13:03:46 -05:00
Compare commits
660 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
275bc652a4 | ||
|
|
6f40dae3d7 | ||
|
|
d2794f54e5 | ||
|
|
bc03106cee | ||
|
|
bf93b90282 | ||
|
|
7b8bd11416 | ||
|
|
f623231734 | ||
|
|
50d5de4731 | ||
|
|
15977c852d | ||
|
|
10d5d9a24f | ||
|
|
be037932ca | ||
|
|
af95960960 | ||
|
|
17c153b1c1 | ||
|
|
065f5578b1 | ||
|
|
71c9ff565b | ||
|
|
88270e83e8 | ||
|
|
b09681c9fb | ||
|
|
80eef69c9a | ||
|
|
bc025641c2 | ||
|
|
5dc3ee95fd | ||
|
|
4903223f23 | ||
|
|
1aea75055a | ||
|
|
f30085eaf4 | ||
|
|
43d311ef58 | ||
|
|
239f4a6b51 | ||
|
|
1463968a3f | ||
|
|
97c6a4c932 | ||
|
|
5131ef521b | ||
|
|
1d7ce651b0 | ||
|
|
c335f96eac | ||
|
|
f0eeac63a3 | ||
|
|
4ebe18a273 | ||
|
|
ab2aa6d13b | ||
|
|
431761d125 | ||
|
|
e6e858c33b | ||
|
|
e9aa6cf649 | ||
|
|
4e30b1a5e1 | ||
|
|
2beef3c455 | ||
|
|
797975b742 | ||
|
|
527334b401 | ||
|
|
292813eca3 | ||
|
|
d935a2a994 | ||
|
|
d9a7117c3b | ||
|
|
6596657004 | ||
|
|
f48a5b11d7 | ||
|
|
efe461d2b4 | ||
|
|
4540967250 | ||
|
|
d14357f64c | ||
|
|
d6e1de3e2f | ||
|
|
063717e6b5 | ||
|
|
5a05788e61 | ||
|
|
48335302d9 | ||
|
|
9146f44db1 | ||
|
|
b9ae43a9df | ||
|
|
f6a77549eb | ||
|
|
cbd246acff | ||
|
|
9d21169ee0 | ||
|
|
7bceb85067 | ||
|
|
eeb69b1b79 | ||
|
|
8abefe1fcb | ||
|
|
b22fcd9759 | ||
|
|
45df273592 | ||
|
|
dbd50e7bd9 | ||
|
|
1c0a5d8264 | ||
|
|
7c7cca8a26 | ||
|
|
123b3af1a0 | ||
|
|
ba9c01ce77 | ||
|
|
7535efe031 | ||
|
|
995da2df89 | ||
|
|
f28b3ee123 | ||
|
|
97b957d5d5 | ||
|
|
fe2412c95d | ||
|
|
5114600c4d | ||
|
|
96d3bd6379 | ||
|
|
d320d74a07 | ||
|
|
fc49f7e21e | ||
|
|
be4f5992d6 | ||
|
|
25a48694be | ||
|
|
9b7b2a6b40 | ||
|
|
f59729359a | ||
|
|
93ac0632c7 | ||
|
|
7a21cf9c10 | ||
|
|
720dee76af | ||
|
|
db6a41c90f | ||
|
|
bfddc69120 | ||
|
|
acce3744e7 | ||
|
|
5ca423c9f3 | ||
|
|
f0e852553a | ||
|
|
fc8597ca38 | ||
|
|
e7a68ad467 | ||
|
|
0fd1eaaeb5 | ||
|
|
b986f8f93f | ||
|
|
60e1abe7fa | ||
|
|
afcf4f0c7c | ||
|
|
c0aff27842 | ||
|
|
e172eb2818 | ||
|
|
3a5c2cabb1 | ||
|
|
871ec77795 | ||
|
|
8761ae8f7c | ||
|
|
3d401ebcd2 | ||
|
|
268f965421 | ||
|
|
ff0f8a140b | ||
|
|
6c2d234e55 | ||
|
|
c6dd3b9468 | ||
|
|
8fee82e456 | ||
|
|
7220044b49 | ||
|
|
a797bb6d88 | ||
|
|
665f9d9466 | ||
|
|
cb260fb9d0 | ||
|
|
4f0439cd12 | ||
|
|
2e387816f1 | ||
|
|
ee4182321e | ||
|
|
661a2b29d3 | ||
|
|
8c503c6e75 | ||
|
|
743a637b59 | ||
|
|
7fe78245d8 | ||
|
|
96c0362b53 | ||
|
|
2dae281201 | ||
|
|
4a52bfaff9 | ||
|
|
b26b83a11f | ||
|
|
35aed218cf | ||
|
|
38ab616344 | ||
|
|
720870011b | ||
|
|
b2ac5df98d | ||
|
|
d9e772eb6e | ||
|
|
eef8ac2701 | ||
|
|
45b45bcf25 | ||
|
|
ded98e11de | ||
|
|
dc1b5a197f | ||
|
|
79507fbadf | ||
|
|
de5c61cd59 | ||
|
|
8e657374a1 | ||
|
|
77bd5bc6c9 | ||
|
|
e82f943174 | ||
|
|
bbf8cb4a95 | ||
|
|
a1df551bcf | ||
|
|
fc41c87395 | ||
|
|
6e02ad2fe4 | ||
|
|
58e24a64a2 | ||
|
|
77d9e34a49 | ||
|
|
d7f4aa02ed | ||
|
|
42bb40a5d8 | ||
|
|
d38f00cd4a | ||
|
|
e9a6a2909c | ||
|
|
5f95ce1835 | ||
|
|
ff995b6654 | ||
|
|
4d15d21f0f | ||
|
|
6790e3e18a | ||
|
|
737e0f1b3f | ||
|
|
ab9ee414ad | ||
|
|
c3a755c853 | ||
|
|
9901c4b84d | ||
|
|
04ce9bcd5c | ||
|
|
4cf93df059 | ||
|
|
a43f7f5341 | ||
|
|
af2cb3f943 | ||
|
|
9b8b9c5205 | ||
|
|
b6aef96cea | ||
|
|
bc6be9ed9f | ||
|
|
2297bd3741 | ||
|
|
8595df4e18 | ||
|
|
200adac02f | ||
|
|
6509d318f4 | ||
|
|
474767618d | ||
|
|
82aaef7842 | ||
|
|
9df0a2916d | ||
|
|
f76309d419 | ||
|
|
29d3df661e | ||
|
|
96b4c0f7e7 | ||
|
|
f9053406c2 | ||
|
|
ae4659538d | ||
|
|
4159055117 | ||
|
|
aa62882347 | ||
|
|
b8a7de8a3c | ||
|
|
a661e14580 | ||
|
|
22f4218522 | ||
|
|
6f761f8159 | ||
|
|
0468ffdd49 | ||
|
|
352c8f49bd | ||
|
|
72eb7f5c32 | ||
|
|
59c796c138 | ||
|
|
a465cb808c | ||
|
|
ade2bf2a0d | ||
|
|
ed133866d7 | ||
|
|
f6a5eb90a1 | ||
|
|
d805ec19ca | ||
|
|
3ba7702602 | ||
|
|
887f2263f0 | ||
|
|
d215804fbe | ||
|
|
6697437d1a | ||
|
|
e9e151c89e | ||
|
|
0880a92a7f | ||
|
|
3169a4894b | ||
|
|
21c0d930e9 | ||
|
|
f470c80e5a | ||
|
|
2b5ee0c425 | ||
|
|
5931001cab | ||
|
|
5c91bc981c | ||
|
|
d496c03497 | ||
|
|
2ec8f0f0a4 | ||
|
|
00596b4b46 | ||
|
|
e9a8adb37f | ||
|
|
6efe6dafe7 | ||
|
|
a01a08c551 | ||
|
|
c2cc649cfa | ||
|
|
9dac275567 | ||
|
|
3290973990 | ||
|
|
d378b274d9 | ||
|
|
08b0d162b4 | ||
|
|
b9e698305e | ||
|
|
01f2a1d2ca | ||
|
|
4b8146f516 | ||
|
|
5a69204978 | ||
|
|
801b093b67 | ||
|
|
2cca695bed | ||
|
|
67324465fa | ||
|
|
7612f0391d | ||
|
|
21f44a130a | ||
|
|
033529915e | ||
|
|
e77e60206d | ||
|
|
d5506e1404 | ||
|
|
f512496588 | ||
|
|
27d4b9b6d2 | ||
|
|
ef8c8b8ef2 | ||
|
|
5998c4596b | ||
|
|
8851acda13 | ||
|
|
1ceb678e86 | ||
|
|
79e2c96a7e | ||
|
|
fa0442688a | ||
|
|
9e596d641d | ||
|
|
3ab6836c38 | ||
|
|
082c19f5a1 | ||
|
|
3f1a4d0ff9 | ||
|
|
0df94b1097 | ||
|
|
1e2979d101 | ||
|
|
72a480f298 | ||
|
|
9d74383461 | ||
|
|
2e737a80c0 | ||
|
|
d707546912 | ||
|
|
4501d90896 | ||
|
|
149a915770 | ||
|
|
0c81002220 | ||
|
|
fe87e44870 | ||
|
|
601ac4b3f3 | ||
|
|
60950d0082 | ||
|
|
cff2c4527d | ||
|
|
10e6dd8c2d | ||
|
|
18ecb4ffbb | ||
|
|
986db22da8 | ||
|
|
07037d9a5d | ||
|
|
8914be846f | ||
|
|
d1f1c4c61c | ||
|
|
6c70e2a997 | ||
|
|
3cde540ca0 | ||
|
|
83e820d869 | ||
|
|
8e60ad8c6d | ||
|
|
a841f42d53 | ||
|
|
08367dbb83 | ||
|
|
6222bb743d | ||
|
|
bce58e9d9a | ||
|
|
d4e6a4c3d3 | ||
|
|
9eef6c536b | ||
|
|
d737ae9f03 | ||
|
|
2da9bfd1f8 | ||
|
|
3136fce0c0 | ||
|
|
cce1960de0 | ||
|
|
6641e291ee | ||
|
|
f5fded3b9d | ||
|
|
cac8fd7f60 | ||
|
|
b55830fb01 | ||
|
|
5b9b3f742b | ||
|
|
34065dddbb | ||
|
|
ea9214bb2e | ||
|
|
d90cb0ec85 | ||
|
|
d75e12298a | ||
|
|
addec6339f | ||
|
|
abab44df80 | ||
|
|
4afa280066 | ||
|
|
5c6a812b86 | ||
|
|
650c9a3d6e | ||
|
|
0933c40179 | ||
|
|
2613e84447 | ||
|
|
d1f78c2716 | ||
|
|
cf89abaacf | ||
|
|
545052d5ca | ||
|
|
0d51899e9b | ||
|
|
fa32d81579 | ||
|
|
164f7bf4a6 | ||
|
|
7bdd097254 | ||
|
|
5ae1c803cb | ||
|
|
f536dca41f | ||
|
|
8d951d5025 | ||
|
|
5c31c45d05 | ||
|
|
0851436caa | ||
|
|
44c20af80e | ||
|
|
65ae0a3261 | ||
|
|
24df447e44 | ||
|
|
a380250881 | ||
|
|
ff38d6935d | ||
|
|
27e1c25cf7 | ||
|
|
a5c34a6c00 | ||
|
|
6e01f83742 | ||
|
|
47ce2155b4 | ||
|
|
0c6b28c9aa | ||
|
|
4d22259ac3 | ||
|
|
7ed908bad1 | ||
|
|
dcc7185ae1 | ||
|
|
cc423566a8 | ||
|
|
e488b31597 | ||
|
|
5bbfcf75f6 | ||
|
|
8164af44b4 | ||
|
|
a1ffc93372 | ||
|
|
9e1bbff8a1 | ||
|
|
6ee219b9c7 | ||
|
|
5f23e3d7b2 | ||
|
|
854f6f3a46 | ||
|
|
63ac2b717f | ||
|
|
81726b16be | ||
|
|
4acab71e1e | ||
|
|
8b8128e33b | ||
|
|
e835d447ed | ||
|
|
7f44afc1c0 | ||
|
|
f380967e8d | ||
|
|
d640941976 | ||
|
|
e58ac666c4 | ||
|
|
ce99decad5 | ||
|
|
719e6db358 | ||
|
|
e0547de922 | ||
|
|
4b9907af1c | ||
|
|
1d09851b2b | ||
|
|
800ccaa5e3 | ||
|
|
00da261211 | ||
|
|
b81d0ff0cd | ||
|
|
715a7789ba | ||
|
|
6aa6d6b026 | ||
|
|
62f9b7a731 | ||
|
|
cc967fddb7 | ||
|
|
27ebc8bab7 | ||
|
|
71db79eded | ||
|
|
3aa263b51f | ||
|
|
59fbf8d103 | ||
|
|
b21d2c7dea | ||
|
|
20e5404248 | ||
|
|
56c58e2778 | ||
|
|
3c6ecaf66a | ||
|
|
87ca55100b | ||
|
|
589872affb | ||
|
|
73d5ea7426 | ||
|
|
b992ffca1d | ||
|
|
9c82314570 | ||
|
|
403154e09e | ||
|
|
b44398e954 | ||
|
|
46a01b1643 | ||
|
|
bf94eb8cbe | ||
|
|
b225f2030d | ||
|
|
cbe7d0241b | ||
|
|
e65a10be51 | ||
|
|
badc8255ab | ||
|
|
385d3337ef | ||
|
|
558200285b | ||
|
|
2c26b0870a | ||
|
|
2cea06b88a | ||
|
|
c977774977 | ||
|
|
314937d599 | ||
|
|
07ae0d8e42 | ||
|
|
461c5bbc2d | ||
|
|
a7f5a19a24 | ||
|
|
f344731cf9 | ||
|
|
a3f35b7e0d | ||
|
|
b025dbfdab | ||
|
|
efd9c1cd48 | ||
|
|
38eb9fe948 | ||
|
|
6ee7aaf611 | ||
|
|
93ba3a4c51 | ||
|
|
34087d03ec | ||
|
|
f136b219db | ||
|
|
84705cfe61 | ||
|
|
2a9f6038e0 | ||
|
|
0e3e603429 | ||
|
|
71a916faf2 | ||
|
|
8e02b93e39 | ||
|
|
a7a99c75eb | ||
|
|
bb3b5de179 | ||
|
|
f956502fd8 | ||
|
|
4c5ffc8d99 | ||
|
|
8dc4e8d6f8 | ||
|
|
7edceff71c | ||
|
|
1587d8a03c | ||
|
|
5dea3c9e63 | ||
|
|
12d4fdb307 | ||
|
|
319721b380 | ||
|
|
3dd9332eee | ||
|
|
88922e2bc0 | ||
|
|
0965577b93 | ||
|
|
f538169992 | ||
|
|
d03f290b5d | ||
|
|
8ddf8760d5 | ||
|
|
8fa6b4a184 | ||
|
|
e1a5b326e4 | ||
|
|
8892f3735d | ||
|
|
9eedd4ef84 | ||
|
|
b70dcb9f2d | ||
|
|
008a5a1ff9 | ||
|
|
5b7eb42a9f | ||
|
|
35d4cd2259 | ||
|
|
5bff9c773a | ||
|
|
6efb3c327f | ||
|
|
1a05d9a8cd | ||
|
|
df51c13323 | ||
|
|
a025866bac | ||
|
|
2797f3d80e | ||
|
|
0d85193f39 | ||
|
|
4d534fed31 | ||
|
|
43212f64ed | ||
|
|
75559df89d | ||
|
|
3d5156ed1d | ||
|
|
aa76fd2f9c | ||
|
|
db141f66a4 | ||
|
|
fe07deb193 | ||
|
|
7159e24aa8 | ||
|
|
1cc90d31ae | ||
|
|
76bf3ee0d6 | ||
|
|
fd3dd225ba | ||
|
|
140808e3d4 | ||
|
|
edb5a32620 | ||
|
|
88e2d73d52 | ||
|
|
7b95fea77e | ||
|
|
20eb5c4913 | ||
|
|
bc2d2456ae | ||
|
|
064531ea1f | ||
|
|
80b8508dbc | ||
|
|
02e073a503 | ||
|
|
e094d683ed | ||
|
|
bd1454c69f | ||
|
|
b726d645c3 | ||
|
|
78441ce084 | ||
|
|
4953fa4034 | ||
|
|
1f76effbfb | ||
|
|
5e20237f5b | ||
|
|
dd44d0a713 | ||
|
|
a28c040eb9 | ||
|
|
6a787dd951 | ||
|
|
5d9132623f | ||
|
|
f7193b09fd | ||
|
|
498d226b2f | ||
|
|
ccc51244e3 | ||
|
|
516f49e913 | ||
|
|
a2ab3bc32c | ||
|
|
ab4a8396e1 | ||
|
|
733cb397b2 | ||
|
|
7f9a2325e5 | ||
|
|
625b3b7ec1 | ||
|
|
c95d446c53 | ||
|
|
6e749ef12f | ||
|
|
850dd87332 | ||
|
|
fb3e9b020e | ||
|
|
02a348b657 | ||
|
|
5c41dc3901 | ||
|
|
74a3c55623 | ||
|
|
bc8c8a6cd9 | ||
|
|
99bc72a908 | ||
|
|
aab8bb262d | ||
|
|
f14a4ef8e5 | ||
|
|
3bf50856ce | ||
|
|
c3e55aa5ae | ||
|
|
704548336a | ||
|
|
0ea5e12b4a | ||
|
|
28fd240de2 | ||
|
|
586c0e6d62 | ||
|
|
c920eaa9be | ||
|
|
d2f210d70d | ||
|
|
683036298e | ||
|
|
93b536863f | ||
|
|
403f4eb7a7 | ||
|
|
4c71f3c5cd | ||
|
|
106e4cae90 | ||
|
|
10221d51f1 | ||
|
|
aff87c3cb3 | ||
|
|
b0f640db61 | ||
|
|
af0fed2e34 | ||
|
|
e996f2f51a | ||
|
|
0fe18d0dc1 | ||
|
|
cc6c45d7fb | ||
|
|
2646c6c159 | ||
|
|
ce66352f6d | ||
|
|
9e133adf99 | ||
|
|
b1851f2aff | ||
|
|
b943e0abff | ||
|
|
d6d556911b | ||
|
|
b8ecd2d6dd | ||
|
|
1e5ef005fb | ||
|
|
d11db0f0f2 | ||
|
|
8e43e72082 | ||
|
|
ae86a253e2 | ||
|
|
0c38147fcb | ||
|
|
e1ea64b0b9 | ||
|
|
fa35e792c1 | ||
|
|
f5807424c2 | ||
|
|
4c006959fa | ||
|
|
f9a19e3f24 | ||
|
|
d5c24f5122 | ||
|
|
392e404cc6 | ||
|
|
b04e067c83 | ||
|
|
ed2937f4d1 | ||
|
|
8848006540 | ||
|
|
7a4fe458b8 | ||
|
|
f76faa88b8 | ||
|
|
9ce760c798 | ||
|
|
152ebe6e61 | ||
|
|
1a6eb80bcd | ||
|
|
745bceac22 | ||
|
|
583f3b0e21 | ||
|
|
cc9c72747a | ||
|
|
b473f7a271 | ||
|
|
b726ace943 | ||
|
|
499edda1d7 | ||
|
|
3bfd91de51 | ||
|
|
c7e139186b | ||
|
|
7c84490649 | ||
|
|
b75ef17db7 | ||
|
|
daa12e97c6 | ||
|
|
1c5eb82e93 | ||
|
|
ff387010b3 | ||
|
|
27dd805acb | ||
|
|
5f1761645f | ||
|
|
f8c9282e8c | ||
|
|
37f46df390 | ||
|
|
4f8138c70a | ||
|
|
db3b4773bc | ||
|
|
fe04103e24 | ||
|
|
7777bb6d58 | ||
|
|
e9bcd9e0bd | ||
|
|
2cc2c22094 | ||
|
|
319000b448 | ||
|
|
b4ba76a15a | ||
|
|
3ff0785fe7 | ||
|
|
1b7d3b0502 | ||
|
|
c43711a216 | ||
|
|
3c86d811c8 | ||
|
|
d94c1d2143 | ||
|
|
3fd475e1d5 | ||
|
|
309a6cd65e | ||
|
|
924f6dc76d | ||
|
|
56a9a7cebf | ||
|
|
b8cbb18f7b | ||
|
|
27caf0ef3d | ||
|
|
b203ccbe74 | ||
|
|
cb962d5a74 | ||
|
|
539800cc3b | ||
|
|
b77ae3e0b5 | ||
|
|
dfc3f9e13c | ||
|
|
f120551ef3 | ||
|
|
b03a4cde78 | ||
|
|
71b2081a75 | ||
|
|
5fbc3ae3d5 | ||
|
|
1ce37e53c7 | ||
|
|
9ae12a7c22 | ||
|
|
b3deef5e80 | ||
|
|
28317ecb34 | ||
|
|
78efa7613d | ||
|
|
0bf26d8f1d | ||
|
|
ac70eb701c | ||
|
|
c834f241a8 | ||
|
|
aa39b392a9 | ||
|
|
907ddb614d | ||
|
|
dd0e3feae3 | ||
|
|
c24207428c | ||
|
|
8b23026d6c | ||
|
|
cc9b7aa7dd | ||
|
|
318a41d723 | ||
|
|
5a52177d15 | ||
|
|
2e8c43215d | ||
|
|
45966deb49 | ||
|
|
7aa644da5c | ||
|
|
56379532a6 | ||
|
|
9bf0755c81 | ||
|
|
f01d1d1064 | ||
|
|
e9b0ecf021 | ||
|
|
cbc6f38774 | ||
|
|
e220b76c3e | ||
|
|
8d1bf96267 | ||
|
|
e49922064d | ||
|
|
95882fce68 | ||
|
|
cc20ab3392 | ||
|
|
fe50ed29ea | ||
|
|
e9db2caace | ||
|
|
2d55aea467 | ||
|
|
521c2c3e06 | ||
|
|
0bc8d8252e | ||
|
|
80f4022891 | ||
|
|
998af2a3ab | ||
|
|
3b820e8c0c | ||
|
|
8bc19e28e0 | ||
|
|
0d0516ad05 | ||
|
|
6997026064 | ||
|
|
dd1b6502c6 | ||
|
|
d1013e82de | ||
|
|
bb2d058167 | ||
|
|
6e58c43d8a | ||
|
|
dce4eb636a | ||
|
|
c170255580 | ||
|
|
8bf0938e60 | ||
|
|
aa831836e1 | ||
|
|
0eb1520707 | ||
|
|
606346761f | ||
|
|
48e1488bc9 | ||
|
|
0259b6adfb | ||
|
|
dbb1fb5a06 | ||
|
|
755c00e67c | ||
|
|
ad900ba436 | ||
|
|
ea7dc5f1e1 | ||
|
|
be53bb8951 | ||
|
|
167ff2a198 | ||
|
|
ee3c9bef5e | ||
|
|
6d307c6e11 | ||
|
|
a0705cb86e | ||
|
|
fca31c4307 | ||
|
|
684f7b7f21 | ||
|
|
da06998457 | ||
|
|
f466679bd1 | ||
|
|
4a217a0cd1 | ||
|
|
5b14236bac | ||
|
|
a16355fe33 | ||
|
|
c9575d7cb0 | ||
|
|
252003f18e | ||
|
|
7509b9fadf | ||
|
|
f878896a77 | ||
|
|
d09af20897 | ||
|
|
b520475b22 | ||
|
|
ffa2505450 | ||
|
|
d73e945329 | ||
|
|
779aacbf07 | ||
|
|
2ed400bfc6 | ||
|
|
e8ad78f837 | ||
|
|
aede700619 | ||
|
|
ffa5fb0ea0 | ||
|
|
42079cf3fb | ||
|
|
d14eda2c1a | ||
|
|
579d44203f | ||
|
|
a7695aa5d3 | ||
|
|
f3ae8fd904 | ||
|
|
4174749b24 | ||
|
|
e89ae3a4a9 | ||
|
|
13122ca9bf | ||
|
|
34a4a532b2 | ||
|
|
d08fcc522e | ||
|
|
f0ff5a416e | ||
|
|
e66ca60340 | ||
|
|
71e5cd962e | ||
|
|
da659739d2 | ||
|
|
dff57ae35d | ||
|
|
2856f81bb9 | ||
|
|
5224641f1a | ||
|
|
a4c02082cb | ||
|
|
80c0dce7b2 | ||
|
|
de25a84dc2 | ||
|
|
8187bc84e3 | ||
|
|
880ea61dd8 | ||
|
|
7953f573c6 | ||
|
|
2457419b4a |
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1 +0,0 @@
|
||||
/share/man/man[1-8]/*.[1-8] linguist-generated
|
||||
6
.github/dependabot.yml
vendored
6
.github/dependabot.yml
vendored
@@ -1,6 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: 'github-actions'
|
||||
directory: '/'
|
||||
schedule:
|
||||
interval: 'weekly'
|
||||
17
.github/workflows/ci.yml
vendored
17
.github/workflows/ci.yml
vendored
@@ -1,17 +0,0 @@
|
||||
name: CI
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install bats
|
||||
run: git clone --depth 1 --branch v1.10.0 https://github.com/bats-core/bats-core.git bats
|
||||
- name: Run tests
|
||||
run: PATH="./bats/bin:$PATH" test/run
|
||||
29
.github/workflows/lint.yml
vendored
29
.github/workflows/lint.yml
vendored
@@ -1,29 +0,0 @@
|
||||
---
|
||||
|
||||
name: Lint
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
shellcheck:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
security-events: write
|
||||
|
||||
steps:
|
||||
- name: Repository checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Differential ShellCheck
|
||||
uses: redhat-plumbers-in-action/differential-shellcheck@v5
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
16
.github/workflows/release.yml
vendored
16
.github/workflows/release.yml
vendored
@@ -1,16 +0,0 @@
|
||||
name: Release
|
||||
on:
|
||||
push:
|
||||
tags: 'v*'
|
||||
|
||||
jobs:
|
||||
homebrew:
|
||||
name: Bump Homebrew formula
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: mislav/bump-homebrew-formula-action@v3.2
|
||||
if: "!contains(github.ref, '-')" # skip prereleases
|
||||
with:
|
||||
formula-name: rbenv
|
||||
env:
|
||||
COMMITTER_TOKEN: ${{ secrets.COMMITTER_TOKEN }}
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,4 +1,3 @@
|
||||
/plugins
|
||||
/shims
|
||||
/version
|
||||
/versions
|
||||
@@ -7,4 +6,4 @@
|
||||
/libexec/*.dylib
|
||||
/src/Makefile
|
||||
/src/*.o
|
||||
/gems
|
||||
bats/
|
||||
|
||||
7
.travis.yml
Normal file
7
.travis.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
sudo: false
|
||||
install: git clone --depth 1 https://github.com/sstephenson/bats.git
|
||||
script: make test
|
||||
language: c
|
||||
env:
|
||||
- PYENV_NATIVE_EXT=
|
||||
- PYENV_NATIVE_EXT=1
|
||||
287
CHANGELOG.md
Normal file
287
CHANGELOG.md
Normal file
@@ -0,0 +1,287 @@
|
||||
## Version History
|
||||
|
||||
#### 20150504
|
||||
|
||||
* python-build: Add Jython 2.7.0
|
||||
* python-build: Add CPython alpha release; 3.5.0a4
|
||||
* python-build: Add CPython 3.1, 3.1.1, and 3.1.2
|
||||
* python-build: Fix pip version to 1.5.6 for CPython 3.1.x (#351)
|
||||
|
||||
#### 20150326
|
||||
|
||||
* python-build: Add Portable PyPy binaries from https://github.com/squeaky-pl/portable-pypy (#329)
|
||||
* python-build: Add CPython alpha release; 3.5.0a2 (#328)
|
||||
* python-build: Add pypy-2.5.1 (fixes #338)
|
||||
* pyenv: Import recent changes from rbenv 4d72eefffc548081f6eee2e54d3b9116b9f9ee8e
|
||||
|
||||
#### 20150226
|
||||
|
||||
* python-build: Add CPython release; 3.4.3 (#323)
|
||||
* python-build: Add CPython alpha release; 3.5.0a1 (#324)
|
||||
* python-build: Add Miniconda/Miniconda3 3.8.3 (#318)
|
||||
|
||||
#### 20150204
|
||||
|
||||
* python-build: Add PyPy 2.5.0 release (#311)
|
||||
* python-build: Add note about `--enable-shared` and RPATH (#217)
|
||||
* python-build: Fix regression of `PYTHON_MAKE_INSTALL_TARGET` and add test (#255)
|
||||
* python-build: Symlink `pythonX.Y-config` to `python-config` if `python-config` is missing (#296)
|
||||
* python-build: Latest `pip` can't be installed into `3.0.1` (#309)
|
||||
|
||||
#### 20150124
|
||||
|
||||
* python-build: Import recent changes from ruby-build v20150112
|
||||
* python-build: Prevent adding `/Library/Python/X.X/site-packages` to `sys.path` whtn `--enable-framework` is enabled on OS X. Thanks @s1341 (#292)
|
||||
* python-build: Add new IronPython release; 2.7.5
|
||||
|
||||
#### 20141211
|
||||
|
||||
* pyenv: Add bulit-in `pip-rehash` feature. You don't need to install [pyenv-pip-rehash](https://github.com/yyuu/pyenv-pip-rehash) anymore.
|
||||
* python-build: Add new CPython release; 2.7.9 (#284)
|
||||
* python-build: Add new PyPy releases; pypy3-2.4.0, pypy3-2.4.0-src (#277)
|
||||
* python-build: Add build definitions of PyPy nightly build
|
||||
|
||||
#### 20141127
|
||||
|
||||
* python-build: Add new CPython release candidates; 2.7.9rc1 (#276)
|
||||
|
||||
#### 20141118
|
||||
|
||||
* python-build: Fix broken `setup_builtin_patches` (#270)
|
||||
* python-build: Add a patch to allow building 2.6.9 on OS X 10.9 with `--enable-framework` (#269, #271)
|
||||
|
||||
#### 20141106
|
||||
|
||||
* pyenv: Optimize pyenv-which. Thanks to @blueyed (#129)
|
||||
* python-build: Add Miniconda/Miniconda3 3.7.0 and Anaconda/Anaconda3 2.1.0 (#260)
|
||||
* python-build: Use HTTPS for mirror download URLs (#262)
|
||||
* python-build: Set `rpath` for `--shared` build of PyPy (#244)
|
||||
* python-build: Support `make altinstall` when building CPython/Stackless (#255)
|
||||
* python-build: Import recent changes from ruby-build v20141028 (#265)
|
||||
|
||||
#### 20141012
|
||||
|
||||
* python-build: Add new CPython releases; 3.2.6, 3.3.6 (#253)
|
||||
|
||||
#### 20141011
|
||||
|
||||
* python-build: Fix build error of Stackless 3.3.5 on OS X (#250)
|
||||
* python-build: Add new Stackless releases; stackless-2.7.7, stackless-2.7.8, stackless-3.4.1 (#252)
|
||||
|
||||
#### 20141008
|
||||
|
||||
* python-build: Add new CPython release; 3.4.2 (#251)
|
||||
* python-build: Add new CPython release candidates; 3.2.6rc1, 3.3.6rc1 (#248)
|
||||
|
||||
#### 20140924
|
||||
|
||||
* pyenv: Fix an unintended behavior when user does not have write permission on `$PYENV_ROOT` (#230)
|
||||
* pyenv: Fix a zsh completion issue (#232)
|
||||
* python-build: Add new PyPy release; pypy-2.4.0, pypy-2.4.0-src (#241)
|
||||
|
||||
#### 20140825
|
||||
|
||||
* pyenv: Fix zsh completion with multiple words (#215)
|
||||
* python-build: Display the package name of `hg` as `mercurial` in message (#212)
|
||||
* python-build: Unset `PIP_REQUIRE_VENV` during build (#216)
|
||||
* python-build: Set `MACOSX_DEPLOYMENT_TARGET` from the product version of OS X (#219, #220)
|
||||
* python-build: Add new Jython release; jython2.7-beta3 (#223)
|
||||
|
||||
#### 20140705
|
||||
|
||||
* python-build: Add new CPython release; 2.7.8 (#201)
|
||||
* python-build: Support `SETUPTOOLS_VERSION` and `PIP_VERSION` to allow installing specific version of setuptools/pip (#202)
|
||||
|
||||
#### 20140628
|
||||
|
||||
* python-build: Add new Anaconda releases; anaconda-2.0.1, anaconda3-2.0.1 (#195)
|
||||
* python-build: Add new PyPy3 release; pypy3-2.3.1 (#198)
|
||||
* python-build: Add ancient CPython releases; 2.1.3, 2.2.3, 2.3.7 (#199)
|
||||
* python-build: Use `ez_setup.py` and `get-pip.py` instead of installing them from tarballs (#194)
|
||||
* python-build: Add support for command-line options to `ez_setup.py` and `get-pip.py` (#200)
|
||||
|
||||
#### 20140615
|
||||
|
||||
* python-build: Update default setuptools version (4.0.1 -> 5.0) (#190)
|
||||
|
||||
#### 20140614
|
||||
|
||||
* pyenv: Change versioning schema (`v0.4.0-YYYYMMDD` -> `vYYYYMMDD`)
|
||||
* python-build: Add new PyPy release; pypy-2.3.1, pypy-2.3.1-src
|
||||
* python-build: Create symlinks for executables with version suffix (#182)
|
||||
* python-build: Use SHA2 as default digest algorithm to verify downloaded archives
|
||||
* python-build: Update default setuptools version (4.0 -> 4.0.1) (#183)
|
||||
* python-build: Import recent changes from ruby-build v20140524 (#184)
|
||||
|
||||
#### 0.4.0-20140602
|
||||
|
||||
* python-build: Add new Anaconda/Anaconda3 releases; anaconda-2.0.0, anaconda3-2.0.0 (#179)
|
||||
* python-build: Add new CPython release; 2.7.7 (#180)
|
||||
* python-build: Update default setuptools version (3.6 -> 4.0) (#181)
|
||||
* python-build: Respect environment variables of `CPPFLAGS` and `LDFLAGS` (#168)
|
||||
* python-build: Support for xz-compressed Python tarballs (#177)
|
||||
|
||||
#### 0.4.0-20140520
|
||||
|
||||
* python-build: Add new CPython release; 3.4.1 (#170, #171)
|
||||
* python-build: Update default pip version (1.5.5 -> 1.5.6) (#169)
|
||||
|
||||
#### 0.4.0-20140516
|
||||
|
||||
* pyenv: Prefer gawk over awk if both are available.
|
||||
* python-build: Add new PyPy release; pypy-2.3, pypy-2.3-src (#162)
|
||||
* python-build: Add new Anaconda release; anaconda-1.9.2 (#155)
|
||||
* python-build: Add new Miniconda releases; miniconda-3.3.0, minoconda-3.4.2, miniconda3-3.3.0, miniconda3-3.4.2
|
||||
* python-build: Add new Stackless releases; stackless-2.7.3, stackless-2.7.4, stackless-2.7.5, stackless-2.7.6, stackless-3.2.5, stackless-3.3.5 (#164)
|
||||
* python-build: Add IronPython versions (setuptools and pip will work); ironpython-2.7.4, ironpython-dev
|
||||
* python-build: Add new Jython beta release; jython-2.7-beta2
|
||||
* python-build: Update default setuptools version (3.4.1 -> 3.6)
|
||||
* python-build: Update default pip version (1.5.4 -> 1.5.5)
|
||||
* python-build: Update GNU Readline (6.2 -> 6.3)
|
||||
* python-build: Import recent changes from ruby-build v20140420
|
||||
|
||||
#### 0.4.0-20140404
|
||||
|
||||
* pyenv: Reads only the first word from version file. This is as same behavior as rbenv.
|
||||
* python-build: Fix build of Tkinter with Tcl/Tk 8.6 (#131)
|
||||
* python-build: Fix build problem with Readline 6.3 (#126, #131, #149, #152)
|
||||
* python-build: Do not exit with errors even if some of modules are absent (#131)
|
||||
* python-build: MacOSX was mispelled as MaxOSX in `anaconda_architecture` (#136)
|
||||
* python-build: Use default `cc` as the C Compiler to build CPython (#148, #150)
|
||||
* python-build: Display value from `pypy_architecture` and `anaconda_architecture` on errors (yyuu/pyenv-virtualenv#18)
|
||||
* python-build: Remove old development version; 2.6-dev
|
||||
* python-build: Update default setuptools version (3.3 -> 3.4.1)
|
||||
|
||||
#### 0.4.0-20140317
|
||||
|
||||
* python-build: Add new CPython releases; 3.4.0 (#133)
|
||||
* python-build: Add new Anaconda releases; anaconda-1.9.0, anaconda-1.9.1
|
||||
* python-build: Add new Miniconda releases; miniconda-3.0.4, miniconda-3.0.5, miniconda3-3.0.4, miniconda3-3.0.5
|
||||
* python-build: Update default setuptools version (3.1 -> 3.3)
|
||||
|
||||
#### 0.4.0-20140311
|
||||
|
||||
* python-build: Add new CPython releases; 3.3.5 (#127)
|
||||
* python-build: Add new CPython release candidates; 3.4.0rc1, 3.4.0rc2, 3.4.0rc3
|
||||
* python-build: Update default setuptools version (2.2 -> 3.1)
|
||||
* python-build: Update default pip version (1.5.2 -> 1.5.4)
|
||||
* python-build: Import recent changes from ruby-build v20140225
|
||||
|
||||
#### 0.4.0-20140211
|
||||
|
||||
* python-build: Add new CPython release candidates; 3.3.4, 3.4.0b3
|
||||
* python-build: Add [Anaconda](https://store.continuum.io/cshop/anaconda/) and [Miniconda](http://repo.continuum.io/miniconda/) binary distributions
|
||||
* python-build: Display error if the wget does not support Server Name Indication (SNI) to avoid SSL verification error when downloading from https://pypi.python.org. (#60)
|
||||
* python-build: Update default setuptools version (2.1 -> 2.2)
|
||||
* python-build: Update default pip version (1.5.1 -> 1.5.2)
|
||||
* python-build: Import recent changes from ruby-build v20140204
|
||||
|
||||
#### 0.4.0-20140123
|
||||
|
||||
* pyenv: Always append the directory at the top of the `$PATH` to return proper value for `sys.executable` (#98)
|
||||
* pyenv: Unset `GREP_OPTIONS` to avoid issues of conflicting options (#101)
|
||||
* python-build: Install `pip` with using `ensurepip` if available
|
||||
* python-build: Add support for framework installation (`--enable-framework`) of CPython (#55, #99)
|
||||
* python-build: Import recent changes from ruby-build v20140110.1
|
||||
* python-build: Import `bats` tests from ruby-build v20140110.1
|
||||
|
||||
#### 0.4.0-20140110.1
|
||||
|
||||
* python-build: Fix build error of CPython 2.x on the platform where the `gcc` is llvm-gcc.
|
||||
|
||||
#### 0.4.0-20140110
|
||||
|
||||
* pyenv: Reliably detect parent shell in `pyenv init` (#93)
|
||||
* pyenv: Import recent changes from rbenv 0.4.0
|
||||
* pyenv: Import `bats` tests from rbenv 0.4.0
|
||||
* python-build: Add new CPython releases candidates; 3.4.0b2
|
||||
* python-build: Add ruby-build style patching feature (#91)
|
||||
* python-build: Set `RPATH` if `--enable-shared` was given (#65, #66, 82)
|
||||
* python-build: Update default setuptools version (2.0 -> 2.1)
|
||||
* python-build: Update default pip version (1.4.1 -> 1.5)
|
||||
* python-build: Activate friendly CPython during build if the one is not activated (8fa6b4a1847851919ad7857c6c42ed809a4d277b)
|
||||
* python-build: Fix broken install.sh
|
||||
* python-build: Import recent changes from ruby-build v20131225.1
|
||||
* version-ext-compat: Removed from default plugin. Please use [pyenv-version-ext](https://github.com/yyuu/pyenv-version-ext) instead.
|
||||
|
||||
#### 0.4.0-20131217
|
||||
|
||||
* python-build: Fix broken build of CPython 3.3+ on Darwin
|
||||
* python-build: Not build GNU Readline uselessly on Darwin
|
||||
|
||||
#### 0.4.0-20131216
|
||||
|
||||
* python-build: Add new CPython releases; 3.3.3 (#80)
|
||||
* python-build: Add new CPython releases candidates; 3.4.0b1
|
||||
* python-build: Add new PyPy releases; pypy-2.2.1, pypy-2.2.1-src
|
||||
* python-build: Update default setuptools version (1.3.2 -> 2.0)
|
||||
* python-build: Imported recent changes from ruby-build v20131211
|
||||
* pyenv: Fix pyenv-prefix to trim "/bin" in `pyenv prefix system` (#88)
|
||||
|
||||
#### 0.4.0-20131116
|
||||
|
||||
* python-build: Add new CPython releases; 2.6.9, 2.7.6 (#76)
|
||||
* python-build: Add new CPython release candidates; 3.3.3-rc1, 3.3.3-rc2
|
||||
* python-build: Add new PyPy releases; pypy-2.2, pypy-2.2-src (#77)
|
||||
* python-build: Update default setuptools version (1.1.6 -> 1.3.2)
|
||||
* python-build: Imported recent changes from ruby-build v20131030
|
||||
|
||||
#### 0.4.0-20131023
|
||||
|
||||
* pyenv: Improved [fish shell](http://fishshell.com/) support
|
||||
* python-build: Add new PyPy releases; pypy-2.1, pypy-2.1-src, pypy3-2.1-beta1, pypy3-2.1-beta1-src
|
||||
* python-build: Add ancient versions; 2.4, 2.4.1, 2.4.3, 2.4.4 and 2.4.5
|
||||
* python-build: Add alpha releases; 3.4.0a2, 3.4.0a3, 3.4.0a4
|
||||
* python-build: Update default pip version (1.4 -> 1.4.1)
|
||||
* python-build: Update default setuptools version (0.9.7 -> 1.1.6)
|
||||
|
||||
#### 0.4.0-20130726
|
||||
|
||||
* pyenv: Fix minor issue of variable scope in `pyenv versions`
|
||||
* python-build: Update base version to ruby-build v20130628
|
||||
* python-build: Use brew managed OpenSSL and GNU Readline if they are available
|
||||
* python-build: Fix build of CPython 3.3+ on OS X (#29)
|
||||
* python-build: Fix build of native modules of CPython 2.5 on OS X (#33)
|
||||
* python-build: Fix build of CPython 2.6+ on openSUSE (#36)
|
||||
* python-build: Add ancient versions; 2.4.2 and 2.4.6. The build might be broken. (#37)
|
||||
* python-build: Update default pip version (1.3.1 -> 1.4)
|
||||
* python-build: Update default setuptools version (0.7.2 -> 0.9.7)
|
||||
|
||||
#### 0.4.0-20130613
|
||||
|
||||
* pyenv: Changed versioning schema. There are two parts; the former is the base rbenv version, and the latter is the date of release.
|
||||
* python-build: Add `--debug` option to build CPython with debug symbols. (#11)
|
||||
* python-build: Add new CPython versions: 2.7.4, 2.7.5, 3.2.4, 3.2.5, 3.3.1, 3.3.2 (#12, #17)
|
||||
* python-build: Add `svnversion` patch for old CPython versions (#14)
|
||||
* python-build: Enable mirror by default for faster download (#20)
|
||||
* python-build: Add `OPENSSL_NO_SSL2` patch for old CPython versions (#22)
|
||||
* python-build: Install GNU Readline on Darwin if the system one is broken (#23)
|
||||
* python-build: Bundle patches in `${PYTHON_BUILD_ROOT}/share/python-build/patches` and improve patching mechanism (`apply_patches`).
|
||||
* python-build: Verify native extensions after building. (`build_package_verify_py*`)
|
||||
* python-build: Add `install_hg` to install package from Mercurial repository
|
||||
* python-build: Support building Jython and PyPy.
|
||||
* python-build: Add new CPython development versions: 2.6-dev, 2.7-dev, 3.1-dev, 3.2-dev, 3.3-dev, 3.4-dev
|
||||
* python-build: Add new Jython development versions: jython-2.5.4-rc1, jython-2.5-dev, jython-2.7-beta1, jython-dev
|
||||
* python-build: Add new PyPy versions: pypy-1.5{,-src}, pypy-1.6, pypy-1.7, pypy-2.0{,-src}, pypy-2.0.1{,-src}, pypy-2.0.2{,-src}
|
||||
* python-build: Add new PyPy development versions: pypy-1.7-dev, pypy-1.8-dev, pypy-1.9-dev, pypy-2.0-dev, pypy-dev, pypy-py3k-dev
|
||||
* python-build: Add new Stackless development versions: stackless-2.7-dev, stackless-3.2-dev, stackless-3.3-dev, stackless-dev
|
||||
* python-build: Update default pip version (1.2.1 -> 1.3.1)
|
||||
* python-build: Update default setuptools version (0.6.34 (distribute) -> 0.7.2 ([new setuptools](https://bitbucket.org/pypa/setuptools)))
|
||||
|
||||
#### 0.2.0 (February 18, 2013)
|
||||
|
||||
* Import changes from rbenv 0.4.0.
|
||||
|
||||
#### 0.1.2 (October 23, 2012)
|
||||
|
||||
* Add push/pop for version stack management.
|
||||
* Support multiple versions via environment variable.
|
||||
* Now GCC is not a requirement to build CPython and Stackless.
|
||||
|
||||
#### 0.1.1 (September 3, 2012)
|
||||
|
||||
* Support multiple versions of Python at a time.
|
||||
|
||||
#### 0.1.0 (August 31, 2012)
|
||||
|
||||
* Initial public release.
|
||||
@@ -1,80 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||
nationality, personal appearance, race, religion, or sexual identity and
|
||||
orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting one of the project maintainers listed below. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Project Maintainers
|
||||
|
||||
* Sam Stephenson <<sstephenson@gmail.com>>
|
||||
* Mislav Marohnić <<mislav.marohnic@gmail.com>>
|
||||
* Erik Michaels-Ober <<sferik@gmail.com>>
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
286
COMMANDS.md
Normal file
286
COMMANDS.md
Normal file
@@ -0,0 +1,286 @@
|
||||
# Command Reference
|
||||
|
||||
Like `git`, the `pyenv` command delegates to subcommands based on its
|
||||
first argument.
|
||||
|
||||
The most common subcommands are:
|
||||
|
||||
* [`pyenv commands`](#pyenv-commands)
|
||||
* [`pyenv local`](#pyenv-local)
|
||||
* [`pyenv global`](#pyenv-global)
|
||||
* [`pyenv shell`](#pyenv-shell)
|
||||
* [`pyenv install`](#pyenv-install)
|
||||
* [`pyenv uninstall`](#pyenv-uninstall)
|
||||
* [`pyenv rehash`](#pyenv-rehash)
|
||||
* [`pyenv version`](#pyenv-version)
|
||||
* [`pyenv versions`](#pyenv-versions)
|
||||
* [`pyenv which`](#pyenv-which)
|
||||
* [`pyenv whence`](#pyenv-whence)
|
||||
|
||||
|
||||
## `pyenv commands`
|
||||
|
||||
Lists all available pyenv commands.
|
||||
|
||||
|
||||
## `pyenv local`
|
||||
|
||||
Sets a local application-specific Python version by writing the version
|
||||
name to a `.python-version` file in the current directory. This version
|
||||
overrides the global version, and can be overridden itself by setting
|
||||
the `PYENV_VERSION` environment variable or with the `pyenv shell`
|
||||
command.
|
||||
|
||||
$ pyenv local 2.7.6
|
||||
|
||||
When run without a version number, `pyenv local` reports the currently
|
||||
configured local version. You can also unset the local version:
|
||||
|
||||
$ pyenv local --unset
|
||||
|
||||
Previous versions of pyenv stored local version specifications in a
|
||||
file named `.pyenv-version`. For backwards compatibility, pyenv will
|
||||
read a local version specified in an `.pyenv-version` file, but a
|
||||
`.python-version` file in the same directory will take precedence.
|
||||
|
||||
|
||||
### `pyenv local` (advanced)
|
||||
|
||||
You can specify multiple versions as local Python at once.
|
||||
|
||||
Let's say if you have two versions of 2.7.6 and 3.3.3. If you prefer 2.7.6 over 3.3.3,
|
||||
|
||||
$ pyenv local 2.7.6 3.3.3
|
||||
$ pyenv versions
|
||||
system
|
||||
* 2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
|
||||
* 3.3.3 (set by /Users/yyuu/path/to/project/.python-version)
|
||||
$ python --version
|
||||
Python 2.7.6
|
||||
$ python2.7 --version
|
||||
Python 2.7.6
|
||||
$ python3.3 --version
|
||||
Python 3.3.3
|
||||
|
||||
or, if you prefer 3.3.3 over 2.7.6,
|
||||
|
||||
$ pyenv local 3.3.3 2.7.6
|
||||
$ pyenv versions
|
||||
system
|
||||
* 2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
|
||||
* 3.3.3 (set by /Users/yyuu/path/to/project/.python-version)
|
||||
venv27
|
||||
$ python --version
|
||||
Python 3.3.3
|
||||
$ python2.7 --version
|
||||
Python 2.7.6
|
||||
$ python3.3 --version
|
||||
Python 3.3.3
|
||||
|
||||
|
||||
## `pyenv global`
|
||||
|
||||
Sets the global version of Python to be used in all shells by writing
|
||||
the version name to the `~/.pyenv/version` file. This version can be
|
||||
overridden by an application-specific `.python-version` file, or by
|
||||
setting the `PYENV_VERSION` environment variable.
|
||||
|
||||
$ pyenv global 2.7.6
|
||||
|
||||
The special version name `system` tells pyenv to use the system Python
|
||||
(detected by searching your `$PATH`).
|
||||
|
||||
When run without a version number, `pyenv global` reports the
|
||||
currently configured global version.
|
||||
|
||||
|
||||
### `pyenv global` (advanced)
|
||||
|
||||
You can specify multiple versions as global Python at once.
|
||||
|
||||
Let's say if you have two versions of 2.7.6 and 3.3.3. If you prefer 2.7.6 over 3.3.3,
|
||||
|
||||
$ pyenv global 2.7.6 3.3.3
|
||||
$ pyenv versions
|
||||
system
|
||||
* 2.7.6 (set by /Users/yyuu/.pyenv/version)
|
||||
* 3.3.3 (set by /Users/yyuu/.pyenv/version)
|
||||
$ python --version
|
||||
Python 2.7.6
|
||||
$ python2.7 --version
|
||||
Python 2.7.6
|
||||
$ python3.3 --version
|
||||
Python 3.3.3
|
||||
|
||||
or, if you prefer 3.3.3 over 2.7.6,
|
||||
|
||||
$ pyenv global 3.3.3 2.7.6
|
||||
$ pyenv versions
|
||||
system
|
||||
* 2.7.6 (set by /Users/yyuu/.pyenv/version)
|
||||
* 3.3.3 (set by /Users/yyuu/.pyenv/version)
|
||||
venv27
|
||||
$ python --version
|
||||
Python 3.3.3
|
||||
$ python2.7 --version
|
||||
Python 2.7.6
|
||||
$ python3.3 --version
|
||||
Python 3.3.3
|
||||
|
||||
|
||||
## `pyenv shell`
|
||||
|
||||
Sets a shell-specific Python version by setting the `PYENV_VERSION`
|
||||
environment variable in your shell. This version overrides
|
||||
application-specific versions and the global version.
|
||||
|
||||
$ pyenv shell pypy-2.2.1
|
||||
|
||||
When run without a version number, `pyenv shell` reports the current
|
||||
value of `PYENV_VERSION`. You can also unset the shell version:
|
||||
|
||||
$ pyenv shell --unset
|
||||
|
||||
Note that you'll need pyenv's shell integration enabled (step 3 of
|
||||
the installation instructions) in order to use this command. If you
|
||||
prefer not to use shell integration, you may simply set the
|
||||
`PYENV_VERSION` variable yourself:
|
||||
|
||||
$ export PYENV_VERSION=pypy-2.2.1
|
||||
|
||||
|
||||
### `pyenv shell` (advanced)
|
||||
|
||||
You can specify multiple versions via `PYENV_VERSION` at once.
|
||||
|
||||
Let's say if you have two versions of 2.7.6 and 3.3.3. If you prefer 2.7.6 over 3.3.3,
|
||||
|
||||
$ pyenv shell 2.7.6 3.3.3
|
||||
$ pyenv versions
|
||||
system
|
||||
* 2.7.6 (set by PYENV_VERSION environment variable)
|
||||
* 3.3.3 (set by PYENV_VERSION environment variable)
|
||||
$ python --version
|
||||
Python 2.7.6
|
||||
$ python2.7 --version
|
||||
Python 2.7.6
|
||||
$ python3.3 --version
|
||||
Python 3.3.3
|
||||
|
||||
or, if you prefer 3.3.3 over 2.7.6,
|
||||
|
||||
$ pyenv shell 3.3.3 2.7.6
|
||||
$ pyenv versions
|
||||
system
|
||||
* 2.7.6 (set by PYENV_VERSION environment variable)
|
||||
* 3.3.3 (set by PYENV_VERSION environment variable)
|
||||
venv27
|
||||
$ python --version
|
||||
Python 3.3.3
|
||||
$ python2.7 --version
|
||||
Python 2.7.6
|
||||
$ python3.3 --version
|
||||
Python 3.3.3
|
||||
|
||||
|
||||
## `pyenv install`
|
||||
|
||||
Install a Python version (using `python-build`).
|
||||
|
||||
Usage: pyenv install [-f] [-kvp] <version>
|
||||
pyenv install [-f] [-kvp] <definition-file>
|
||||
pyenv install -l|--list
|
||||
|
||||
-l/--list List all available versions
|
||||
-f/--force Install even if the version appears to be installed already
|
||||
|
||||
python-build options:
|
||||
|
||||
-k/--keep Keep source tree in $PYENV_BUILD_ROOT after installation
|
||||
(defaults to $PYENV_ROOT/sources)
|
||||
-v/--verbose Verbose mode: print compilation status to stdout
|
||||
-p/--patch Apply a patch from stdin before building
|
||||
-g/--debug Build a debug version
|
||||
|
||||
|
||||
## `pyenv uninstall`
|
||||
|
||||
Uninstall a specific Python version.
|
||||
|
||||
Usage: pyenv uninstall [-f|--force] <version>
|
||||
|
||||
-f Attempt to remove the specified version without prompting
|
||||
for confirmation. If the version does not exist, do not
|
||||
display an error message.
|
||||
|
||||
|
||||
## `pyenv rehash`
|
||||
|
||||
Installs shims for all Python binaries known to pyenv (i.e.,
|
||||
`~/.pyenv/versions/*/bin/*`). Run this command after you install a new
|
||||
version of Python, or install a package that provides binaries.
|
||||
|
||||
$ pyenv rehash
|
||||
|
||||
|
||||
## `pyenv version`
|
||||
|
||||
Displays the currently active Python version, along with information on
|
||||
how it was set.
|
||||
|
||||
$ pyenv version
|
||||
2.7.6 (set by /home/yyuu/.pyenv/version)
|
||||
|
||||
|
||||
## `pyenv versions`
|
||||
|
||||
Lists all Python versions known to pyenv, and shows an asterisk next to
|
||||
the currently active version.
|
||||
|
||||
$ pyenv versions
|
||||
2.5.6
|
||||
2.6.8
|
||||
* 2.7.6 (set by /home/yyuu/.pyenv/version)
|
||||
3.3.3
|
||||
jython-2.5.3
|
||||
pypy-2.2.1
|
||||
|
||||
|
||||
## `pyenv which`
|
||||
|
||||
Displays the full path to the executable that pyenv will invoke when
|
||||
you run the given command.
|
||||
|
||||
$ pyenv which python3.3
|
||||
/home/yyuu/.pyenv/versions/3.3.3/bin/python3.3
|
||||
|
||||
|
||||
## `pyenv whence`
|
||||
|
||||
Lists all Python versions with the given command installed.
|
||||
|
||||
$ pyenv whence 2to3
|
||||
2.6.8
|
||||
2.7.6
|
||||
3.3.3
|
||||
|
||||
|
||||
## `pyenv install`
|
||||
|
||||
Part of [Python-build](https://github.com/yyuu/pyenv/tree/master/plugins/python-build), this installs versions of python
|
||||
|
||||
$ pyenv install 2.7.6
|
||||
$ pyenv install 2.6.8
|
||||
$ pyenv versions
|
||||
system
|
||||
2.6.8
|
||||
* 2.7.6 (set by /home/yyuu/.pyenv/version)
|
||||
|
||||
|
||||
## `pyenv install --list`
|
||||
|
||||
List available remote versions of Python, including Anaconda, Jython, pypy, and stackless
|
||||
|
||||
$ pyenv install --list
|
||||
|
||||
|
||||
1
LICENSE
1
LICENSE
@@ -1,3 +1,4 @@
|
||||
Copyright (c) 2013 Yamashita, Yuu
|
||||
Copyright (c) 2013 Sam Stephenson
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
|
||||
14
Makefile
14
Makefile
@@ -1,4 +1,12 @@
|
||||
release_version := $(shell GIT_CEILING_DIRECTORIES=$(PWD) bin/rbenv --version | cut -d' ' -f2)
|
||||
.PHONY: test
|
||||
|
||||
share/man/man1/rbenv.1: share/man/man1/rbenv.1.adoc
|
||||
asciidoctor -b manpage -a version=$(release_version:v%=%) $<
|
||||
# Do not pass in user flags to build tests.
|
||||
unexport PYTHON_CFLAGS
|
||||
unexport PYTHON_CONFIGURE_OPTS
|
||||
|
||||
test: bats
|
||||
PATH="./bats/bin:$$PATH" test/run
|
||||
cd plugins/python-build && $(PWD)/bats/bin/bats $${CI:+--tap} test
|
||||
|
||||
bats:
|
||||
git clone https://github.com/sstephenson/bats.git
|
||||
|
||||
578
README.md
578
README.md
@@ -1,350 +1,366 @@
|
||||
# Seamlessly manage your app’s Ruby environment with rbenv.
|
||||
# Simple Python Version Management: pyenv
|
||||
|
||||
[](https://travis-ci.org/yyuu/pyenv)
|
||||
|
||||
pyenv lets you easily switch between multiple versions of Python. It's
|
||||
simple, unobtrusive, and follows the UNIX tradition of single-purpose
|
||||
tools that do one thing well.
|
||||
|
||||
This project was forked from [rbenv](https://github.com/sstephenson/rbenv) and
|
||||
[ruby-build](https://github.com/sstephenson/ruby-build), and modified for Python.
|
||||
|
||||
<img src="http://gyazo.com/9c829fafdf5e58880c820349c4e9197e.png?1346414267" width="849" height="454" />
|
||||
|
||||
|
||||
### pyenv _does..._
|
||||
|
||||
* Let you **change the global Python version** on a per-user basis.
|
||||
* Provide support for **per-project Python versions**.
|
||||
* Allow you to **override the Python version** with an environment
|
||||
variable.
|
||||
* Search commands from **multiple versions of Python at a time**.
|
||||
This may be helpful to test across Python versions with [tox](http://pypi.python.org/pypi/tox).
|
||||
|
||||
|
||||
### In contrast with pythonbrew and pythonz, pyenv _does not..._
|
||||
|
||||
* **Depend on Python itself.** pyenv was made from pure shell scripts.
|
||||
There is no bootstrap problem of Python.
|
||||
* **Need to be loaded into your shell.** Instead, pyenv's shim
|
||||
approach works by adding a directory to your `$PATH`.
|
||||
* **Manage virtualenv.** Of course, you can create [virtualenv](http://pypi.python.org/pypi/virtualenv)
|
||||
yourself, or [pyenv-virtualenv](https://github.com/yyuu/pyenv-virtualenv)
|
||||
to automate the process.
|
||||
|
||||
|
||||
----
|
||||
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* **[How It Works](#how-it-works)**
|
||||
* [Understanding PATH](#understanding-path)
|
||||
* [Understanding Shims](#understanding-shims)
|
||||
* [Choosing the Python Version](#choosing-the-python-version)
|
||||
* [Locating the Python Installation](#locating-the-python-installation)
|
||||
* **[Installation](#installation)**
|
||||
* [Basic GitHub Checkout](#basic-github-checkout)
|
||||
* [Upgrading](#upgrading)
|
||||
* [Homebrew on Mac OS X](#homebrew-on-mac-os-x)
|
||||
* [Neckbeard Configuration](#neckbeard-configuration)
|
||||
* [Uninstalling Python Versions](#uninstalling-python-versions)
|
||||
* **[Command Reference](#command-reference)**
|
||||
* **[Development](#development)**
|
||||
* [Version History](#version-history)
|
||||
* [License](#license)
|
||||
|
||||
|
||||
----
|
||||
|
||||
rbenv is a version manager tool for the Ruby programming language on Unix-like systems. It is useful for switching between multiple Ruby versions on the same machine and for ensuring that each project you are working on always runs on the correct Ruby version.
|
||||
|
||||
## How It Works
|
||||
|
||||
After rbenv injects itself into your PATH at installation time, any invocation of `ruby`, `gem`, `bundler`, or other Ruby-related executable will first activate rbenv. Then, rbenv scans the current project directory for a file named `.ruby-version`. If found, that file determines the version of Ruby that should be used within that directory. Finally, rbenv looks up that Ruby version among those installed under `~/.rbenv/versions/`.
|
||||
At a high level, pyenv intercepts Python commands using shim
|
||||
executables injected into your `PATH`, determines which Python version
|
||||
has been specified by your application, and passes your commands along
|
||||
to the correct Python installation.
|
||||
|
||||
You can choose the Ruby version for your project with, for example:
|
||||
```sh
|
||||
cd myproject
|
||||
# choose Ruby version 3.1.2:
|
||||
rbenv local 3.1.2
|
||||
```
|
||||
|
||||
Doing so will create or update the `.ruby-version` file in the current directory with the version that you've chosen. A different project of yours that is another directory might be using a different version of Ruby altogether—rbenv will seamlessly transition from one Ruby version to another when you switch projects.
|
||||
### Understanding PATH
|
||||
|
||||
Finally, almost every aspect of rbenv's mechanism is [customizable via plugins][plugins] written in bash.
|
||||
When you run a command like `python` or `pip`, your operating system
|
||||
searches through a list of directories to find an executable file with
|
||||
that name. This list of directories lives in an environment variable
|
||||
called `PATH`, with each directory in the list separated by a colon:
|
||||
|
||||
/usr/local/bin:/usr/bin:/bin
|
||||
|
||||
Directories in `PATH` are searched from left to right, so a matching
|
||||
executable in a directory at the beginning of the list takes
|
||||
precedence over another one at the end. In this example, the
|
||||
`/usr/local/bin` directory will be searched first, then `/usr/bin`,
|
||||
then `/bin`.
|
||||
|
||||
|
||||
### Understanding Shims
|
||||
|
||||
pyenv works by inserting a directory of _shims_ at the front of your
|
||||
`PATH`:
|
||||
|
||||
~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin
|
||||
|
||||
Through a process called _rehashing_, pyenv maintains shims in that
|
||||
directory to match every Python command across every installed version
|
||||
of Python—`python`, `pip`, and so on.
|
||||
|
||||
Shims are lightweight executables that simply pass your command along
|
||||
to pyenv. So with pyenv installed, when you run, say, `pip`, your
|
||||
operating system will do the following:
|
||||
|
||||
* Search your `PATH` for an executable file named `pip`
|
||||
* Find the pyenv shim named `pip` at the beginning of your `PATH`
|
||||
* Run the shim named `pip`, which in turn passes the command along to
|
||||
pyenv
|
||||
|
||||
|
||||
### Choosing the Python Version
|
||||
|
||||
When you execute a shim, pyenv determines which Python version to use by
|
||||
reading it from the following sources, in this order:
|
||||
|
||||
1. The `PYENV_VERSION` environment variable (if specified). You can use
|
||||
the [`pyenv shell`](#pyenv-shell) command to set this environment
|
||||
variable in your current shell session.
|
||||
|
||||
2. The application-specific `.python-version` file in the current
|
||||
directory (if present). You can modify the current directory's
|
||||
`.python-version` file with the [`pyenv local`](#pyenv-local)
|
||||
command.
|
||||
|
||||
3. The first `.python-version` file found (if any) by searching each parent
|
||||
directory, until reaching the root of your filesystem.
|
||||
|
||||
4. The global `~/.pyenv/version` file. You can modify this file using
|
||||
the [`pyenv global`](#pyenv-global) command. If the global version
|
||||
file is not present, pyenv assumes you want to use the "system"
|
||||
Python. (In other words, whatever version would run if pyenv weren't in your
|
||||
`PATH`.)
|
||||
|
||||
**NOTE:** You can activate multiple versions at the same time, including mulitple
|
||||
versions of Python2 or Python3 simultaneously. This allows for parallel usage of
|
||||
Python2 and Python3, and is required with tools like `tox`. For example, to set
|
||||
your path to first use your `system` Python and Python3 (set to 2.7.9 and 3.4.2
|
||||
in this example), but also have Python 3.3.6, 3.2, and 2.5 available on your
|
||||
`PATH`, one would first `pyenv install` the missing versions, then set `pyenv
|
||||
global system 3.3.6 3.2 2.5`. At this point, one should be able to find the full
|
||||
executable path to each of these using `pyenv which`, e.g. `pyenv which python2.5`
|
||||
(should display `$PYENV_ROOT/versions/2.5/bin/python2.5`), or `pyenv which
|
||||
python3.4` (should display path to system Python3).
|
||||
|
||||
### Locating the Python Installation
|
||||
|
||||
Once pyenv has determined which version of Python your application has
|
||||
specified, it passes the command along to the corresponding Python
|
||||
installation.
|
||||
|
||||
Each Python version is installed into its own directory under
|
||||
`~/.pyenv/versions`.
|
||||
|
||||
For example, you might have these versions installed:
|
||||
|
||||
* `~/.pyenv/versions/2.7.8/`
|
||||
* `~/.pyenv/versions/3.4.2/`
|
||||
* `~/.pyenv/versions/pypy-2.4.0/`
|
||||
|
||||
As far as pyenv is concerned, version names are simply the directories in
|
||||
`~/.pyenv/versions`.
|
||||
|
||||
|
||||
----
|
||||
|
||||
The simplicity of rbenv has its benefits, but also some downsides. See the [comparison of version managers][alternatives] for more details and some alternatives.
|
||||
|
||||
## Installation
|
||||
|
||||
On systems with Homebrew package manager, the “Using Package Managers” method is recommended. On other systems, “Basic Git Checkout” might be the easiest way of ensuring that you are always installing the latest version of rbenv.
|
||||
If you're on Mac OS X, consider [installing with Homebrew](#homebrew-on-mac-os-x).
|
||||
|
||||
### Using Package Managers
|
||||
|
||||
1. Install rbenv using one of the following approaches.
|
||||
### The automatic installer
|
||||
|
||||
#### Homebrew
|
||||
|
||||
On macOS or Linux, we recommend installing rbenv with [Homebrew](https://brew.sh).
|
||||
|
||||
```sh
|
||||
brew install rbenv
|
||||
```
|
||||
|
||||
#### Debian, Ubuntu, and their derivatives
|
||||
|
||||
> [!CAUTION]
|
||||
> The version of rbenv that is packaged and maintained in official
|
||||
Debian and Ubuntu repositories is _out of date_. To install the latest
|
||||
version, it is recommended to [install rbenv using git](#basic-git-checkout).
|
||||
|
||||
```sh
|
||||
sudo apt install rbenv
|
||||
```
|
||||
|
||||
#### Arch Linux and its derivatives
|
||||
|
||||
Archlinux has an [AUR Package](https://aur.archlinux.org/packages/rbenv/) for
|
||||
rbenv and you can install it from the AUR using the instructions from this
|
||||
[wiki page](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_and_upgrading_packages).
|
||||
Visit my other project:
|
||||
https://github.com/yyuu/pyenv-installer
|
||||
|
||||
#### Fedora
|
||||
|
||||
Fedora has an [official package](https://packages.fedoraproject.org/pkgs/rbenv/rbenv/) which you can install:
|
||||
### Basic GitHub Checkout
|
||||
|
||||
```sh
|
||||
sudo dnf install rbenv
|
||||
```
|
||||
This will get you going with the latest version of pyenv and make it
|
||||
easy to fork and contribute any changes back upstream.
|
||||
|
||||
2. Set up your shell to load rbenv.
|
||||
1. **Check out pyenv where you want it installed.**
|
||||
A good place to choose is `$HOME/.pyenv` (but you can install it somewhere else).
|
||||
|
||||
```sh
|
||||
rbenv init
|
||||
```
|
||||
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
|
||||
|
||||
3. Close your Terminal window and open a new one so your changes take effect.
|
||||
|
||||
That's it! You are now ready to [install some Ruby versions](#installing-ruby-versions).
|
||||
2. **Define environment variable `PYENV_ROOT`** to point to the path where
|
||||
pyenv repo is cloned and add `$PYENV_ROOT/bin` to your `$PATH` for access
|
||||
to the `pyenv` command-line utility.
|
||||
|
||||
### Basic Git Checkout
|
||||
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
|
||||
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
|
||||
|
||||
> [!NOTE]
|
||||
> For a more automated install, you can use [rbenv-installer](https://github.com/rbenv/rbenv-installer#rbenv-installer). If you do not want to execute scripts downloaded from a web URL or simply prefer a manual approach, follow the steps below.
|
||||
**Zsh note**: Modify your `~/.zshenv` file instead of `~/.bash_profile`.
|
||||
**Ubuntu note**: Modify your `~/.bashrc` file instead of `~/.bash_profile`.
|
||||
|
||||
This will get you going with the latest version of rbenv without needing a system-wide install.
|
||||
3. **Add `pyenv init` to your shell** to enable shims and autocompletion.
|
||||
Please make sure `eval "$(pyenv init -)"` is placed toward the end of shell
|
||||
configuration file since it manipulates `PATH` during the initialization.
|
||||
|
||||
1. Clone rbenv into `~/.rbenv`.
|
||||
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
|
||||
|
||||
```sh
|
||||
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
|
||||
```
|
||||
**Zsh note**: Modify your `~/.zshenv` file instead of `~/.bash_profile`.
|
||||
**Ubuntu note**: Modify your `~/.bashrc` file instead of `~/.bash_profile`.
|
||||
|
||||
**General warning**: There are some systems, where the `BASH_ENV` variable is configured
|
||||
to point to `.bashrc`. On such systems you should almost certainly put the abovementioned line
|
||||
`eval "$(pyenv init -)` into `.bash_profile`, and **not** into `.bashrc`. Otherwise you
|
||||
may observe strange behaviour, such as `pyenv` getting into an infinite loop.
|
||||
See [#264](https://github.com/yyuu/pyenv/issues/264) for details.
|
||||
|
||||
2. Set up your shell to load rbenv.
|
||||
4. **Restart your shell so the path changes take effect.**
|
||||
You can now begin using pyenv.
|
||||
|
||||
```sh
|
||||
~/.rbenv/bin/rbenv init
|
||||
```
|
||||
$ exec $SHELL
|
||||
|
||||
If you are curious, see here to [understand what `init` does](#how-rbenv-hooks-into-your-shell).
|
||||
5. **Install Python versions into `$PYENV_ROOT/versions`.**
|
||||
For example, to install Python 2.7.8, download and unpack the source, then run:
|
||||
|
||||
3. Restart your shell so that these changes take effect. (Opening a new terminal tab will usually do it.)
|
||||
$ pyenv install 2.7.8
|
||||
|
||||
#### Shell completions
|
||||
**NOTE:** If you need to pass configure option to build, please use
|
||||
```CONFIGURE_OPTS``` environment variable.
|
||||
|
||||
When _manually_ installing rbenv, it might be useful to note how completion scripts for various shells work. Completion scripts help with typing rbenv commands by expanding partially entered rbenv command names and option flags; typically this is invoked by pressing <kbd>Tab</kbd> key in an interactive shell.
|
||||
**NOTE:** If you are having trouble installing a python version,
|
||||
please visit the wiki page about
|
||||
[Common Build Problems](https://github.com/yyuu/pyenv/wiki/Common-build-problems)
|
||||
|
||||
- The **bash** completion script for rbenv ships with the project and gets [loaded by the `rbenv init` mechanism](#how-rbenv-hooks-into-your-shell).
|
||||
6. **Rebuild the shim binaries.**
|
||||
You should do this any time you install a new Python binary.
|
||||
(Examples: installing a new Python version, or installing a package that provides a binary.)
|
||||
|
||||
- The **zsh** completion script ships with the project, but needs to be added to FPATH in zsh before it can be discovered by the shell. One way to do this would be to edit `~/.zshrc`:
|
||||
$ pyenv rehash
|
||||
|
||||
```sh
|
||||
# assuming that rbenv was installed to `~/.rbenv`
|
||||
FPATH=~/.rbenv/completions:"$FPATH"
|
||||
This can be automated for pip using
|
||||
[pyenv-pip-rehash](https://github.com/yyuu/pyenv-pip-rehash), which invokes
|
||||
`pyenv rehash` after (un)installing packages using pip.
|
||||
|
||||
autoload -U compinit
|
||||
compinit
|
||||
```
|
||||
|
||||
- The **fish** completion script for rbenv ships with the fish shell itself and is not maintained by the rbenv project.
|
||||
#### Upgrading
|
||||
|
||||
### Installing Ruby versions
|
||||
If you've installed pyenv using the instructions above, you can
|
||||
upgrade your installation at any time using git.
|
||||
|
||||
The `rbenv install` command does not ship with rbenv out-of-the-box, but is provided by the [ruby-build][] plugin.
|
||||
To upgrade to the latest development version of pyenv, use `git pull`:
|
||||
|
||||
Before attempting to install Ruby, **check that [your build environment](https://github.com/rbenv/ruby-build/wiki#suggested-build-environment) has the necessary tools and libraries**. Then:
|
||||
$ cd ~/.pyenv
|
||||
$ git pull
|
||||
|
||||
```sh
|
||||
# list latest stable versions:
|
||||
rbenv install -l
|
||||
To upgrade to a specific release of pyenv, check out the corresponding tag:
|
||||
|
||||
# list all local versions:
|
||||
rbenv install -L
|
||||
$ cd ~/.pyenv
|
||||
$ git fetch
|
||||
$ git tag
|
||||
v0.1.0
|
||||
$ git checkout v0.1.0
|
||||
|
||||
# install a Ruby version:
|
||||
rbenv install 3.1.2
|
||||
```
|
||||
|
||||
For troubleshooting `BUILD FAILED` scenarios, check the [ruby-build Discussions section](https://github.com/rbenv/ruby-build/discussions/categories/build-failures).
|
||||
### Homebrew on Mac OS X
|
||||
|
||||
> [!NOTE]
|
||||
> If the `rbenv install` command wasn't found, you can install ruby-build as a plugin:
|
||||
> ```sh
|
||||
> git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
|
||||
> ```
|
||||
You can also install pyenv using the [Homebrew](http://brew.sh)
|
||||
package manager for Mac OS X.
|
||||
|
||||
Set a Ruby version to finish installation and start using Ruby:
|
||||
```sh
|
||||
rbenv global 3.1.2 # set the default Ruby version for this machine
|
||||
# or:
|
||||
rbenv local 3.1.2 # set the Ruby version for this directory
|
||||
```
|
||||
$ brew update
|
||||
$ brew install pyenv
|
||||
|
||||
Alternatively to the `rbenv install` command, you can download and compile Ruby manually as a subdirectory of `~/.rbenv/versions`. An entry in that directory can also be a symlink to a Ruby version installed elsewhere on the filesystem.
|
||||
|
||||
#### Installing Ruby gems
|
||||
To upgrade pyenv in the future, just use `upgrade` instead of `install`.
|
||||
|
||||
Select a Ruby version for your project using `rbenv local 3.1.2`, for example. Then, proceed to install gems as you normally would:
|
||||
After installation, you'll still need to add `eval "$(pyenv init -)"` to your
|
||||
profile (as stated in the caveats). You'll only ever have to do this
|
||||
once.
|
||||
|
||||
```sh
|
||||
gem install bundler
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> You _should not use sudo_ to install gems. Typically, the Ruby versions will be installed under your home directory and thus writeable by your user. If you get the “you don't have write permissions” error when installing gems, it's likely that your "system" Ruby version is still a global default. Change that with `rbenv global <version>` and try again.
|
||||
### Neckbeard Configuration
|
||||
|
||||
Check the location where gems are being installed with `gem env`:
|
||||
Skip this section unless you must know what every line in your shell
|
||||
profile is doing.
|
||||
|
||||
```sh
|
||||
gem env home
|
||||
# => ~/.rbenv/versions/<version>/lib/ruby/gems/...
|
||||
```
|
||||
`pyenv init` is the only command that crosses the line of loading
|
||||
extra commands into your shell. Coming from rvm, some of you might be
|
||||
opposed to this idea. Here's what `pyenv init` actually does:
|
||||
|
||||
#### Uninstalling Ruby versions
|
||||
1. **Sets up your shims path.** This is the only requirement for pyenv to
|
||||
function properly. You can do this by hand by prepending
|
||||
`~/.pyenv/shims` to your `$PATH`.
|
||||
|
||||
As time goes on, Ruby versions you install will accumulate in your
|
||||
`~/.rbenv/versions` directory.
|
||||
2. **Installs autocompletion.** This is entirely optional but pretty
|
||||
useful. Sourcing `~/.pyenv/completions/pyenv.bash` will set that
|
||||
up. There is also a `~/.pyenv/completions/pyenv.zsh` for Zsh
|
||||
users.
|
||||
|
||||
To remove old Ruby versions, simply `rm -rf` the directory of the
|
||||
version you want to remove. You can find the directory of a particular
|
||||
Ruby version with the `rbenv prefix` command, e.g. `rbenv prefix
|
||||
2.7.0`.
|
||||
3. **Rehashes shims.** From time to time you'll need to rebuild your
|
||||
shim files. Doing this on init makes sure everything is up to
|
||||
date. You can always run `pyenv rehash` manually.
|
||||
|
||||
4. **Installs the sh dispatcher.** This bit is also optional, but allows
|
||||
pyenv and plugins to change variables in your current shell, making
|
||||
commands like `pyenv shell` possible. The sh dispatcher doesn't do
|
||||
anything crazy like override `cd` or hack your shell prompt, but if
|
||||
for some reason you need `pyenv` to be a real script rather than a
|
||||
shell function, you can safely skip it.
|
||||
|
||||
To see exactly what happens under the hood for yourself, run `pyenv init -`.
|
||||
|
||||
|
||||
### Uninstalling Python Versions
|
||||
|
||||
As time goes on, you will accumulate Python versions in your
|
||||
`~/.pyenv/versions` directory.
|
||||
|
||||
To remove old Python versions, `pyenv uninstall` command to automate
|
||||
the removal process.
|
||||
|
||||
Alternatively, simply `rm -rf` the directory of the version you want
|
||||
to remove. You can find the directory of a particular Python version
|
||||
with the `pyenv prefix` command, e.g. `pyenv prefix 2.6.8`.
|
||||
|
||||
|
||||
----
|
||||
|
||||
The [ruby-build][] plugin provides an `rbenv uninstall` command to
|
||||
automate the removal process.
|
||||
|
||||
## Command Reference
|
||||
|
||||
The main rbenv commands you need to know are:
|
||||
|
||||
### rbenv versions
|
||||
|
||||
Lists all Ruby versions known to rbenv, and shows an asterisk next to
|
||||
the currently active version.
|
||||
|
||||
$ rbenv versions
|
||||
1.8.7-p352
|
||||
1.9.2-p290
|
||||
* 1.9.3-p327 (set by /Users/sam/.rbenv/version)
|
||||
jruby-1.7.1
|
||||
rbx-1.2.4
|
||||
ree-1.8.7-2011.03
|
||||
|
||||
### rbenv version
|
||||
|
||||
Displays the currently active Ruby version, along with information on
|
||||
how it was set.
|
||||
|
||||
$ rbenv version
|
||||
1.9.3-p327 (set by /Users/sam/.rbenv/version)
|
||||
|
||||
### rbenv local
|
||||
|
||||
Sets a local application-specific Ruby version by writing the version
|
||||
name to a `.ruby-version` file in the current directory. This version
|
||||
overrides the global version, and can be overridden itself by setting
|
||||
the `RBENV_VERSION` environment variable or with the `rbenv shell`
|
||||
command.
|
||||
|
||||
rbenv local 3.1.2
|
||||
|
||||
When run without a version number, `rbenv local` reports the currently
|
||||
configured local version. You can also unset the local version:
|
||||
|
||||
rbenv local --unset
|
||||
|
||||
### rbenv global
|
||||
|
||||
Sets the global version of Ruby to be used in all shells by writing
|
||||
the version name to the `~/.rbenv/version` file. This version can be
|
||||
overridden by an application-specific `.ruby-version` file, or by
|
||||
setting the `RBENV_VERSION` environment variable.
|
||||
|
||||
rbenv global 3.1.2
|
||||
|
||||
The special version name `system` tells rbenv to use the system Ruby
|
||||
(detected by searching your `$PATH`).
|
||||
|
||||
When run without a version number, `rbenv global` reports the
|
||||
currently configured global version.
|
||||
|
||||
### rbenv shell
|
||||
|
||||
Sets a shell-specific Ruby version by setting the `RBENV_VERSION`
|
||||
environment variable in your shell. This version overrides
|
||||
application-specific versions and the global version.
|
||||
|
||||
rbenv shell jruby-1.7.1
|
||||
|
||||
When run without a version number, `rbenv shell` reports the current
|
||||
value of `RBENV_VERSION`. You can also unset the shell version:
|
||||
|
||||
rbenv shell --unset
|
||||
|
||||
Note that you'll need rbenv's shell integration enabled (step 3 of
|
||||
the installation instructions) in order to use this command. If you
|
||||
prefer not to use shell integration, you may simply set the
|
||||
`RBENV_VERSION` variable yourself:
|
||||
|
||||
export RBENV_VERSION=jruby-1.7.1
|
||||
|
||||
### rbenv rehash
|
||||
|
||||
Installs shims for all Ruby executables known to rbenv (`~/.rbenv/versions/*/bin/*`). Typically you do not need to run this command, as it will run automatically after installing gems.
|
||||
|
||||
rbenv rehash
|
||||
|
||||
### rbenv which
|
||||
|
||||
Displays the full path to the executable that rbenv will invoke when
|
||||
you run the given command.
|
||||
|
||||
$ rbenv which irb
|
||||
/Users/sam/.rbenv/versions/1.9.3-p327/bin/irb
|
||||
|
||||
### rbenv whence
|
||||
|
||||
Lists all Ruby versions that contain the specified executable name.
|
||||
|
||||
$ rbenv whence rackup
|
||||
1.9.3-p327
|
||||
jruby-1.7.1
|
||||
ree-1.8.7-2011.03
|
||||
|
||||
## Environment variables
|
||||
|
||||
You can affect how rbenv operates with the following settings:
|
||||
|
||||
name | default | description
|
||||
-----|---------|------------
|
||||
`RBENV_VERSION` | | Specifies the Ruby version to be used.<br>Also see [`rbenv shell`](#rbenv-shell)
|
||||
`RBENV_ROOT` | `~/.rbenv` | Defines the directory under which Ruby versions and shims reside.<br>Also see `rbenv root`
|
||||
`RBENV_DEBUG` | | Outputs debug information.<br>Also as: `rbenv --debug <subcommand>`
|
||||
`RBENV_HOOK_PATH` | [_see wiki_][hooks] | Colon-separated list of paths searched for rbenv hooks.
|
||||
`RBENV_DIR` | `$PWD` | Directory to start searching for `.ruby-version` files.
|
||||
|
||||
### How rbenv hooks into your shell
|
||||
|
||||
`rbenv init` is a helper command to hook rbenv into a shell. This helper is part of the recommended installation instructions, but optional, as an experienced user can set up the following tasks manually. The `rbenv init` command has two modes of operation:
|
||||
|
||||
1. `rbenv init`: made for humans, this command edits your shell initialization files on disk to add rbenv to shell startup. (Prior to rbenv 1.3.0, this mode only printed user instructions to the terminal, but did nothing else.)
|
||||
|
||||
2. `rbenv init -`: made for machines, this command outputs a shell script suitable to be eval'd by the user's shell.
|
||||
|
||||
When `rbenv init` is invoked from a bash shell, for example, it will add the following to the user's `~/.bashrc` or `~/.bash_profile`:
|
||||
|
||||
```sh
|
||||
# Added by `rbenv init` on <DATE>
|
||||
eval "$(rbenv init - --no-rehash bash)"
|
||||
```
|
||||
|
||||
You may add this line to your shell initialization files manually if you want to avoid running `rbenv init` as part of the setup process. Here is what the eval'd script does:
|
||||
|
||||
0. Adds `rbenv` executable to PATH if necessary.
|
||||
|
||||
1. Prepends `~/.rbenv/shims` directory to PATH. This is basically the only requirement for rbenv to function properly.
|
||||
|
||||
2. Installs bash shell completion for rbenv commands.
|
||||
|
||||
3. Regenerates rbenv shims. If this step slows down your shell startup, you can invoke `rbenv init -` with the `--no-rehash` flag.
|
||||
|
||||
4. Installs the "sh" dispatcher. This bit is also optional, but allows rbenv and plugins to change variables in your current shell, making commands like `rbenv shell` possible.
|
||||
See [COMMANDS.md](COMMANDS.md).
|
||||
|
||||
|
||||
### Uninstalling rbenv
|
||||
----
|
||||
|
||||
The simplicity of rbenv makes it easy to temporarily disable it, or
|
||||
uninstall from the system.
|
||||
|
||||
1. To **disable** rbenv managing your Ruby versions, simply comment or remove the `rbenv init` line from your shell startup configuration. This will remove rbenv shims directory from PATH, and future invocations like `ruby` will execute the system Ruby version, bypassing rbenv completely.
|
||||
|
||||
While disabled, `rbenv` will still be accessible on the command line, but your Ruby apps won't be affected by version switching.
|
||||
|
||||
2. To completely **uninstall** rbenv, perform step (1) and then remove the rbenv root directory. This will **delete all Ruby versions** that were installed under `` `rbenv root`/versions/ ``:
|
||||
|
||||
rm -rf "$(rbenv root)"
|
||||
|
||||
If you've installed rbenv using a package manager, as a final step
|
||||
perform the rbenv package removal:
|
||||
- Homebrew: `brew uninstall rbenv`
|
||||
- Debian, Ubuntu, and their derivatives: `sudo apt purge rbenv`
|
||||
- Archlinux and its derivatives: `sudo pacman -R rbenv`
|
||||
|
||||
## Development
|
||||
|
||||
Tests are executed using [Bats](https://github.com/bats-core/bats-core):
|
||||
The pyenv source code is [hosted on GitHub](https://github.com/yyuu/pyenv).
|
||||
It's clean, modular, and easy to understand--even if you're not a shell hacker.
|
||||
|
||||
$ bats test
|
||||
$ bats test/<file>.bats
|
||||
|
||||
Please feel free to submit pull requests and file bugs on the [issue
|
||||
tracker](https://github.com/rbenv/rbenv/issues).
|
||||
Please feel free to submit Pull Requests and report bugs on the
|
||||
[issue tracker](https://github.com/yyuu/pyenv/issues).
|
||||
|
||||
|
||||
[ruby-build]: https://github.com/rbenv/ruby-build#readme
|
||||
[hooks]: https://github.com/rbenv/rbenv/wiki/Authoring-plugins#rbenv-hooks
|
||||
[alternatives]: https://github.com/rbenv/rbenv/wiki/Comparison-of-version-managers
|
||||
[plugins]: https://github.com/rbenv/rbenv/wiki/Plugins
|
||||
### Version History
|
||||
|
||||
See [CHANGELOG.md](CHANGELOG.md).
|
||||
|
||||
|
||||
### License
|
||||
|
||||
(The MIT license)
|
||||
|
||||
* Copyright (c) 2013 Yamashita, Yuu
|
||||
* Copyright (c) 2013 Sam Stephenson
|
||||
|
||||
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.
|
||||
|
||||
23
bin/python-local-exec
Executable file
23
bin/python-local-exec
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# `python-local-exec` is a drop-in replacement for the standard Python
|
||||
# shebang line:
|
||||
#
|
||||
# #!/usr/bin/env python-local-exec
|
||||
#
|
||||
# Use it for scripts inside a project with an `.pyenv-version`
|
||||
# file. When you run the scripts, they'll use the project-specified
|
||||
# Python version, regardless of what directory they're run from. Useful
|
||||
# for e.g. running project tasks in cron scripts without needing to
|
||||
# `cd` into the project first.
|
||||
|
||||
set -e
|
||||
export PYENV_DIR="${1%/*}"
|
||||
|
||||
[ -n "$PYENV_SILENCE_WARNINGS" ] || {
|
||||
echo "pyenv: \`python-local-exec' is deprecated and will be removed in the next release."
|
||||
echo " To upgrade: https://github.com/yyuu/pyenv/wiki/python-local-exec"
|
||||
echo
|
||||
} >&2
|
||||
|
||||
exec python "$@"
|
||||
@@ -1,13 +0,0 @@
|
||||
#compdef rbenv
|
||||
|
||||
_rbenv() {
|
||||
local completions
|
||||
|
||||
if [ "${#words}" -eq 2 ]; then
|
||||
completions=(${(f)"$(rbenv help --complete-commands "${words[2]}")"})
|
||||
_describe 'rbenv commands' completions
|
||||
else
|
||||
completions="$(rbenv completions ${words[2,-2]})"
|
||||
compadd - "${(ps:\n:)completions}"
|
||||
fi
|
||||
}
|
||||
16
completions/pyenv.bash
Normal file
16
completions/pyenv.bash
Normal file
@@ -0,0 +1,16 @@
|
||||
_pyenv() {
|
||||
COMPREPLY=()
|
||||
local word="${COMP_WORDS[COMP_CWORD]}"
|
||||
|
||||
if [ "$COMP_CWORD" -eq 1 ]; then
|
||||
COMPREPLY=( $(compgen -W "$(pyenv commands)" -- "$word") )
|
||||
else
|
||||
local words=("${COMP_WORDS[@]}")
|
||||
unset words[0]
|
||||
unset words[$COMP_CWORD]
|
||||
local completions=$(pyenv completions "${words[@]}")
|
||||
COMPREPLY=( $(compgen -W "$completions" -- "$word") )
|
||||
fi
|
||||
}
|
||||
|
||||
complete -F _pyenv pyenv
|
||||
22
completions/pyenv.fish
Normal file
22
completions/pyenv.fish
Normal file
@@ -0,0 +1,22 @@
|
||||
function __fish_pyenv_needs_command
|
||||
set cmd (commandline -opc)
|
||||
if [ (count $cmd) -eq 1 -a $cmd[1] = 'pyenv' ]
|
||||
return 0
|
||||
end
|
||||
return 1
|
||||
end
|
||||
|
||||
function __fish_pyenv_using_command
|
||||
set cmd (commandline -opc)
|
||||
if [ (count $cmd) -gt 1 ]
|
||||
if [ $argv[1] = $cmd[2] ]
|
||||
return 0
|
||||
end
|
||||
end
|
||||
return 1
|
||||
end
|
||||
|
||||
complete -f -c pyenv -n '__fish_pyenv_needs_command' -a '(pyenv commands)'
|
||||
for cmd in (pyenv commands)
|
||||
complete -f -c pyenv -n "__fish_pyenv_using_command $cmd" -a "(pyenv completions $cmd)"
|
||||
end
|
||||
18
completions/pyenv.zsh
Normal file
18
completions/pyenv.zsh
Normal file
@@ -0,0 +1,18 @@
|
||||
if [[ ! -o interactive ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
compctl -K _pyenv pyenv
|
||||
|
||||
_pyenv() {
|
||||
local words completions
|
||||
read -cA words
|
||||
|
||||
if [ "${#words}" -eq 2 ]; then
|
||||
completions="$(pyenv commands)"
|
||||
else
|
||||
completions="$(pyenv completions ${words[2,-2]})"
|
||||
fi
|
||||
|
||||
reply=(${(ps:\n:)completions})
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
_rbenv() {
|
||||
COMPREPLY=()
|
||||
local word="${COMP_WORDS[COMP_CWORD]}"
|
||||
|
||||
if [ "$COMP_CWORD" -eq 1 ]; then
|
||||
COMPREPLY=( $(compgen -W "$(rbenv commands)" -- "$word") )
|
||||
else
|
||||
local words=("${COMP_WORDS[@]}")
|
||||
unset "words[0]"
|
||||
unset "words[$COMP_CWORD]"
|
||||
local completions=$(rbenv completions "${words[@]}")
|
||||
COMPREPLY=( $(compgen -W "$completions" -- "$word") )
|
||||
fi
|
||||
}
|
||||
|
||||
complete -F _rbenv rbenv
|
||||
110
libexec/pyenv
Executable file
110
libexec/pyenv
Executable file
@@ -0,0 +1,110 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
export -n CDPATH
|
||||
|
||||
if [ "$1" = "--debug" ]; then
|
||||
export PYENV_DEBUG=1
|
||||
shift
|
||||
fi
|
||||
|
||||
if [ -n "$PYENV_DEBUG" ]; then
|
||||
export PS4='+ [${BASH_SOURCE##*/}:${LINENO}] '
|
||||
set -x
|
||||
fi
|
||||
|
||||
if enable -f "${0%/*}"/../libexec/pyenv-realpath.dylib realpath 2>/dev/null; then
|
||||
abs_dirname() {
|
||||
local path="$(realpath "$1")"
|
||||
echo "${path%/*}"
|
||||
}
|
||||
else
|
||||
if [ -n "$PYENV_NATIVE_EXT" ]; then
|
||||
echo "pyenv: failed to load \`realpath' builtin" >&2
|
||||
exit 1
|
||||
fi
|
||||
READLINK=$(type -p greadlink readlink | head -1)
|
||||
if [ -z "$READLINK" ]; then
|
||||
echo "pyenv: cannot find readlink - are you missing GNU coreutils?" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
resolve_link() {
|
||||
$READLINK "$1"
|
||||
}
|
||||
|
||||
abs_dirname() {
|
||||
local cwd="$(pwd)"
|
||||
local path="$1"
|
||||
|
||||
while [ -n "$path" ]; do
|
||||
cd "${path%/*}"
|
||||
local name="${path##*/}"
|
||||
path="$(resolve_link "$name" || true)"
|
||||
done
|
||||
|
||||
pwd
|
||||
cd "$cwd"
|
||||
}
|
||||
fi
|
||||
|
||||
if [ -z "${PYENV_ROOT}" ]; then
|
||||
PYENV_ROOT="${HOME}/.pyenv"
|
||||
else
|
||||
PYENV_ROOT="${PYENV_ROOT%/}"
|
||||
fi
|
||||
export PYENV_ROOT
|
||||
|
||||
if [ -z "${PYENV_DIR}" ]; then
|
||||
PYENV_DIR="$(pwd)"
|
||||
else
|
||||
cd "$PYENV_DIR" 2>/dev/null || {
|
||||
echo "pyenv: cannot change working directory to \`$PYENV_DIR'"
|
||||
exit 1
|
||||
} >&2
|
||||
PYENV_DIR="$(pwd)"
|
||||
cd "$OLDPWD"
|
||||
fi
|
||||
export PYENV_DIR
|
||||
|
||||
|
||||
shopt -s nullglob
|
||||
|
||||
bin_path="$(abs_dirname "$0")"
|
||||
for plugin_bin in "${PYENV_ROOT}/plugins/"*/bin; do
|
||||
PATH="${plugin_bin}:${PATH}"
|
||||
done
|
||||
export PATH="${bin_path}:${PATH}"
|
||||
|
||||
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${PYENV_ROOT}/pyenv.d"
|
||||
if [ "${bin_path%/*}" != "$PYENV_ROOT" ]; then
|
||||
# Add pyenv's own `pyenv.d` unless pyenv was cloned to PYENV_ROOT
|
||||
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${bin_path%/*}/pyenv.d"
|
||||
fi
|
||||
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:/usr/local/etc/pyenv.d:/etc/pyenv.d:/usr/lib/pyenv/hooks"
|
||||
for plugin_hook in "${PYENV_ROOT}/plugins/"*/etc/pyenv.d; do
|
||||
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${plugin_hook}"
|
||||
done
|
||||
export PYENV_HOOK_PATH
|
||||
|
||||
shopt -u nullglob
|
||||
|
||||
|
||||
command="$1"
|
||||
case "$command" in
|
||||
"" | "-h" | "--help" )
|
||||
echo -e "$(pyenv---version)\n$(pyenv-help)" >&2
|
||||
;;
|
||||
"-v" )
|
||||
exec pyenv---version
|
||||
;;
|
||||
* )
|
||||
command_path="$(command -v "pyenv-$command" || true)"
|
||||
if [ -z "$command_path" ]; then
|
||||
echo "pyenv: no such command \`$command'" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
shift 1
|
||||
exec "$command_path" "$@"
|
||||
;;
|
||||
esac
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Display the version of rbenv
|
||||
# Summary: Display the version of pyenv
|
||||
#
|
||||
# Displays the version number of this rbenv release, including the
|
||||
# Displays the version number of this pyenv release, including the
|
||||
# current revision from git, if available.
|
||||
#
|
||||
# The format of the git revision is:
|
||||
@@ -10,14 +10,13 @@
|
||||
# tagged.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
version="1.3.2"
|
||||
git_revision=""
|
||||
version="20150404"
|
||||
|
||||
if cd "${BASH_SOURCE%/*}" 2>/dev/null && git remote -v 2>/dev/null | grep -q rbenv; then
|
||||
if cd "$PYENV_ROOT" 2>/dev/null; then
|
||||
git_revision="$(git describe --tags HEAD 2>/dev/null || true)"
|
||||
git_revision="${git_revision#v}"
|
||||
fi
|
||||
|
||||
echo "rbenv ${git_revision:-$version}"
|
||||
echo "pyenv ${git_revision:-$version}"
|
||||
43
libexec/pyenv-commands
Executable file
43
libexec/pyenv-commands
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: List all available pyenv commands
|
||||
# Usage: pyenv commands [--sh|--no-sh]
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --sh
|
||||
echo --no-sh
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$1" = "--sh" ]; then
|
||||
sh=1
|
||||
shift
|
||||
elif [ "$1" = "--no-sh" ]; then
|
||||
nosh=1
|
||||
shift
|
||||
fi
|
||||
|
||||
IFS=: paths=($PATH)
|
||||
|
||||
shopt -s nullglob
|
||||
|
||||
{ for path in "${paths[@]}"; do
|
||||
for command in "${path}/pyenv-"*; do
|
||||
command="${command##*pyenv-}"
|
||||
if [ -n "$sh" ]; then
|
||||
if [ ${command:0:3} = "sh-" ]; then
|
||||
echo ${command##sh-}
|
||||
fi
|
||||
elif [ -n "$nosh" ]; then
|
||||
if [ ${command:0:3} != "sh-" ]; then
|
||||
echo ${command##sh-}
|
||||
fi
|
||||
else
|
||||
echo ${command##sh-}
|
||||
fi
|
||||
done
|
||||
done
|
||||
} | sort | uniq
|
||||
17
libexec/pyenv-completions
Executable file
17
libexec/pyenv-completions
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
# Usage: pyenv completions <command> [arg1 arg2...]
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
COMMAND="$1"
|
||||
if [ -z "$COMMAND" ]; then
|
||||
pyenv-help --usage completions >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
COMMAND_PATH="$(command -v "pyenv-$COMMAND" || command -v "pyenv-sh-$COMMAND")"
|
||||
if grep -iE "^([#%]|--|//) provide pyenv completions" "$COMMAND_PATH" >/dev/null; then
|
||||
shift
|
||||
exec "$COMMAND_PATH" --complete "$@"
|
||||
fi
|
||||
47
libexec/pyenv-exec
Executable file
47
libexec/pyenv-exec
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Run an executable with the selected Python version
|
||||
#
|
||||
# Usage: pyenv exec <command> [arg1 arg2...]
|
||||
#
|
||||
# Runs an executable by first preparing PATH so that the selected Python
|
||||
# version's `bin' directory is at the front.
|
||||
#
|
||||
# For example, if the currently selected Python version is 2.7.6:
|
||||
# pyenv exec pip install -rrequirements.txt
|
||||
#
|
||||
# is equivalent to:
|
||||
# PATH="$PYENV_ROOT/versions/2.7.6/bin:$PATH" pip install -rrequirements.txt
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
exec pyenv-shims --short
|
||||
fi
|
||||
|
||||
PYENV_VERSION="$(pyenv-version-name)"
|
||||
PYENV_COMMAND="$1"
|
||||
|
||||
if [ -z "$PYENV_COMMAND" ]; then
|
||||
pyenv-help --usage exec >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export PYENV_VERSION
|
||||
PYENV_COMMAND_PATH="$(pyenv-which "$PYENV_COMMAND")"
|
||||
PYENV_BIN_PATH="${PYENV_COMMAND_PATH%/*}"
|
||||
|
||||
OLDIFS="$IFS"
|
||||
IFS=$'\n' scripts=(`pyenv-hooks exec`)
|
||||
IFS="$OLDIFS"
|
||||
for script in "${scripts[@]}"; do
|
||||
source "$script"
|
||||
done
|
||||
|
||||
shift 1
|
||||
# CPython's `sys.executable` requires the `PYENV_BIN_PATH` to be at the top of the `PATH`.
|
||||
# https://github.com/yyuu/pyenv/issues/98
|
||||
export PATH="${PYENV_BIN_PATH}:${PATH}"
|
||||
exec -a "$PYENV_COMMAND" "$PYENV_COMMAND_PATH" "$@"
|
||||
41
libexec/pyenv-global
Executable file
41
libexec/pyenv-global
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Set or show the global Python version
|
||||
#
|
||||
# Usage: pyenv global <version>
|
||||
#
|
||||
# Sets the global Python version. You can override the global version at
|
||||
# any time by setting a directory-specific version with `pyenv local'
|
||||
# or by setting the `PYENV_VERSION' environment variable.
|
||||
#
|
||||
# <version> should be a string matching a Python version known to pyenv.
|
||||
# The special version string `system' will use your default system Python.
|
||||
# Run `pyenv versions' for a list of available Python versions.
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo system
|
||||
exec pyenv-versions --bare
|
||||
fi
|
||||
|
||||
versions=("$@")
|
||||
PYENV_VERSION_FILE="${PYENV_ROOT}/version"
|
||||
|
||||
if [ -n "$versions" ]; then
|
||||
pyenv-version-file-write "$PYENV_VERSION_FILE" "${versions[@]}"
|
||||
else
|
||||
OLDIFS="$IFS"
|
||||
IFS=: versions=($(
|
||||
pyenv-version-file-read "$PYENV_VERSION_FILE" ||
|
||||
pyenv-version-file-read "${PYENV_ROOT}/global" ||
|
||||
pyenv-version-file-read "${PYENV_ROOT}/default" ||
|
||||
echo system
|
||||
))
|
||||
IFS="$OLDIFS"
|
||||
for version in "${versions[@]}"; do
|
||||
echo "$version"
|
||||
done
|
||||
fi
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# Summary: Display help for a command
|
||||
#
|
||||
# Usage: rbenv help [--usage] COMMAND
|
||||
# Usage: pyenv help [--usage] COMMAND
|
||||
#
|
||||
# Parses and displays help contents from a command's source file.
|
||||
#
|
||||
@@ -13,17 +13,11 @@
|
||||
# documentation.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --usage
|
||||
exec rbenv-commands
|
||||
fi
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
command_path() {
|
||||
local command="$1"
|
||||
type -P rbenv-"$command" rbenv-sh-"$command" | head -n1
|
||||
command -v pyenv-"$command" || command -v pyenv-sh-"$command" || true
|
||||
}
|
||||
|
||||
extract_initial_comment_block() {
|
||||
@@ -42,15 +36,7 @@ extract_initial_comment_block() {
|
||||
}
|
||||
|
||||
collect_documentation() {
|
||||
local awk
|
||||
awk="$(type -P gawk)" || awk="$(type -P awk)" || true
|
||||
if [ -z "$awk" ]; then
|
||||
echo "rbenv: cannot find awk" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2016
|
||||
"$awk" '
|
||||
$(type -p gawk awk | head -1) '
|
||||
/^Summary:/ {
|
||||
summary = substr($0, 10)
|
||||
next
|
||||
@@ -94,8 +80,7 @@ collect_documentation() {
|
||||
}
|
||||
|
||||
documentation_for() {
|
||||
local filename
|
||||
filename="$(command_path "$1")"
|
||||
local filename="$(command_path "$1")"
|
||||
if [ -n "$filename" ]; then
|
||||
extract_initial_comment_block < "$filename" | collect_documentation
|
||||
fi
|
||||
@@ -123,11 +108,11 @@ print_help() {
|
||||
eval "$(documentation_for "$command")"
|
||||
[ -n "$help" ] || help="$summary"
|
||||
|
||||
if [ -n "$usage" ] || [ -n "$summary" ]; then
|
||||
if [ -n "$usage" -o -n "$summary" ]; then
|
||||
if [ -n "$usage" ]; then
|
||||
echo "$usage"
|
||||
else
|
||||
echo "Usage: rbenv ${command}"
|
||||
echo "Usage: pyenv ${command}"
|
||||
fi
|
||||
if [ -n "$help" ]; then
|
||||
echo
|
||||
@@ -144,62 +129,24 @@ print_usage() {
|
||||
local command="$1"
|
||||
local summary usage help
|
||||
eval "$(documentation_for "$command")"
|
||||
if [ -n "$usage" ]; then
|
||||
echo "$usage"
|
||||
else
|
||||
echo "Usage: rbenv ${command}"
|
||||
fi
|
||||
[ -z "$usage" ] || echo "$usage"
|
||||
}
|
||||
|
||||
if [ "$1" = "--complete-commands" ]; then
|
||||
command_prefix="${2:-}"
|
||||
seen=()
|
||||
shopt -s nullglob
|
||||
PATH_remain="$PATH"
|
||||
# traverse PATH to find "rbenv-" prefixed commands
|
||||
while true; do
|
||||
path="${PATH_remain%%:*}"
|
||||
if [ -n "$path" ]; then
|
||||
for rbenv_command in "${path}/rbenv-"*; do
|
||||
command_name="${rbenv_command##*/}"
|
||||
command_name="${command_name#rbenv-}"
|
||||
command_name="${command_name#sh-}"
|
||||
[[ $command_name == "${command_prefix}"* ]] || continue
|
||||
[[ " ${seen[*]} " != *" ${command_name} "* ]] || continue
|
||||
seen+=("$command_name")
|
||||
summary=""
|
||||
eval "$(extract_initial_comment_block < "$rbenv_command" | collect_documentation)"
|
||||
[ -n "$summary" ] || continue
|
||||
printf "%s:%s\n" "$command_name" "$summary"
|
||||
done
|
||||
fi
|
||||
[[ $PATH_remain == *:* ]] || break
|
||||
PATH_remain="${PATH_remain#*:}"
|
||||
done
|
||||
exit 0
|
||||
fi
|
||||
|
||||
unset usage
|
||||
if [ "$1" = "--usage" ]; then
|
||||
usage="1"
|
||||
shift
|
||||
fi
|
||||
|
||||
if [ -z "$1" ] || [ "$1" == "rbenv" ]; then
|
||||
if [ -z "$usage" ] && [ -t 1 ] && type -P man >/dev/null; then
|
||||
MANPATH="${BASH_SOURCE%/*}/../share/man:$MANPATH" exec man rbenv
|
||||
fi
|
||||
echo "Usage: rbenv <command> [<args>...]"
|
||||
[ -n "$usage" ] && exit
|
||||
if [ -z "$1" ] || [ "$1" == "pyenv" ]; then
|
||||
echo "Usage: pyenv <command> [<args>]"
|
||||
[ -z "$usage" ] || exit
|
||||
echo
|
||||
echo "Commands to manage available Ruby versions:"
|
||||
print_summaries versions install uninstall rehash
|
||||
echo "Some useful pyenv commands are:"
|
||||
print_summaries commands local global shell install uninstall rehash version versions which whence
|
||||
echo
|
||||
echo "Commands to view or change the current Ruby version:"
|
||||
print_summaries version local global shell
|
||||
echo
|
||||
echo "See \`rbenv help <command>' for information on a specific command."
|
||||
echo "For full documentation, see: https://github.com/rbenv/rbenv#readme"
|
||||
echo "See \`pyenv help <command>' for information on a specific command."
|
||||
echo "For full documentation, see: https://github.com/yyuu/pyenv#readme"
|
||||
else
|
||||
command="$1"
|
||||
if [ -n "$(command_path "$command")" ]; then
|
||||
@@ -209,7 +156,7 @@ else
|
||||
print_help "$command"
|
||||
fi
|
||||
else
|
||||
echo "rbenv: no such command \`$command'" >&2
|
||||
echo "pyenv: no such command \`$command'" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
60
libexec/pyenv-hooks
Executable file
60
libexec/pyenv-hooks
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: List hook scripts for a given pyenv command
|
||||
# Usage: pyenv hooks <command>
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo exec
|
||||
echo rehash
|
||||
echo which
|
||||
exit
|
||||
fi
|
||||
|
||||
PYENV_COMMAND="$1"
|
||||
if [ -z "$PYENV_COMMAND" ]; then
|
||||
pyenv-help --usage hooks >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! enable -f "${BASH_SOURCE%/*}"/pyenv-realpath.dylib realpath 2>/dev/null; then
|
||||
if [ -n "$PYENV_NATIVE_EXT" ]; then
|
||||
echo "pyenv: failed to load \`realpath' builtin" >&2
|
||||
exit 1
|
||||
fi
|
||||
READLINK=$(type -p greadlink readlink | head -1)
|
||||
if [ -z "$READLINK" ]; then
|
||||
echo "pyenv: cannot find readlink - are you missing GNU coreutils?" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
resolve_link() {
|
||||
$READLINK "$1"
|
||||
}
|
||||
|
||||
realpath() {
|
||||
local cwd="$(pwd)"
|
||||
local path="$1"
|
||||
|
||||
while [ -n "$path" ]; do
|
||||
cd "${path%/*}"
|
||||
local name="${path##*/}"
|
||||
path="$(resolve_link "$name" || true)"
|
||||
done
|
||||
|
||||
echo "$(pwd)/$name"
|
||||
cd "$cwd"
|
||||
}
|
||||
fi
|
||||
|
||||
IFS=: hook_paths=($PYENV_HOOK_PATH)
|
||||
|
||||
shopt -s nullglob
|
||||
for path in "${hook_paths[@]}"; do
|
||||
for script in "$path/$PYENV_COMMAND"/*.bash; do
|
||||
realpath "$script"
|
||||
done
|
||||
done
|
||||
shopt -u nullglob
|
||||
141
libexec/pyenv-init
Executable file
141
libexec/pyenv-init
Executable file
@@ -0,0 +1,141 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Configure the shell environment for pyenv
|
||||
# Usage: eval "$(pyenv init - [--no-rehash] [<shell>])"
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
print=""
|
||||
no_rehash=""
|
||||
for args in "$@"
|
||||
do
|
||||
if [ "$args" = "-" ]; then
|
||||
print=1
|
||||
shift
|
||||
fi
|
||||
|
||||
if [ "$args" = "--no-rehash" ]; then
|
||||
no_rehash=1
|
||||
shift
|
||||
fi
|
||||
done
|
||||
|
||||
shell="$1"
|
||||
if [ -z "$shell" ]; then
|
||||
shell="$(ps c -p "$PPID" -o 'ucomm=' 2>/dev/null || true)"
|
||||
shell="${shell##-}"
|
||||
shell="${shell%% *}"
|
||||
shell="$(basename "${shell:-$SHELL}")"
|
||||
fi
|
||||
|
||||
root="${0%/*}/.."
|
||||
|
||||
if [ -z "$print" ]; then
|
||||
case "$shell" in
|
||||
bash )
|
||||
profile='~/.bash_profile'
|
||||
;;
|
||||
zsh )
|
||||
profile='~/.zshrc'
|
||||
;;
|
||||
ksh )
|
||||
profile='~/.profile'
|
||||
;;
|
||||
fish )
|
||||
profile='~/.config/fish/config.fish'
|
||||
;;
|
||||
* )
|
||||
profile='your profile'
|
||||
;;
|
||||
esac
|
||||
|
||||
{ echo "# Load pyenv automatically by adding"
|
||||
echo "# the following to the end of ${profile}:"
|
||||
echo
|
||||
case "$shell" in
|
||||
fish )
|
||||
echo 'status --is-interactive; and . (pyenv init -|psub)'
|
||||
;;
|
||||
* )
|
||||
echo 'eval "$(pyenv init -)"'
|
||||
;;
|
||||
esac
|
||||
echo
|
||||
} >&2
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "${PYENV_ROOT}/"{shims,versions}
|
||||
|
||||
case "$shell" in
|
||||
fish )
|
||||
echo "setenv PATH '${PYENV_ROOT}/shims' \$PATH"
|
||||
echo "setenv PYENV_SHELL $shell"
|
||||
;;
|
||||
* )
|
||||
echo 'export PATH="'${PYENV_ROOT}'/shims:${PATH}"'
|
||||
echo "export PYENV_SHELL=$shell"
|
||||
;;
|
||||
esac
|
||||
|
||||
completion="${root}/completions/pyenv.${shell}"
|
||||
if [ -r "$completion" ]; then
|
||||
case "$shell" in
|
||||
fish ) echo ". '$completion'" ;;
|
||||
* ) echo "source '$completion'" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if [ -z "$no_rehash" ]; then
|
||||
echo 'pyenv rehash 2>/dev/null'
|
||||
fi
|
||||
|
||||
commands=(`pyenv-commands --sh`)
|
||||
case "$shell" in
|
||||
fish )
|
||||
cat <<EOS
|
||||
function pyenv
|
||||
set command \$argv[1]
|
||||
set -e argv[1]
|
||||
|
||||
switch "\$command"
|
||||
case ${commands[*]}
|
||||
eval (pyenv "sh-\$command" \$argv)
|
||||
case '*'
|
||||
command pyenv "\$command" \$argv
|
||||
end
|
||||
end
|
||||
EOS
|
||||
;;
|
||||
ksh )
|
||||
cat <<EOS
|
||||
function pyenv {
|
||||
typeset command
|
||||
EOS
|
||||
;;
|
||||
* )
|
||||
cat <<EOS
|
||||
pyenv() {
|
||||
local command
|
||||
EOS
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$shell" != "fish" ]; then
|
||||
IFS="|"
|
||||
cat <<EOS
|
||||
command="\$1"
|
||||
if [ "\$#" -gt 0 ]; then
|
||||
shift
|
||||
fi
|
||||
|
||||
case "\$command" in
|
||||
${commands[*]})
|
||||
eval "\`pyenv "sh-\$command" "\$@"\`";;
|
||||
*)
|
||||
command pyenv "\$command" "\$@";;
|
||||
esac
|
||||
}
|
||||
EOS
|
||||
fi
|
||||
62
libexec/pyenv-local
Executable file
62
libexec/pyenv-local
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Set or show the local application-specific Python version
|
||||
#
|
||||
# Usage: pyenv local <version>
|
||||
# pyenv local --unset
|
||||
#
|
||||
# Sets the local application-specific Python version by writing the
|
||||
# version name to a file named `.python-version'.
|
||||
#
|
||||
# When you run a Python command, pyenv will look for a `.python-version'
|
||||
# file in the current directory and each parent directory. If no such
|
||||
# file is found in the tree, pyenv will use the global Python version
|
||||
# specified with `pyenv global'. A version specified with the
|
||||
# `PYENV_VERSION' environment variable takes precedence over local
|
||||
# and global versions.
|
||||
#
|
||||
# For backwards compatibility, pyenv will also read version
|
||||
# specifications from `.pyenv-version' files, but a `.python-version'
|
||||
# file in the same directory takes precedence.
|
||||
#
|
||||
# <version> should be a string matching a Python version known to pyenv.
|
||||
# The special version string `system' will use your default system Python.
|
||||
# Run `pyenv versions' for a list of available Python versions.
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --unset
|
||||
echo system
|
||||
exec pyenv-versions --bare
|
||||
fi
|
||||
|
||||
versions=("$@")
|
||||
|
||||
if [ "$versions" = "--unset" ]; then
|
||||
rm -f .python-version .pyenv-version
|
||||
elif [ -n "$versions" ]; then
|
||||
previous_file="$(PYENV_VERSION= pyenv-version-origin || true)"
|
||||
pyenv-version-file-write .python-version "${versions[@]}"
|
||||
if [ "$previous_file" -ef .pyenv-version ]; then
|
||||
rm -f .pyenv-version
|
||||
{ echo "pyenv: removed existing \`.pyenv-version' file and migrated"
|
||||
echo " local version specification to \`.python-version' file"
|
||||
} >&2
|
||||
fi
|
||||
else
|
||||
OLDIFS="$IFS"
|
||||
IFS=: versions=($(
|
||||
pyenv-version-file-read .python-version ||
|
||||
pyenv-version-file-read .pyenv-version ||
|
||||
{ echo "pyenv: no local version configured for this directory"
|
||||
exit 1
|
||||
} >&2
|
||||
))
|
||||
IFS="$OLDIFS"
|
||||
for version in "${versions[@]}"; do
|
||||
echo "$version"
|
||||
done
|
||||
fi
|
||||
56
libexec/pyenv-prefix
Executable file
56
libexec/pyenv-prefix
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Display prefix for a Python version
|
||||
# Usage: pyenv prefix [<version>]
|
||||
#
|
||||
# Displays the directory where a Python version is installed. If no
|
||||
# version is given, `pyenv prefix' displays the location of the
|
||||
# currently selected version.
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo system
|
||||
exec pyenv-versions --bare
|
||||
fi
|
||||
|
||||
if [ -n "$1" ]; then
|
||||
OLDIFS="$IFS"
|
||||
{ IFS=:
|
||||
export PYENV_VERSION="$*"
|
||||
}
|
||||
IFS="$OLDIFS"
|
||||
elif [ -z "$PYENV_VERSION" ]; then
|
||||
PYENV_VERSION="$(pyenv-version-name)"
|
||||
fi
|
||||
|
||||
PYENV_PREFIX_PATHS=()
|
||||
OLDIFS="$IFS"
|
||||
{ IFS=:
|
||||
for version in ${PYENV_VERSION}; do
|
||||
if [ "$version" = "system" ]; then
|
||||
if PYTHON_PATH="$(pyenv-which python 2>/dev/null)"; then
|
||||
PYENV_PREFIX_PATH="${PYTHON_PATH%/bin/*}"
|
||||
else
|
||||
echo "pyenv: system version not found in PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
PYENV_PREFIX_PATH="${PYENV_ROOT}/versions/${version}"
|
||||
fi
|
||||
if [ -d "$PYENV_PREFIX_PATH" ]; then
|
||||
PYENV_PREFIX_PATHS=("${PYENV_PREFIX_PATHS[@]}" "$PYENV_PREFIX_PATH")
|
||||
else
|
||||
echo "pyenv: version \`${version}' not installed" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
IFS="$OLDIFS"
|
||||
|
||||
OLDIFS="$IFS"
|
||||
{ IFS=:
|
||||
echo "${PYENV_PREFIX_PATHS[*]}"
|
||||
}
|
||||
IFS="$OLDIFS"
|
||||
@@ -1,37 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Regenerate rbenv shims
|
||||
#
|
||||
# Regenerate shims for every Ruby executable in `$RBENV_ROOT/versions/*/bin'
|
||||
# and write them to the `$RBENV_ROOT/shims' directory. A shell environment
|
||||
# properly set up for rbenv will have this shims directory in PATH, which is
|
||||
# the core mechanism for Ruby version switching.
|
||||
#
|
||||
# Running rbenv rehash should only be necessary after installing new Ruby
|
||||
# versions or gems. Note that this is sometimes done automatically: the
|
||||
# `rbenv install' command from the ruby-build plugin runs rehash after
|
||||
# every successful installation, and a RubyGems plugin that ships with
|
||||
# rbenv runs rehash after every `gem install' command.
|
||||
# Summary: Rehash pyenv shims (run this after installing executables)
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
SHIM_PATH="${RBENV_ROOT}/shims"
|
||||
PROTOTYPE_SHIM_PATH="${SHIM_PATH}/.rbenv-shim"
|
||||
SHIM_PATH="${PYENV_ROOT}/shims"
|
||||
PROTOTYPE_SHIM_PATH="${SHIM_PATH}/.pyenv-shim"
|
||||
|
||||
# Create the shims directory if it doesn't already exist.
|
||||
mkdir -p "$SHIM_PATH"
|
||||
|
||||
# Ensure only one instance of rbenv-rehash is running at a time by
|
||||
# Ensure only one instance of pyenv-rehash is running at a time by
|
||||
# setting the shell's `noclobber` option and attempting to write to
|
||||
# the prototype shim file. If the file already exists, print a warning
|
||||
# to stderr and exit with a non-zero status.
|
||||
set -o noclobber
|
||||
{ echo > "$PROTOTYPE_SHIM_PATH"
|
||||
} 2>| /dev/null ||
|
||||
} 2>/dev/null ||
|
||||
{ if [ -w "$SHIM_PATH" ]; then
|
||||
echo "rbenv: cannot rehash: $PROTOTYPE_SHIM_PATH exists"
|
||||
echo "pyenv: cannot rehash: $PROTOTYPE_SHIM_PATH exists"
|
||||
else
|
||||
echo "rbenv: cannot rehash: $SHIM_PATH isn't writable"
|
||||
echo "pyenv: cannot rehash: $SHIM_PATH isn't writable"
|
||||
fi
|
||||
exit 1
|
||||
} >&2
|
||||
@@ -45,23 +34,8 @@ remove_prototype_shim() {
|
||||
rm -f "$PROTOTYPE_SHIM_PATH"
|
||||
}
|
||||
|
||||
# Locates rbenv as found in the user's PATH. Otherwise, returns an
|
||||
# absolute path to the rbenv executable itself.
|
||||
rbenv_path() {
|
||||
local found
|
||||
found="$(PATH="$RBENV_ORIG_PATH" type -P rbenv)"
|
||||
if [[ $found == /* ]]; then
|
||||
echo "$found"
|
||||
elif [[ -n "$found" ]]; then
|
||||
echo "$PWD/${found#./}"
|
||||
else
|
||||
# Assume rbenv isn't in PATH.
|
||||
echo "${BASH_SOURCE%/*}/rbenv"
|
||||
fi
|
||||
}
|
||||
|
||||
# The prototype shim file is a script that re-execs itself, passing
|
||||
# its filename and any arguments to `rbenv exec`. This file is
|
||||
# its filename and any arguments to `pyenv exec`. This file is
|
||||
# hard-linked for every executable and then removed. The linking
|
||||
# technique is fast, uses less disk space than unique files, and also
|
||||
# serves as a locking mechanism.
|
||||
@@ -69,16 +43,16 @@ create_prototype_shim() {
|
||||
cat > "$PROTOTYPE_SHIM_PATH" <<SH
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
[ -n "\$RBENV_DEBUG" ] && set -x
|
||||
[ -n "\$PYENV_DEBUG" ] && set -x
|
||||
|
||||
program="\${0##*/}"
|
||||
if [ "\$program" = "ruby" ]; then
|
||||
if [ "\$program" = "python" ]; then
|
||||
for arg; do
|
||||
case "\$arg" in
|
||||
-e* | -- ) break ;;
|
||||
-c* | -- ) break ;;
|
||||
*/* )
|
||||
if [ -f "\$arg" ]; then
|
||||
export RBENV_DIR="\${arg%/*}"
|
||||
export PYENV_DIR="\${arg%/*}"
|
||||
break
|
||||
fi
|
||||
;;
|
||||
@@ -86,14 +60,14 @@ if [ "\$program" = "ruby" ]; then
|
||||
done
|
||||
fi
|
||||
|
||||
export RBENV_ROOT="$RBENV_ROOT"
|
||||
exec "$(rbenv_path)" exec "\$program" "\$@"
|
||||
export PYENV_ROOT="$PYENV_ROOT"
|
||||
exec "$(command -v pyenv)" exec "\$program" "\$@"
|
||||
SH
|
||||
chmod +x "$PROTOTYPE_SHIM_PATH"
|
||||
}
|
||||
|
||||
# If the contents of the prototype shim file differ from the contents
|
||||
# of the first shim in the shims directory, assume rbenv has been
|
||||
# of the first shim in the shims directory, assume pyenv has been
|
||||
# upgraded and the existing shims need to be removed.
|
||||
remove_outdated_shims() {
|
||||
local shim
|
||||
@@ -105,20 +79,12 @@ remove_outdated_shims() {
|
||||
done
|
||||
}
|
||||
|
||||
# List basenames of executables for every Ruby version
|
||||
# List basenames of executables for every Python version
|
||||
list_executable_names() {
|
||||
local version file
|
||||
rbenv-versions --bare --skip-aliases | \
|
||||
while read -r version; do
|
||||
for file in "${RBENV_ROOT}/versions/${version}/bin/"*; do
|
||||
echo "${file##*/}"
|
||||
done
|
||||
local file
|
||||
for file in "$PYENV_ROOT"/versions/*/bin/*; do
|
||||
echo "${file##*/}"
|
||||
done
|
||||
if [ -n "$GEM_HOME" ]; then
|
||||
for file in "$GEM_HOME"/bin/*; do
|
||||
echo "${file##*/}"
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
# The basename of each argument passed to `make_shims` will be
|
||||
@@ -128,21 +94,23 @@ make_shims() {
|
||||
local file shim
|
||||
for file; do
|
||||
shim="${file##*/}"
|
||||
registered_shims+=("$shim")
|
||||
register_shim "$shim"
|
||||
done
|
||||
}
|
||||
|
||||
registered_shims=" "
|
||||
|
||||
# Registers the name of a shim to be generated.
|
||||
register_shim() {
|
||||
registered_shims+=("$1")
|
||||
registered_shims="${registered_shims}${1} "
|
||||
}
|
||||
|
||||
# Install all the shims registered via `make_shims` or `register_shim` directly.
|
||||
install_registered_shims() {
|
||||
local shim file
|
||||
for shim in "${registered_shims[@]}"; do
|
||||
for shim in $registered_shims; do
|
||||
file="${SHIM_PATH}/${shim}"
|
||||
[ -e "$file" ] || cp "$PROTOTYPE_SHIM_PATH" "$file"
|
||||
[ -e "$file" ] || ln -f "$PROTOTYPE_SHIM_PATH" "$file"
|
||||
done
|
||||
}
|
||||
|
||||
@@ -152,9 +120,8 @@ install_registered_shims() {
|
||||
# removed.
|
||||
remove_stale_shims() {
|
||||
local shim
|
||||
local known_shims=" ${registered_shims[*]} "
|
||||
for shim in "$SHIM_PATH"/*; do
|
||||
if [[ "$known_shims" != *" ${shim##*/} "* ]]; then
|
||||
if [[ "$registered_shims" != *" ${shim##*/} "* ]]; then
|
||||
rm -f "$shim"
|
||||
fi
|
||||
done
|
||||
@@ -166,13 +133,15 @@ shopt -s nullglob
|
||||
# executables.
|
||||
create_prototype_shim
|
||||
remove_outdated_shims
|
||||
# shellcheck disable=SC2207
|
||||
registered_shims=( $(list_executable_names | sort -u) )
|
||||
make_shims $(list_executable_names | sort -u)
|
||||
|
||||
|
||||
# Allow plugins to register shims.
|
||||
IFS=$'\n' read -d '' -r -a scripts <<<"$(rbenv-hooks rehash)" || true
|
||||
OLDIFS="$IFS"
|
||||
IFS=$'\n' scripts=(`pyenv-hooks rehash`)
|
||||
IFS="$OLDIFS"
|
||||
|
||||
for script in "${scripts[@]}"; do
|
||||
# shellcheck disable=SC1090
|
||||
source "$script"
|
||||
done
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Display the root directory where versions and shims are kept
|
||||
echo "$RBENV_ROOT"
|
||||
echo $PYENV_ROOT
|
||||
@@ -1,17 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
exec rbenv-rehash --complete
|
||||
exec pyenv-rehash --complete
|
||||
fi
|
||||
|
||||
shell="$(basename "${RBENV_SHELL:-$SHELL}")"
|
||||
shell="$(basename "${PYENV_SHELL:-$SHELL}")"
|
||||
|
||||
# When rbenv shell integration is enabled, delegate to rbenv-rehash,
|
||||
# When pyenv shell integration is enabled, delegate to pyenv-rehash,
|
||||
# then tell the shell to empty its command lookup cache.
|
||||
rbenv-rehash
|
||||
pyenv-rehash
|
||||
|
||||
case "$shell" in
|
||||
fish )
|
||||
67
libexec/pyenv-sh-shell
Executable file
67
libexec/pyenv-sh-shell
Executable file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Set or show the shell-specific Python version
|
||||
#
|
||||
# Usage: pyenv shell <version>
|
||||
# pyenv shell --unset
|
||||
#
|
||||
# Sets a shell-specific Python version by setting the `PYENV_VERSION'
|
||||
# environment variable in your shell. This version overrides local
|
||||
# application-specific versions and the global version.
|
||||
#
|
||||
# <version> should be a string matching a Python version known to pyenv.
|
||||
# The special version string `system' will use your default system Python.
|
||||
# Run `pyenv versions' for a list of available Python versions.
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --unset
|
||||
echo system
|
||||
exec pyenv-versions --bare
|
||||
fi
|
||||
|
||||
versions=("$@")
|
||||
shell="$(basename "${PYENV_SHELL:-$SHELL}")"
|
||||
|
||||
if [ -z "$versions" ]; then
|
||||
if [ -z "$PYENV_VERSION" ]; then
|
||||
echo "pyenv: no shell-specific version configured" >&2
|
||||
exit 1
|
||||
else
|
||||
echo "echo \"\$PYENV_VERSION\""
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$versions" = "--unset" ]; then
|
||||
case "$shell" in
|
||||
fish )
|
||||
echo "set -e PYENV_VERSION"
|
||||
;;
|
||||
* )
|
||||
echo "unset PYENV_VERSION"
|
||||
;;
|
||||
esac
|
||||
exit
|
||||
fi
|
||||
|
||||
# Make sure the specified version is installed.
|
||||
if pyenv-prefix "${versions[@]}" >/dev/null; then
|
||||
OLDIFS="$IFS"
|
||||
IFS=: version="${versions[*]}"
|
||||
IFS="$OLDIFS"
|
||||
case "$shell" in
|
||||
fish )
|
||||
echo "setenv PYENV_VERSION \"${version}\""
|
||||
;;
|
||||
* )
|
||||
echo "export PYENV_VERSION=\"${version}\""
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo "false"
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,11 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: List existing rbenv shims
|
||||
# Usage: rbenv shims [--short]
|
||||
# Summary: List existing pyenv shims
|
||||
# Usage: pyenv shims [--short]
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --short
|
||||
exit
|
||||
@@ -13,7 +13,7 @@ fi
|
||||
|
||||
shopt -s nullglob
|
||||
|
||||
for command in "${RBENV_ROOT}/shims/"*; do
|
||||
for command in "${PYENV_ROOT}/shims/"*; do
|
||||
if [ "$1" = "--short" ]; then
|
||||
echo "${command##*/}"
|
||||
else
|
||||
17
libexec/pyenv-version
Executable file
17
libexec/pyenv-version
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Show the current Python version and its origin
|
||||
#
|
||||
# Shows the currently selected Python version and how it was
|
||||
# selected. To obtain only the version string, use `pyenv
|
||||
# version-name'.
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
OLDIFS="$IFS"
|
||||
IFS=: PYENV_VERSION_NAMES=($(pyenv-version-name))
|
||||
IFS="$OLDIFS"
|
||||
|
||||
for PYENV_VERSION_NAME in "${PYENV_VERSION_NAMES[@]}"; do
|
||||
echo "$PYENV_VERSION_NAME (set by $(pyenv-version-origin))"
|
||||
done
|
||||
34
libexec/pyenv-version-file
Executable file
34
libexec/pyenv-version-file
Executable file
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Detect the file that sets the current pyenv version
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
find_local_version_file() {
|
||||
local root="$1"
|
||||
while [ -n "$root" ]; do
|
||||
if [ -e "${root}/.python-version" ]; then
|
||||
echo "${root}/.python-version"
|
||||
exit
|
||||
elif [ -e "${root}/.pyenv-version" ]; then
|
||||
echo "${root}/.pyenv-version"
|
||||
exit
|
||||
fi
|
||||
[ "${root}" = "${root%/*}" ] && break
|
||||
root="${root%/*}"
|
||||
done
|
||||
}
|
||||
|
||||
find_local_version_file "$PYENV_DIR"
|
||||
[ "$PYENV_DIR" = "$PWD" ] || find_local_version_file "$PWD"
|
||||
|
||||
global_version_file="${PYENV_ROOT}/version"
|
||||
|
||||
if [ -e "$global_version_file" ]; then
|
||||
echo "$global_version_file"
|
||||
elif [ -e "${PYENV_ROOT}/global" ]; then
|
||||
echo "${PYENV_ROOT}/global"
|
||||
elif [ -e "${PYENV_ROOT}/default" ]; then
|
||||
echo "${PYENV_ROOT}/default"
|
||||
else
|
||||
echo "$global_version_file"
|
||||
fi
|
||||
22
libexec/pyenv-version-file-read
Executable file
22
libexec/pyenv-version-file-read
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
# Usage: pyenv version-file-read <file>
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
VERSION_FILE="$1"
|
||||
|
||||
if [ -e "$VERSION_FILE" ]; then
|
||||
# Read the first non-whitespace word from the specified version file.
|
||||
# Be careful not to load it whole in case there's something crazy in it.
|
||||
IFS="${IFS}"$'\r'
|
||||
words=( $(cut -b 1-1024 "$VERSION_FILE" | $(type -p gawk awk | head -1) '{ print($1) }') )
|
||||
versions=("${words[@]}")
|
||||
|
||||
if [ -n "$versions" ]; then
|
||||
IFS=":"
|
||||
echo "${versions[*]}"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
exit 1
|
||||
24
libexec/pyenv-version-file-write
Executable file
24
libexec/pyenv-version-file-write
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
# Usage: pyenv version-file-write <file> <version>
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
PYENV_VERSION_FILE="$1"
|
||||
shift || true
|
||||
versions=("$@")
|
||||
|
||||
if [ -z "$versions" ] || [ -z "$PYENV_VERSION_FILE" ]; then
|
||||
pyenv-help --usage version-file-write >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Make sure the specified version is installed.
|
||||
pyenv-prefix "${versions[@]}" >/dev/null
|
||||
|
||||
# Write the version out to disk.
|
||||
# Create an empty file. Using "rm" might cause a permission error.
|
||||
> "$PYENV_VERSION_FILE"
|
||||
for version in "${versions[@]}"; do
|
||||
echo "$version" >> "$PYENV_VERSION_FILE"
|
||||
done
|
||||
41
libexec/pyenv-version-name
Executable file
41
libexec/pyenv-version-name
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Show the current Python version
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
if [ -z "$PYENV_VERSION" ]; then
|
||||
PYENV_VERSION_FILE="$(pyenv-version-file)"
|
||||
PYENV_VERSION="$(pyenv-version-file-read "$PYENV_VERSION_FILE" || true)"
|
||||
fi
|
||||
|
||||
if [ -z "$PYENV_VERSION" ] || [ "$PYENV_VERSION" = "system" ]; then
|
||||
echo "system"
|
||||
exit
|
||||
fi
|
||||
|
||||
version_exists() {
|
||||
local version="$1"
|
||||
[ -d "${PYENV_ROOT}/versions/${version}" ]
|
||||
}
|
||||
|
||||
versions=()
|
||||
OLDIFS="$IFS"
|
||||
{ IFS=:
|
||||
for version in ${PYENV_VERSION}; do
|
||||
if version_exists "$version" || [ "$version" = "system" ]; then
|
||||
versions=("${versions[@]}" "${version}")
|
||||
elif version_exists "${version#python-}"; then
|
||||
versions=("${versions[@]}" "${version#python-}")
|
||||
else
|
||||
echo "pyenv: version \`$version' is not installed" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
IFS="$OLDIFS"
|
||||
|
||||
OLDIFS="$IFS"
|
||||
{ IFS=:
|
||||
echo "${versions[*]}"
|
||||
}
|
||||
IFS="$OLDIFS"
|
||||
10
libexec/pyenv-version-origin
Executable file
10
libexec/pyenv-version-origin
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Explain how the current Python version is set
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
if [ -n "$PYENV_VERSION" ]; then
|
||||
echo "PYENV_VERSION environment variable"
|
||||
else
|
||||
pyenv-version-file
|
||||
fi
|
||||
63
libexec/pyenv-versions
Executable file
63
libexec/pyenv-versions
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: List all Python versions available to pyenv
|
||||
# Usage: pyenv versions [--bare]
|
||||
#
|
||||
# Lists all Python versions found in `$PYENV_ROOT/versions/*'.
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
if [ "$1" = "--bare" ]; then
|
||||
hit_prefix=""
|
||||
miss_prefix=""
|
||||
current_versions=()
|
||||
include_system=""
|
||||
else
|
||||
hit_prefix="* "
|
||||
miss_prefix=" "
|
||||
OLDIFS="$IFS"
|
||||
IFS=: current_versions=($(pyenv-version-name || true))
|
||||
IFS="$OLDIFS"
|
||||
include_system="1"
|
||||
fi
|
||||
|
||||
num_versions=0
|
||||
|
||||
exists() {
|
||||
local car="$1"
|
||||
local cdar
|
||||
shift
|
||||
for cdar in "$@"; do
|
||||
if [ "${car}" == "${cdar}" ]; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
print_version() {
|
||||
if exists "$1" "${current_versions[@]}"; then
|
||||
echo "${hit_prefix}$1 (set by $(pyenv-version-origin))"
|
||||
else
|
||||
echo "${miss_prefix}$1"
|
||||
fi
|
||||
num_versions=$((num_versions + 1))
|
||||
}
|
||||
|
||||
# Include "system" in the non-bare output, if it exists
|
||||
if [ -n "$include_system" ] && PYENV_VERSION=system pyenv-which python >/dev/null 2>&1; then
|
||||
print_version system
|
||||
fi
|
||||
|
||||
shopt -s nullglob
|
||||
for path in "${PYENV_ROOT}/versions/"*; do
|
||||
if [ -d "$path" ]; then
|
||||
print_version "${path##*/}"
|
||||
fi
|
||||
done
|
||||
shopt -u nullglob
|
||||
|
||||
if [ "$num_versions" -eq 0 ] && [ -n "$include_system" ]; then
|
||||
echo "Warning: no Python detected on the system" >&2
|
||||
exit 1
|
||||
fi
|
||||
38
libexec/pyenv-whence
Executable file
38
libexec/pyenv-whence
Executable file
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: List all Python versions that contain the given executable
|
||||
# Usage: pyenv whence [--path] <command>
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --path
|
||||
exec pyenv-shims --short
|
||||
fi
|
||||
|
||||
if [ "$1" = "--path" ]; then
|
||||
print_paths="1"
|
||||
shift
|
||||
else
|
||||
print_paths=""
|
||||
fi
|
||||
|
||||
whence() {
|
||||
local command="$1"
|
||||
pyenv-versions --bare | while read version; do
|
||||
path="$(pyenv-prefix "$version")/bin/${command}"
|
||||
if [ -x "$path" ]; then
|
||||
[ "$print_paths" ] && echo "$path" || echo "$version"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
PYENV_COMMAND="$1"
|
||||
if [ -z "$PYENV_COMMAND" ]; then
|
||||
pyenv-help --usage whence >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
result="$(whence "$PYENV_COMMAND")"
|
||||
[ -n "$result" ] && echo "$result"
|
||||
88
libexec/pyenv-which
Executable file
88
libexec/pyenv-which
Executable file
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Display the full path to an executable
|
||||
#
|
||||
# Usage: pyenv which <command>
|
||||
#
|
||||
# Displays the full path to the executable that pyenv will invoke when
|
||||
# you run the given command.
|
||||
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
exec pyenv-shims --short
|
||||
fi
|
||||
|
||||
remove_from_path() {
|
||||
local path_to_remove="$1"
|
||||
local path_before
|
||||
local result=":$PATH:"
|
||||
while [ "$path_before" != "$result" ]; do
|
||||
path_before="$result"
|
||||
result="${result//:$path_to_remove:/:}"
|
||||
done
|
||||
echo "${result%:}"
|
||||
}
|
||||
|
||||
PYENV_COMMAND="$1"
|
||||
|
||||
if [ -z "$PYENV_COMMAND" ]; then
|
||||
pyenv-help --usage which >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OLDIFS="$IFS"
|
||||
IFS=: versions=(${PYENV_VERSION:-$(pyenv-version-name)})
|
||||
IFS="$OLDIFS"
|
||||
|
||||
for version in "${versions[@]}"; do
|
||||
if [ "$version" = "system" ]; then
|
||||
PATH="$(remove_from_path "${PYENV_ROOT}/shims")"
|
||||
PYENV_COMMAND_PATH="$(command -v "$PYENV_COMMAND" || true)"
|
||||
else
|
||||
PYENV_COMMAND_PATH="${PYENV_ROOT}/versions/${version}/bin/${PYENV_COMMAND}"
|
||||
fi
|
||||
if [ -x "$PYENV_COMMAND_PATH" ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
OLDIFS="$IFS"
|
||||
IFS=$'\n' scripts=(`pyenv-hooks which`)
|
||||
IFS="$OLDIFS"
|
||||
for script in "${scripts[@]}"; do
|
||||
source "$script"
|
||||
done
|
||||
|
||||
if [ -x "$PYENV_COMMAND_PATH" ]; then
|
||||
echo "$PYENV_COMMAND_PATH"
|
||||
else
|
||||
any_not_installed=0
|
||||
for version in "${versions[@]}"; do
|
||||
if [ "$version" = "system" ]; then
|
||||
continue
|
||||
fi
|
||||
if ! [ -d "${PYENV_ROOT}/versions/${version}" ]; then
|
||||
echo "pyenv: version \`$version' is not installed" >&2
|
||||
any_not_installed=1
|
||||
fi
|
||||
done
|
||||
if [ "$any_not_installed" = 1 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "pyenv: $PYENV_COMMAND: command not found" >&2
|
||||
|
||||
versions="$(pyenv-whence "$PYENV_COMMAND" || true)"
|
||||
if [ -n "$versions" ]; then
|
||||
{ echo
|
||||
echo "The \`$1' command exists in these Python versions:"
|
||||
echo "$versions" | sed 's/^/ /g'
|
||||
echo
|
||||
} >&2
|
||||
fi
|
||||
|
||||
exit 127
|
||||
fi
|
||||
129
libexec/rbenv
129
libexec/rbenv
@@ -1,129 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
if [ "$1" = "--debug" ]; then
|
||||
export RBENV_DEBUG=1
|
||||
shift
|
||||
fi
|
||||
|
||||
if [ -n "$RBENV_DEBUG" ]; then
|
||||
# https://web.archive.org/web/20221105082147/https://wiki-dev.bash-hackers.org/scripting/debuggingtips#making_xtrace_more_useful
|
||||
export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
|
||||
set -x
|
||||
fi
|
||||
|
||||
abort() {
|
||||
{ if [ "$#" -eq 0 ]; then cat -
|
||||
else echo "rbenv: $*"
|
||||
fi
|
||||
} >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ -z "${RBENV_ROOT}" ]; then
|
||||
RBENV_ROOT="${HOME}/.rbenv"
|
||||
else
|
||||
RBENV_ROOT="${RBENV_ROOT%/}"
|
||||
fi
|
||||
export RBENV_ROOT
|
||||
|
||||
if [ -z "${RBENV_DIR}" ]; then
|
||||
RBENV_DIR="$PWD"
|
||||
else
|
||||
[[ $RBENV_DIR == /* ]] || RBENV_DIR="$PWD/$RBENV_DIR"
|
||||
cd "$RBENV_DIR" 2>/dev/null || abort "cannot change working directory to \`$RBENV_DIR'"
|
||||
RBENV_DIR="$PWD"
|
||||
cd "$OLDPWD"
|
||||
fi
|
||||
export RBENV_DIR
|
||||
|
||||
[ -n "$RBENV_ORIG_PATH" ] || export RBENV_ORIG_PATH="$PATH"
|
||||
|
||||
canonicalize() {
|
||||
local readlink resolved_path
|
||||
if readlink="$(type -P greadlink)" || readlink="$(type -P readlink)"; then
|
||||
# happy path: GNU & BSD readlink, macOS 12.3+
|
||||
if resolved_path="$("$readlink" -f "$1" 2>/dev/null)"; then
|
||||
printf "%s\n" "$resolved_path"
|
||||
return 0
|
||||
fi
|
||||
# likely macOS < 12.3 with old readlink
|
||||
local path="$1"
|
||||
while [ -L "$path" ]; do
|
||||
resolved_path="$("$readlink" "$path" 2>/dev/null)"
|
||||
[[ $resolved_path == /* ]] || resolved_path="$(cd "${path%/*}/${resolved_path%/*}" && pwd)/${resolved_path##*/}"
|
||||
path="$resolved_path"
|
||||
done
|
||||
printf "%s\n" "$path"
|
||||
return 0
|
||||
fi
|
||||
# fail if the argument is a symlink and was not canonicalized
|
||||
[ ! -L "$1" ] || return 1
|
||||
}
|
||||
|
||||
shopt -s nullglob
|
||||
|
||||
# all this trouble just to find out where rbenv's executables live
|
||||
rbenv_bin="${BASH_SOURCE:-$0}"
|
||||
if libexec_dir="$(canonicalize "$rbenv_bin")"; then
|
||||
libexec_dir="${libexec_dir%/*}"
|
||||
else
|
||||
libexec_dir="${rbenv_bin%/*}"
|
||||
[ "$libexec_dir" != "." ] || libexec_dir="$PWD"
|
||||
fi
|
||||
|
||||
for plugin_bin in "${RBENV_ROOT}/plugins/"*/bin; do
|
||||
PATH="${plugin_bin}:${PATH}"
|
||||
done
|
||||
export PATH="${libexec_dir}:${PATH}"
|
||||
|
||||
RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:${RBENV_ROOT}/rbenv.d"
|
||||
if [ ! "${libexec_dir%/*}"/rbenv.d -ef "$RBENV_ROOT"/rbenv.d ]; then
|
||||
# Add rbenv's own `rbenv.d` unless rbenv was cloned to RBENV_ROOT
|
||||
RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:${libexec_dir%/*}/rbenv.d"
|
||||
fi
|
||||
RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:/usr/etc/rbenv.d:/usr/local/etc/rbenv.d:/etc/rbenv.d:/usr/lib/rbenv/hooks"
|
||||
for plugin_hook in "${RBENV_ROOT}/plugins/"*/etc/rbenv.d; do
|
||||
RBENV_HOOK_PATH="${RBENV_HOOK_PATH}:${plugin_hook}"
|
||||
done
|
||||
RBENV_HOOK_PATH="${RBENV_HOOK_PATH#:}"
|
||||
export RBENV_HOOK_PATH
|
||||
|
||||
shopt -u nullglob
|
||||
|
||||
|
||||
command="$1"
|
||||
case "$command" in
|
||||
"" )
|
||||
{ rbenv---version
|
||||
rbenv-help
|
||||
} | abort
|
||||
;;
|
||||
-v | --version )
|
||||
exec rbenv---version
|
||||
;;
|
||||
-h | --help )
|
||||
exec rbenv-help
|
||||
;;
|
||||
* )
|
||||
command_path="$(type -P "rbenv-$command" || true)"
|
||||
if [ -z "$command_path" ]; then
|
||||
if [ "$command" == "shell" ]; then
|
||||
abort "shell integration not enabled. Run \`rbenv init' for instructions."
|
||||
else
|
||||
abort "no such command \`$command'"
|
||||
fi
|
||||
fi
|
||||
|
||||
shift 1
|
||||
if [ "$1" = --help ]; then
|
||||
if [[ "$command" == "sh-"* ]]; then
|
||||
echo "rbenv help \"$command\""
|
||||
else
|
||||
exec rbenv-help "$command"
|
||||
fi
|
||||
else
|
||||
exec "$command_path" "$@"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
@@ -1,50 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: List all available rbenv commands
|
||||
# Usage: rbenv commands [--sh|--no-sh]
|
||||
#
|
||||
# List names of all rbenv commands, including 3rd-party ones found in the
|
||||
# PATH or in rbenv plugins. With `--sh`, list only shell commands.
|
||||
#
|
||||
# This functionality is mainly meant for scripting. To see usage help for
|
||||
# rbenv, run `rbenv help`.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --sh
|
||||
echo --no-sh
|
||||
exit
|
||||
fi
|
||||
|
||||
exclude_shell=
|
||||
command_prefix="rbenv-"
|
||||
|
||||
if [ "$1" = "--sh" ]; then
|
||||
command_prefix="rbenv-sh-"
|
||||
shift
|
||||
elif [ "$1" = "--no-sh" ]; then
|
||||
exclude_shell=1
|
||||
shift
|
||||
fi
|
||||
|
||||
shopt -s nullglob
|
||||
|
||||
{
|
||||
PATH_remain="$PATH"
|
||||
# traverse PATH to find "rbenv-" prefixed commands
|
||||
while true; do
|
||||
path="${PATH_remain%%:*}"
|
||||
if [ -n "$path" ]; then
|
||||
for rbenv_command in "${path}/${command_prefix}"*; do
|
||||
rbenv_command="${rbenv_command##*rbenv-}"
|
||||
if [[ -z $exclude_shell || $rbenv_command != sh-* ]]; then
|
||||
echo "${rbenv_command##sh-}"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
[[ $PATH_remain == *:* ]] || break
|
||||
PATH_remain="${PATH_remain#*:}"
|
||||
done
|
||||
} | sort | uniq
|
||||
@@ -1,26 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Usage: rbenv completions <command> [<args>...]
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
COMMAND="$1"
|
||||
if [ -z "$COMMAND" ]; then
|
||||
rbenv-help --usage completions >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$COMMAND" = "--complete" ]; then
|
||||
exec rbenv-commands
|
||||
fi
|
||||
|
||||
COMMAND_PATH="$(type -P "rbenv-$COMMAND" "rbenv-sh-$COMMAND" | head -n1)"
|
||||
|
||||
# --help is provided automatically
|
||||
echo --help
|
||||
|
||||
if grep -iE "^([#%]|--|//) provide rbenv completions" "$COMMAND_PATH" >/dev/null; then
|
||||
shift
|
||||
exec "$COMMAND_PATH" --complete "$@"
|
||||
fi
|
||||
@@ -1,46 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Run an executable with the selected Ruby version
|
||||
#
|
||||
# Usage: rbenv exec <command> [<args>...]
|
||||
#
|
||||
# Runs an executable by first preparing PATH so that the selected Ruby
|
||||
# version's `bin' directory is at the front.
|
||||
#
|
||||
# For example, if the currently selected Ruby version is 1.9.3-p327:
|
||||
# rbenv exec bundle install
|
||||
#
|
||||
# is equivalent to:
|
||||
# PATH="$RBENV_ROOT/versions/1.9.3-p327/bin:$PATH" bundle install
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
exec rbenv-shims --short
|
||||
fi
|
||||
|
||||
RBENV_VERSION="$(rbenv-version-name)"
|
||||
RBENV_COMMAND="$1"
|
||||
|
||||
if [ -z "$RBENV_COMMAND" ]; then
|
||||
rbenv-help --usage exec >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export RBENV_VERSION
|
||||
RBENV_COMMAND_PATH="$(rbenv-which "$RBENV_COMMAND")"
|
||||
RBENV_BIN_PATH="${RBENV_COMMAND_PATH%/*}"
|
||||
|
||||
IFS=$'\n' read -d '' -r -a scripts <<<"$(rbenv-hooks exec)" || true
|
||||
for script in "${scripts[@]}"; do
|
||||
# shellcheck disable=SC1090
|
||||
source "$script"
|
||||
done
|
||||
|
||||
shift 1
|
||||
if [ "$RBENV_VERSION" != "system" ]; then
|
||||
export PATH="${RBENV_BIN_PATH}:${PATH}"
|
||||
fi
|
||||
exec -a "$RBENV_COMMAND" "$RBENV_COMMAND_PATH" "$@"
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Set or show the global Ruby version
|
||||
#
|
||||
# Usage: rbenv global <version>
|
||||
#
|
||||
# Sets the global Ruby version. You can override the global version at
|
||||
# any time by setting a directory-specific version with `rbenv local'
|
||||
# or by setting the `RBENV_VERSION' environment variable.
|
||||
#
|
||||
# <version> should be a string matching a Ruby version known to rbenv.
|
||||
# The special version string `system' will use your default system Ruby.
|
||||
# Run `rbenv versions' for a list of available Ruby versions.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo system
|
||||
exec rbenv-versions --bare
|
||||
fi
|
||||
|
||||
RBENV_VERSION="$1"
|
||||
RBENV_VERSION_FILE="${RBENV_ROOT}/version"
|
||||
|
||||
if [ -n "$RBENV_VERSION" ]; then
|
||||
rbenv-version-file-write "$RBENV_VERSION_FILE" "$RBENV_VERSION"
|
||||
else
|
||||
rbenv-version-file-read "$RBENV_VERSION_FILE" || echo system
|
||||
fi
|
||||
@@ -1,32 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: List hook scripts for a given rbenv command
|
||||
# Usage: rbenv hooks <command>
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo exec
|
||||
echo rehash
|
||||
echo version-name
|
||||
echo version-origin
|
||||
echo which
|
||||
exit
|
||||
fi
|
||||
|
||||
RBENV_COMMAND="$1"
|
||||
if [ -z "$RBENV_COMMAND" ]; then
|
||||
rbenv-help --usage hooks >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
IFS=: read -r -a hook_paths <<<"$RBENV_HOOK_PATH"
|
||||
|
||||
shopt -s nullglob
|
||||
for path in "${hook_paths[@]}"; do
|
||||
for script in "$path/$RBENV_COMMAND"/*.bash; do
|
||||
echo "$script"
|
||||
done
|
||||
done
|
||||
shopt -u nullglob
|
||||
@@ -1,222 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Configure the shell environment for rbenv
|
||||
# Usage: rbenv init [<shells>...]
|
||||
# rbenv init - [--no-rehash] [<shell>]
|
||||
#
|
||||
# Modifies shell initialization files to bootstrap rbenv functionality.
|
||||
# Typically, this will add a line that eval's the output of `rbenv init -`.
|
||||
# If no shells are named by arguments, the current shell will be detected
|
||||
# by inspecting the parent process. If a shell is already configured for
|
||||
# rbenv, the init command does nothing and exits with zero status.
|
||||
#
|
||||
# In the `rbenv init -` mode, this outputs a script to be eval'd in the
|
||||
# current shell. Most importantly, that script prepends the rbenv shims
|
||||
# directory to the PATH environment variable. To aid interactive shells,
|
||||
# the script also installs the magic `rbenv()` shell function and loads
|
||||
# shell completions for rbenv commands.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo -
|
||||
echo --no-rehash
|
||||
echo bash
|
||||
echo fish
|
||||
echo ksh
|
||||
echo zsh
|
||||
exit
|
||||
fi
|
||||
|
||||
print=""
|
||||
no_rehash=""
|
||||
shells=()
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
"-" )
|
||||
print=1
|
||||
;;
|
||||
"--no-rehash" )
|
||||
no_rehash=1
|
||||
;;
|
||||
* )
|
||||
shells+=("$1")
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ "${#shells[@]}" -eq 0 ]; then
|
||||
shell="$(ps -p "$PPID" -o 'args=' 2>/dev/null || true)"
|
||||
shell="${shell%% *}"
|
||||
shell="${shell##-}"
|
||||
shell="${shell:-$SHELL}"
|
||||
shell="${shell##*/}"
|
||||
shells=("${shell%%-*}")
|
||||
fi
|
||||
|
||||
root="${BASH_SOURCE:-$0}"
|
||||
root="${root%/*}"
|
||||
root="${root%/*}"
|
||||
|
||||
rbenv_in_path=true
|
||||
if [ -n "$RBENV_ORIG_PATH" ]; then
|
||||
PATH="$RBENV_ORIG_PATH" type -P rbenv >/dev/null || rbenv_in_path=""
|
||||
fi
|
||||
|
||||
if [ -z "$print" ]; then
|
||||
display_path() {
|
||||
if [ "${1/#$HOME\/}" != "$1" ]; then
|
||||
# shellcheck disable=SC2088
|
||||
printf '~/%s' "${1/#$HOME\/}"
|
||||
else
|
||||
printf '%s' "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
rbenv_command=rbenv
|
||||
if [ -z "$rbenv_in_path" ]; then
|
||||
rbenv_command="$(display_path "$root/bin/rbenv")"
|
||||
fi
|
||||
|
||||
color_start=""
|
||||
color_end=""
|
||||
if [ -t 1 ]; then
|
||||
color_start=$'\e[33;1m'
|
||||
color_end=$'\e[m'
|
||||
fi
|
||||
|
||||
write_config() {
|
||||
if grep -q "rbenv init" "$1" 2>/dev/null; then
|
||||
printf 'skipping %s%s%s: already configured for rbenv.\n' "$color_start" "$(display_path "$1")" "$color_end"
|
||||
return 0
|
||||
fi
|
||||
mkdir -p "${1%/*}"
|
||||
# shellcheck disable=SC2016
|
||||
printf '\n# Added by `rbenv init` on %s\n%s\n' "$(date)" "$2" >> "$1"
|
||||
printf 'writing %s%s%s: now configured for rbenv.\n' "$color_start" "$(display_path "$1")" "$color_end"
|
||||
}
|
||||
|
||||
status=0
|
||||
for shell in "${shells[@]}"; do
|
||||
case "$shell" in
|
||||
bash )
|
||||
if [ -f ~/.bashrc ] && [ ! -f ~/.bash_profile ]; then
|
||||
profile="$HOME/.bashrc"
|
||||
else
|
||||
# shellcheck disable=SC2012
|
||||
profile="$(ls ~/.bash_profile ~/.bash_login ~/.profile 2>/dev/null | head -n1)"
|
||||
[ -n "$profile" ] || profile="$HOME/.bash_profile"
|
||||
fi
|
||||
write_config "$profile" \
|
||||
"eval \"\$($rbenv_command init - --no-rehash bash)\""
|
||||
;;
|
||||
zsh )
|
||||
# check zshrc for backward compatibility with older rbenv init
|
||||
if grep -q rbenv "${ZDOTDIR:-$HOME}/.zshrc" 2>/dev/null; then
|
||||
profile="${ZDOTDIR:-$HOME}/.zshrc"
|
||||
else
|
||||
profile="${ZDOTDIR:-$HOME}/.zprofile"
|
||||
fi
|
||||
write_config "$profile" \
|
||||
"eval \"\$($rbenv_command init - --no-rehash zsh)\""
|
||||
;;
|
||||
ksh | ksh93 | mksh )
|
||||
# There are two implementations of Korn shell: AT&T (ksh93) and Mir (mksh).
|
||||
# Systems may have them installed under those names, or as ksh, so those
|
||||
# are recognized here. The obsolete ksh88 (subsumed by ksh93) and pdksh
|
||||
# (subsumed by mksh) are not included, since they are unlikely to still
|
||||
# be in use as interactive shells anywhere.
|
||||
write_config "$HOME/.profile" \
|
||||
"eval \"\$($rbenv_command init - ksh)\""
|
||||
;;
|
||||
fish )
|
||||
write_config "${XDG_CONFIG_HOME:-$HOME/.config}/fish/config.fish" \
|
||||
"status --is-interactive; and $rbenv_command init - --no-rehash fish | source"
|
||||
;;
|
||||
* )
|
||||
printf 'unsupported shell: "%s"\n' "$shell" >&2
|
||||
status=1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
exit $status
|
||||
fi
|
||||
|
||||
mkdir -p "${RBENV_ROOT}/"{shims,versions}
|
||||
|
||||
shell="${shells[0]}"
|
||||
case "$shell" in
|
||||
fish )
|
||||
[ -n "$rbenv_in_path" ] || printf "set -gx PATH '%s/bin' \$PATH\n" "$root"
|
||||
printf "set -gx PATH '%s/shims' \$PATH\n" "$RBENV_ROOT"
|
||||
printf 'set -gx RBENV_SHELL %s\n' "$shell"
|
||||
;;
|
||||
* )
|
||||
# shellcheck disable=SC2016
|
||||
[ -n "$rbenv_in_path" ] || printf 'export PATH="%s/bin:${PATH}"\n' "$root"
|
||||
# shellcheck disable=SC2016
|
||||
printf 'export PATH="%s/shims:${PATH}"\n' "$RBENV_ROOT"
|
||||
printf 'export RBENV_SHELL=%s\n' "$shell"
|
||||
|
||||
completion="${root}/completions/rbenv.${shell}"
|
||||
if [ -r "$completion" ]; then
|
||||
printf "source '%s'\n" "$completion"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -z "$no_rehash" ]; then
|
||||
echo 'command rbenv rehash 2>/dev/null'
|
||||
fi
|
||||
|
||||
IFS=$'\n' read -d '' -r -a commands <<<"$(rbenv-commands --sh)" || true
|
||||
|
||||
case "$shell" in
|
||||
fish )
|
||||
cat <<EOS
|
||||
function rbenv
|
||||
set command \$argv[1]
|
||||
set -e argv[1]
|
||||
|
||||
switch "\$command"
|
||||
case ${commands[*]}
|
||||
rbenv "sh-\$command" \$argv|source
|
||||
case '*'
|
||||
command rbenv "\$command" \$argv
|
||||
end
|
||||
end
|
||||
EOS
|
||||
;;
|
||||
ksh | ksh93 | mksh )
|
||||
cat <<EOS
|
||||
function rbenv {
|
||||
typeset command
|
||||
EOS
|
||||
;;
|
||||
* )
|
||||
cat <<EOS
|
||||
rbenv() {
|
||||
local command
|
||||
EOS
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$shell" != "fish" ]; then
|
||||
IFS="|"
|
||||
cat <<EOS
|
||||
command="\${1:-}"
|
||||
if [ "\$#" -gt 0 ]; then
|
||||
shift
|
||||
fi
|
||||
|
||||
case "\$command" in
|
||||
${commands[*]})
|
||||
eval "\$(rbenv "sh-\$command" "\$@")";;
|
||||
*)
|
||||
command rbenv "\$command" "\$@";;
|
||||
esac
|
||||
}
|
||||
EOS
|
||||
fi
|
||||
@@ -1,45 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Set or show the local application-specific Ruby version
|
||||
#
|
||||
# Usage: rbenv local <version>
|
||||
# rbenv local --unset
|
||||
#
|
||||
# Sets the local application-specific Ruby version by writing the
|
||||
# version name to a file named `.ruby-version'.
|
||||
#
|
||||
# When you run a Ruby command, rbenv will look for a `.ruby-version'
|
||||
# file in the current directory and each parent directory. If no such
|
||||
# file is found in the tree, rbenv will use the global Ruby version
|
||||
# specified with `rbenv global'. A version specified with the
|
||||
# `RBENV_VERSION' environment variable takes precedence over local
|
||||
# and global versions.
|
||||
#
|
||||
# <version> should be a string matching a Ruby version known to rbenv.
|
||||
# The special version string `system' will use your default system Ruby.
|
||||
# Run `rbenv versions' for a list of available Ruby versions.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --unset
|
||||
echo system
|
||||
exec rbenv-versions --bare
|
||||
fi
|
||||
|
||||
RBENV_VERSION="$1"
|
||||
|
||||
if [ "$RBENV_VERSION" = "--unset" ]; then
|
||||
rm -f .ruby-version
|
||||
elif [ -n "$RBENV_VERSION" ]; then
|
||||
rbenv-version-file-write .ruby-version "$RBENV_VERSION"
|
||||
else
|
||||
if version_file="$(rbenv-version-file "$PWD")"; then
|
||||
rbenv-version-file-read "$version_file"
|
||||
else
|
||||
echo "rbenv: no local version configured for this directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
@@ -1,42 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Display prefix for a Ruby version
|
||||
# Usage: rbenv prefix [<version>]
|
||||
#
|
||||
# Displays the directory where a Ruby version is installed. If no
|
||||
# version is given, `rbenv prefix' displays the location of the
|
||||
# currently selected version.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo system
|
||||
exec rbenv-versions --bare
|
||||
fi
|
||||
|
||||
if [ -n "$1" ]; then
|
||||
export RBENV_VERSION="$1"
|
||||
elif [ -z "$RBENV_VERSION" ]; then
|
||||
RBENV_VERSION="$(rbenv-version-name)"
|
||||
fi
|
||||
|
||||
if [ "$RBENV_VERSION" = "system" ]; then
|
||||
if RUBY_PATH="$(rbenv-which ruby)"; then
|
||||
RUBY_PATH="${RUBY_PATH%/*}"
|
||||
RBENV_PREFIX_PATH="${RUBY_PATH%/bin}"
|
||||
echo "${RBENV_PREFIX_PATH:-/}"
|
||||
exit
|
||||
else
|
||||
echo "rbenv: system version not found in PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
RBENV_PREFIX_PATH="${RBENV_ROOT}/versions/${RBENV_VERSION}"
|
||||
if [ ! -d "$RBENV_PREFIX_PATH" ]; then
|
||||
echo "rbenv: version \`${RBENV_VERSION}' not installed" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$RBENV_PREFIX_PATH"
|
||||
@@ -1,144 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Set or show the shell-specific Ruby version
|
||||
#
|
||||
# Usage: rbenv shell <version>
|
||||
# rbenv shell -
|
||||
# rbenv shell --unset
|
||||
#
|
||||
# Sets a shell-specific Ruby version by setting the `RBENV_VERSION'
|
||||
# environment variable in your shell. This version overrides local
|
||||
# application-specific versions and the global version.
|
||||
#
|
||||
# <version> should be a string matching a Ruby version known to rbenv.
|
||||
# The special version string `system' will use your default system Ruby.
|
||||
# Run `rbenv versions' for a list of available Ruby versions.
|
||||
#
|
||||
# When `-` is passed instead of the version string, the previously set
|
||||
# version will be restored. With `--unset`, the `RBENV_VERSION`
|
||||
# environment variable gets unset, restoring the environment to the
|
||||
# state before the first `rbenv shell` call.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --unset
|
||||
echo system
|
||||
exec rbenv-versions --bare
|
||||
fi
|
||||
|
||||
version="$1"
|
||||
shell="$(basename "${RBENV_SHELL:-$SHELL}")"
|
||||
|
||||
if [ -z "$version" ]; then
|
||||
if [ -z "$RBENV_VERSION" ]; then
|
||||
echo "rbenv: no shell-specific version configured" >&2
|
||||
exit 1
|
||||
else
|
||||
echo 'echo "$RBENV_VERSION"'
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$version" = "--unset" ]; then
|
||||
case "$shell" in
|
||||
fish )
|
||||
echo 'set -gu RBENV_VERSION_OLD "$RBENV_VERSION"'
|
||||
echo "set -e RBENV_VERSION"
|
||||
;;
|
||||
zsh )
|
||||
echo "typeset -g RBENV_VERSION_OLD=\"\${RBENV_VERSION-}\""
|
||||
echo "unset RBENV_VERSION"
|
||||
;;
|
||||
* )
|
||||
echo 'RBENV_VERSION_OLD="${RBENV_VERSION-}"'
|
||||
echo "unset RBENV_VERSION"
|
||||
;;
|
||||
esac
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$version" = "-" ]; then
|
||||
case "$shell" in
|
||||
fish )
|
||||
cat <<EOS
|
||||
if set -q RBENV_VERSION_OLD
|
||||
if [ -n "\$RBENV_VERSION_OLD" ]
|
||||
set RBENV_VERSION_OLD_ "\$RBENV_VERSION"
|
||||
set -gx RBENV_VERSION "\$RBENV_VERSION_OLD"
|
||||
set -gu RBENV_VERSION_OLD "\$RBENV_VERSION_OLD_"
|
||||
set -e RBENV_VERSION_OLD_
|
||||
else
|
||||
set -gu RBENV_VERSION_OLD "\$RBENV_VERSION"
|
||||
set -e RBENV_VERSION
|
||||
end
|
||||
else
|
||||
echo "rbenv: RBENV_VERSION_OLD is not set" >&2
|
||||
false
|
||||
end
|
||||
EOS
|
||||
;;
|
||||
zsh )
|
||||
cat <<EOS
|
||||
if [ -n "\${RBENV_VERSION_OLD+x}" ]; then
|
||||
if [ -n "\$RBENV_VERSION_OLD" ]; then
|
||||
local RBENV_VERSION_OLD_="\$RBENV_VERSION"
|
||||
export RBENV_VERSION="\$RBENV_VERSION_OLD"
|
||||
RBENV_VERSION_OLD="\$RBENV_VERSION_OLD_"
|
||||
unset RBENV_VERSION_OLD_
|
||||
else
|
||||
typeset -g RBENV_VERSION_OLD="\$RBENV_VERSION"
|
||||
unset RBENV_VERSION
|
||||
fi
|
||||
else
|
||||
echo "rbenv: RBENV_VERSION_OLD is not set" >&2
|
||||
false
|
||||
fi
|
||||
EOS
|
||||
;;
|
||||
* )
|
||||
cat <<EOS
|
||||
if [ -n "\${RBENV_VERSION_OLD+x}" ]; then
|
||||
if [ -n "\$RBENV_VERSION_OLD" ]; then
|
||||
RBENV_VERSION_OLD_="\$RBENV_VERSION"
|
||||
export RBENV_VERSION="\$RBENV_VERSION_OLD"
|
||||
RBENV_VERSION_OLD="\$RBENV_VERSION_OLD_"
|
||||
unset RBENV_VERSION_OLD_
|
||||
else
|
||||
RBENV_VERSION_OLD="\$RBENV_VERSION"
|
||||
unset RBENV_VERSION
|
||||
fi
|
||||
else
|
||||
echo "rbenv: RBENV_VERSION_OLD is not set" >&2
|
||||
false
|
||||
fi
|
||||
EOS
|
||||
;;
|
||||
esac
|
||||
exit
|
||||
fi
|
||||
|
||||
# Make sure the specified version is installed.
|
||||
if rbenv-prefix "$version" >/dev/null; then
|
||||
if [ "$version" != "$RBENV_VERSION" ]; then
|
||||
case "$shell" in
|
||||
fish )
|
||||
echo 'set -gu RBENV_VERSION_OLD "$RBENV_VERSION"'
|
||||
echo "set -gx RBENV_VERSION \"$version\""
|
||||
;;
|
||||
zsh )
|
||||
echo "typeset -g RBENV_VERSION_OLD=\"\${RBENV_VERSION-}\""
|
||||
echo "export RBENV_VERSION=\"$version\""
|
||||
;;
|
||||
* )
|
||||
echo 'RBENV_VERSION_OLD="${RBENV_VERSION-}"'
|
||||
echo "export RBENV_VERSION=\"$version\""
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
else
|
||||
echo "false"
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,18 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Show the current Ruby version and its origin
|
||||
#
|
||||
# Shows the currently selected Ruby version and how it was
|
||||
# selected. To obtain only the version string, use `rbenv
|
||||
# version-name'.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
version_name="$(rbenv-version-name)"
|
||||
version_origin="$(rbenv-version-origin)"
|
||||
|
||||
if [ "$version_origin" = "${RBENV_ROOT}/version" ] && [ ! -e "$version_origin" ]; then
|
||||
echo "$version_name"
|
||||
else
|
||||
echo "$version_name (set by $version_origin)"
|
||||
fi
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Usage: rbenv version-file [<dir>]
|
||||
# Summary: Detect the file that sets the current rbenv version
|
||||
#
|
||||
# Detects and prints the location of a `.ruby-version` file that sets the
|
||||
# version for the current working directory. If no file found, this prints
|
||||
# the location of the global version file, even if that file does
|
||||
# not exist.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
target_dir="$1"
|
||||
|
||||
find_local_version_file() {
|
||||
local root="$1"
|
||||
while ! [[ "$root" =~ ^//[^/]*$ ]]; do
|
||||
if [ -s "${root}/.ruby-version" ]; then
|
||||
echo "${root}/.ruby-version"
|
||||
return 0
|
||||
fi
|
||||
[ -n "$root" ] || break
|
||||
root="${root%/*}"
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
if [ -n "$target_dir" ]; then
|
||||
find_local_version_file "$target_dir"
|
||||
else
|
||||
find_local_version_file "$RBENV_DIR" || {
|
||||
[ "$RBENV_DIR" != "$PWD" ] && find_local_version_file "$PWD"
|
||||
} || echo "${RBENV_ROOT}/version"
|
||||
fi
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Usage: rbenv version-file-read <file>
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
VERSION_FILE="$1"
|
||||
|
||||
if [ -s "$VERSION_FILE" ]; then
|
||||
# Read the first word from the specified version file. Avoid reading it whole.
|
||||
IFS="${IFS}"$'\r'
|
||||
read -n 1024 -d "" -r version _ <"$VERSION_FILE" || :
|
||||
|
||||
if [ "$version" = ".." ] || [[ $version == */* ]]; then
|
||||
echo "rbenv: invalid version in \`$VERSION_FILE'" >&2
|
||||
elif [ -n "$version" ]; then
|
||||
echo "$version"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
exit 1
|
||||
@@ -1,19 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Usage: rbenv version-file-write <file> <version>
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
RBENV_VERSION_FILE="$1"
|
||||
RBENV_VERSION="$2"
|
||||
|
||||
if [ -z "$RBENV_VERSION" ] || [ -z "$RBENV_VERSION_FILE" ]; then
|
||||
rbenv-help --usage version-file-write >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Make sure the specified version is installed.
|
||||
rbenv-prefix "$RBENV_VERSION" >/dev/null
|
||||
|
||||
# Write the version out to disk.
|
||||
echo "$RBENV_VERSION" > "$RBENV_VERSION_FILE"
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Show the current Ruby version
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
if [ -z "$RBENV_VERSION" ]; then
|
||||
RBENV_VERSION_FILE="$(rbenv-version-file)"
|
||||
RBENV_VERSION="$(rbenv-version-file-read "$RBENV_VERSION_FILE" || true)"
|
||||
fi
|
||||
|
||||
IFS=$'\n' read -d '' -r -a scripts <<<"$(rbenv-hooks version-name)" || true
|
||||
for script in "${scripts[@]}"; do
|
||||
# shellcheck disable=SC1090
|
||||
source "$script"
|
||||
done
|
||||
|
||||
if [ -z "$RBENV_VERSION" ] || [ "$RBENV_VERSION" = "system" ]; then
|
||||
echo "system"
|
||||
exit
|
||||
fi
|
||||
|
||||
version_exists() {
|
||||
local version="$1"
|
||||
[ -d "${RBENV_ROOT}/versions/${version}" ]
|
||||
}
|
||||
|
||||
if version_exists "$RBENV_VERSION"; then
|
||||
echo "$RBENV_VERSION"
|
||||
elif version_exists "${RBENV_VERSION#ruby-}"; then
|
||||
echo "${RBENV_VERSION#ruby-}"
|
||||
else
|
||||
echo "rbenv: version \`$RBENV_VERSION' is not installed (set by $(rbenv-version-origin))" >&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: Explain how the current Ruby version is set
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
unset RBENV_VERSION_ORIGIN
|
||||
|
||||
IFS=$'\n' read -d '' -r -a scripts <<<"$(rbenv-hooks version-origin)" || true
|
||||
for script in "${scripts[@]}"; do
|
||||
# shellcheck disable=SC1090
|
||||
source "$script"
|
||||
done
|
||||
|
||||
if [ -n "$RBENV_VERSION_ORIGIN" ]; then
|
||||
echo "$RBENV_VERSION_ORIGIN"
|
||||
elif [ -n "$RBENV_VERSION" ]; then
|
||||
echo "RBENV_VERSION environment variable"
|
||||
else
|
||||
rbenv-version-file
|
||||
fi
|
||||
@@ -1,83 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: List installed Ruby versions
|
||||
# Usage: rbenv versions [--bare] [--skip-aliases]
|
||||
#
|
||||
# Lists all Ruby versions found in `$RBENV_ROOT/versions/*'.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
unset bare
|
||||
unset skip_aliases
|
||||
# Provide rbenv completions
|
||||
for arg; do
|
||||
case "$arg" in
|
||||
--complete )
|
||||
echo --bare
|
||||
echo --skip-aliases
|
||||
exit ;;
|
||||
--bare ) bare=1 ;;
|
||||
--skip-aliases ) skip_aliases=1 ;;
|
||||
* )
|
||||
rbenv-help --usage versions >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
canonicalize_dir() {
|
||||
{ cd "$1" && pwd -P
|
||||
} 2>/dev/null || echo "$1"
|
||||
}
|
||||
|
||||
versions_dir="${RBENV_ROOT}/versions"
|
||||
if [ -n "$skip_aliases" ]; then
|
||||
versions_dir="$(canonicalize_dir "$versions_dir")"
|
||||
fi
|
||||
|
||||
list_versions() {
|
||||
local path
|
||||
local target
|
||||
shopt -s nullglob
|
||||
for path in "$versions_dir"/*; do
|
||||
if [ -d "$path" ]; then
|
||||
if [ -n "$skip_aliases" ] && [ -L "$path" ]; then
|
||||
target="$(canonicalize_dir "$path")"
|
||||
[ "${target%/*}" != "$versions_dir" ] || continue
|
||||
fi
|
||||
echo "${path##*/}"
|
||||
fi
|
||||
done
|
||||
shopt -u nullglob
|
||||
}
|
||||
|
||||
if [ -n "$bare" ]; then
|
||||
list_versions
|
||||
exit 0
|
||||
fi
|
||||
|
||||
sort_versions() {
|
||||
sed 'h; s/[+-]/./g; s/.p\([[:digit:]]\)/.z.\1/; s/$/.z/; G; s/\n/ /' | \
|
||||
LC_ALL=C sort -t. -k 1,1 -k 2,2n -k 3,3n -k 4,4n -k 5,5n | awk '{print $2}'
|
||||
}
|
||||
|
||||
versions="$(
|
||||
if RBENV_VERSION=system rbenv-which ruby >/dev/null 2>&1; then
|
||||
echo system
|
||||
fi
|
||||
list_versions | sort_versions
|
||||
)"
|
||||
|
||||
if [ -z "$versions" ]; then
|
||||
echo "Warning: no Ruby detected on the system" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
current_version="$(rbenv-version-name || true)"
|
||||
while read -r version; do
|
||||
if [ "$version" == "$current_version" ]; then
|
||||
echo "* $(rbenv-version 2>/dev/null)"
|
||||
else
|
||||
echo " $version"
|
||||
fi
|
||||
done <<<"$versions"
|
||||
@@ -1,38 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Summary: List all Ruby versions that contain the given executable
|
||||
# Usage: rbenv whence [--path] <command>
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --path
|
||||
exec rbenv-shims --short
|
||||
fi
|
||||
|
||||
if [ "$1" = "--path" ]; then
|
||||
print_paths="1"
|
||||
shift
|
||||
else
|
||||
print_paths=""
|
||||
fi
|
||||
|
||||
whence() {
|
||||
local command="$1"
|
||||
rbenv-versions --bare | while read -r version; do
|
||||
path="$(rbenv-prefix "$version")/bin/${command}"
|
||||
if [ -x "$path" ]; then
|
||||
[ "$print_paths" ] && echo "$path" || echo "$version"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
RBENV_COMMAND="$1"
|
||||
if [ -z "$RBENV_COMMAND" ]; then
|
||||
rbenv-help --usage whence >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
result="$(whence "$RBENV_COMMAND")"
|
||||
[ -n "$result" ] && echo "$result"
|
||||
@@ -1,74 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Display the full path to an executable
|
||||
#
|
||||
# Usage: rbenv which <command>
|
||||
#
|
||||
# Displays the full path to the executable that rbenv will invoke when
|
||||
# you run the given command.
|
||||
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
exec rbenv-shims --short
|
||||
fi
|
||||
|
||||
remove_from_path() {
|
||||
local path_to_remove="$1"
|
||||
local path_before
|
||||
local result=":${PATH//\~/$HOME}:"
|
||||
while [ "$path_before" != "$result" ]; do
|
||||
path_before="$result"
|
||||
result="${result//:$path_to_remove:/:}"
|
||||
done
|
||||
result="${result%:}"
|
||||
echo "${result#:}"
|
||||
}
|
||||
|
||||
RBENV_COMMAND="$1"
|
||||
|
||||
if [ -z "$RBENV_COMMAND" ]; then
|
||||
rbenv-help --usage which >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RBENV_VERSION="${RBENV_VERSION:-$(rbenv-version-name)}"
|
||||
|
||||
if [ "$RBENV_VERSION" = "system" ]; then
|
||||
PATH="$(remove_from_path "${RBENV_ROOT}/shims")" \
|
||||
RBENV_COMMAND_PATH="$(command -v "$RBENV_COMMAND" || true)"
|
||||
else
|
||||
RBENV_COMMAND_PATH="${RBENV_ROOT}/versions/${RBENV_VERSION}/bin/${RBENV_COMMAND}"
|
||||
fi
|
||||
|
||||
if [[ ! -x "$RBENV_COMMAND_PATH" && -n "$GEM_HOME" && -x "${GEM_HOME}/bin/${RBENV_COMMAND}" ]]; then
|
||||
RBENV_COMMAND_PATH="${GEM_HOME}/bin/${RBENV_COMMAND}"
|
||||
fi
|
||||
|
||||
IFS=$'\n' read -d '' -r -a scripts <<<"$(rbenv-hooks which)" || true
|
||||
for script in "${scripts[@]}"; do
|
||||
# shellcheck disable=SC1090
|
||||
source "$script"
|
||||
done
|
||||
|
||||
if [ -x "$RBENV_COMMAND_PATH" ]; then
|
||||
echo "$RBENV_COMMAND_PATH"
|
||||
elif [ "$RBENV_VERSION" != "system" ] && [ ! -d "${RBENV_ROOT}/versions/${RBENV_VERSION}" ]; then
|
||||
echo "rbenv: version \`$RBENV_VERSION' is not installed (set by $(rbenv-version-origin))" >&2
|
||||
exit 1
|
||||
else
|
||||
echo "rbenv: $RBENV_COMMAND: command not found" >&2
|
||||
|
||||
versions="$(rbenv-whence "$RBENV_COMMAND" || true)"
|
||||
if [ -n "$versions" ]; then
|
||||
{ echo
|
||||
echo "The \`$1' command exists in these Ruby versions:"
|
||||
echo "$versions" | sed 's/^/ /g'
|
||||
echo
|
||||
} >&2
|
||||
fi
|
||||
|
||||
exit 127
|
||||
fi
|
||||
4
plugins/.gitignore
vendored
Normal file
4
plugins/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
/*
|
||||
!/.gitignore
|
||||
!/version-ext-compat
|
||||
!/python-build
|
||||
213
plugins/python-build/README.md
Normal file
213
plugins/python-build/README.md
Normal file
@@ -0,0 +1,213 @@
|
||||
# python-build
|
||||
|
||||
python-build is a [pyenv](https://github.com/yyuu/pyenv) plugin
|
||||
that provides a `pyenv install` command to compile and install
|
||||
different versions of Python on UNIX-like systems.
|
||||
|
||||
You can also use python-build without pyenv in environments where you
|
||||
need precise control over Python version installation.
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
### Installing as an pyenv plugin (recommended)
|
||||
|
||||
You need nothing to do since python-build is bundled with pyenv by
|
||||
default.
|
||||
|
||||
### Installing as a standalone program (advanced)
|
||||
|
||||
Installing python-build as a standalone program will give you access to
|
||||
the `python-build` command for precise control over Python version
|
||||
installation. If you have pyenv installed, you will also be able to
|
||||
use the `pyenv install` command.
|
||||
|
||||
git clone git://github.com/yyuu/pyenv.git
|
||||
cd pyenv/plugins/python-build
|
||||
./install.sh
|
||||
|
||||
This will install python-build into `/usr/local`. If you do not have
|
||||
write permission to `/usr/local`, you will need to run `sudo
|
||||
./install.sh` instead. You can install to a different prefix by
|
||||
setting the `PREFIX` environment variable.
|
||||
|
||||
To update python-build after it has been installed, run `git pull` in
|
||||
your cloned copy of the repository, then re-run the install script.
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
### Using `pyenv install` with pyenv
|
||||
|
||||
To install a Python version for use with pyenv, run `pyenv install` with
|
||||
the exact name of the version you want to install. For example,
|
||||
|
||||
pyenv install 2.7.4
|
||||
|
||||
Python versions will be installed into a directory of the same name
|
||||
under `~/.pyenv/versions`.
|
||||
|
||||
To see a list of all available Python versions, run `pyenv install --list`.
|
||||
You may also tab-complete available Python
|
||||
versions if your pyenv installation is properly configured.
|
||||
|
||||
### Using `python-build` standalone
|
||||
|
||||
If you have installed python-build as a standalone program, you can use
|
||||
the `python-build` command to compile and install Python versions into
|
||||
specific locations.
|
||||
|
||||
Run the `python-build` command with the exact name of the version you
|
||||
want to install and the full path where you want to install it. For
|
||||
example,
|
||||
|
||||
python-build 2.7.4 ~/local/python-2.7.4
|
||||
|
||||
To see a list of all available Python versions, run `python-build
|
||||
--definitions`.
|
||||
|
||||
Pass the `-v` or `--verbose` flag to `python-build` as the first
|
||||
argument to see what's happening under the hood.
|
||||
|
||||
### Custom definitions
|
||||
|
||||
Both `pyenv install` and `python-build` accept a path to a custom
|
||||
definition file in place of a version name. Custom definitions let you
|
||||
develop and install versions of Python that are not yet supported by
|
||||
python-build.
|
||||
|
||||
See the [python-build built-in
|
||||
definitions](https://github.com/yyuu/pyenv/tree/master/plugins/python-build/share/python-build)
|
||||
as a starting point for custom definition files.
|
||||
|
||||
### Special environment variables
|
||||
|
||||
You can set certain environment variables to control the build
|
||||
process.
|
||||
|
||||
* `TMPDIR` sets the location where python-build stores temporary files.
|
||||
* `PYTHON_BUILD_BUILD_PATH` sets the location in which sources are
|
||||
downloaded and built. By default, this is a subdirectory of
|
||||
`TMPDIR`.
|
||||
* `PYTHON_BUILD_CACHE_PATH`, if set, specifies a directory to use for
|
||||
caching downloaded package files.
|
||||
* `PYTHON_BUILD_MIRROR_URL` overrides the default mirror URL root to one
|
||||
of your choosing.
|
||||
* `PYTHON_BUILD_SKIP_MIRROR`, if set, forces python-build to download
|
||||
packages from their original source URLs instead of using a mirror.
|
||||
* `CC` sets the path to the C compiler.
|
||||
* `CONFIGURE_OPTS` lets you pass additional options to `./configure`.
|
||||
* `MAKE` lets you override the command to use for `make`. Useful for
|
||||
specifying GNU make (`gmake`) on some systems.
|
||||
* `MAKE_OPTS` (or `MAKEOPTS`) lets you pass additional options to
|
||||
`make`.
|
||||
* `PYTHON_CONFIGURE_OPTS` and `PYTHON_MAKE_OPTS` allow you to specify
|
||||
configure and make options for buildling CPython. These variables will
|
||||
be passed to Python only, not any dependent packages (e.g. libyaml).
|
||||
|
||||
### Building as `--enable-shared`
|
||||
|
||||
You can build CPython with `--enable-shared` to install a version with
|
||||
shared object.
|
||||
|
||||
If `--enabled-shared` was found in `PYTHON_CONFIGURE_OPTS` or `CONFIGURE_OPTS`,
|
||||
`python-build` will automatically set `RPATH` to the pyenv's prefix directory.
|
||||
This means you don't have to set `LD_LIBRARY_PATH` or `DYLD_LIBRARY_PATH` for
|
||||
the version(s) installed with `--enable-shared`.
|
||||
|
||||
```sh
|
||||
$ env PYTHON_CONFIGURE_OPTS="--enable-shared` pyenv install 2.7.9
|
||||
```
|
||||
|
||||
### Checksum verification
|
||||
|
||||
If you have the `shasum`, `openssl`, or `sha256sum` tool installed,
|
||||
python-build will automatically verify the SHA2 checksum of each
|
||||
downloaded package before installing it.
|
||||
|
||||
Checksums are optional and specified as anchors on the package URL in
|
||||
each definition. (All bundled definitions include checksums.)
|
||||
|
||||
### Package download mirrors
|
||||
|
||||
python-build will first attempt to download package files from a mirror
|
||||
hosted on Amazon CloudFront. If a package is not available on the
|
||||
mirror, if the mirror is down, or if the download is corrupt,
|
||||
python-build will fall back to the official URL specified in the
|
||||
defintion file.
|
||||
|
||||
You can point python-build to another mirror by specifying the
|
||||
`PYTHON_BUILD_MIRROR_URL` environment variable--useful if you'd like to
|
||||
run your own local mirror, for example. Package mirror URLs are
|
||||
constructed by joining this variable with the SHA2 checksum of the
|
||||
package file.
|
||||
|
||||
If you don't have an SHA2 program installed, python-build will skip the
|
||||
download mirror and use official URLs instead. You can force
|
||||
python-build to bypass the mirror by setting the
|
||||
`PYTHON_BUILD_SKIP_MIRROR` environment variable.
|
||||
|
||||
The official python-build download mirror is provided by [Git Hub Pages](http://yyuu.github.io/pythons/).
|
||||
|
||||
### Package download caching
|
||||
|
||||
You can instruct python-build to keep a local cache of downloaded
|
||||
package files by setting the `PYTHON_BUILD_CACHE_PATH` environment
|
||||
variable. When set, package files will be kept in this directory after
|
||||
the first successful download and reused by subsequent invocations of
|
||||
`python-build` and `pyenv install`.
|
||||
|
||||
The `pyenv install` command defaults this path to `~/.pyenv/cache`, so
|
||||
in most cases you can enable download caching simply by creating that
|
||||
directory.
|
||||
|
||||
### Keeping the build directory after installation
|
||||
|
||||
Both `python-build` and `pyenv install` accept the `-k` or `--keep`
|
||||
flag, which tells python-build to keep the downloaded source after
|
||||
installation. This can be useful if you need to use `gdb` and
|
||||
`memprof` with Python.
|
||||
|
||||
Source code will be kept in a parallel directory tree
|
||||
`~/.pyenv/sources` when using `--keep` with the `pyenv install`
|
||||
command. You should specify the location of the source code with the
|
||||
`PYTHON_BUILD_BUILD_PATH` environment variable when using `--keep` with
|
||||
`python-build`.
|
||||
|
||||
|
||||
## Getting Help
|
||||
|
||||
Please see the [python-build
|
||||
wiki](https://github.com/yyuu/pyenv/wiki) for solutions to
|
||||
common problems.
|
||||
|
||||
If you can't find an answer on the wiki, open an issue on the [issue
|
||||
tracker](https://github.com/yyuu/pyenv/issues). Be sure to
|
||||
include the full build log for build failures.
|
||||
|
||||
|
||||
### License
|
||||
|
||||
(The MIT License)
|
||||
|
||||
* Copyright (c) 2013 Yamashita, Yuu
|
||||
* Copyright (c) 2012 Sam Stephenson
|
||||
|
||||
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.
|
||||
266
plugins/python-build/bin/pyenv-install
Executable file
266
plugins/python-build/bin/pyenv-install
Executable file
@@ -0,0 +1,266 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Install a Python version using python-build
|
||||
#
|
||||
# Usage: pyenv install [-f] [-kvp] <version>
|
||||
# pyenv install [-f] [-kvp] <definition-file>
|
||||
# pyenv install -l|--list
|
||||
#
|
||||
# -l/--list List all available versions
|
||||
# -f/--force Install even if the version appears to be installed already
|
||||
# -s/--skip-existing Skip if the version appears to be installed already
|
||||
#
|
||||
# python-build options:
|
||||
#
|
||||
# -k/--keep Keep source tree in $PYENV_BUILD_ROOT after installation
|
||||
# (defaults to $PYENV_ROOT/sources)
|
||||
# -v/--verbose Verbose mode: print compilation status to stdout
|
||||
# -p/--patch Apply a patch from stdin before building
|
||||
# -g/--debug Build a debug version
|
||||
#
|
||||
# For detailed information on installing Python versions with
|
||||
# python-build, including a list of environment variables for adjusting
|
||||
# compilation, see: https://github.com/yyuu/pyenv#readme
|
||||
#
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
if [ -z "$PYENV_ROOT" ]; then
|
||||
PYENV_ROOT="${HOME}/.pyenv"
|
||||
fi
|
||||
|
||||
# Add `share/python-build/` directory from each pyenv plugin to the list of
|
||||
# paths where build definitions are looked up.
|
||||
shopt -s nullglob
|
||||
for plugin_path in "$PYENV_ROOT"/plugins/*/share/python-build; do
|
||||
PYTHON_BUILD_DEFINITIONS="${PYTHON_BUILD_DEFINITIONS}:${plugin_path}"
|
||||
done
|
||||
export PYTHON_BUILD_DEFINITIONS
|
||||
shopt -u nullglob
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
exec python-build --definitions
|
||||
fi
|
||||
|
||||
# Load shared library functions
|
||||
eval "$(python-build --lib)"
|
||||
|
||||
usage() {
|
||||
# We can remove the sed fallback once pyenv 0.4.0 is widely available.
|
||||
pyenv-help install 2>/dev/null || sed -ne '/^#/!q;s/.//;s/.//;1,4d;p' < "$0"
|
||||
[ -z "$1" ] || exit "$1"
|
||||
}
|
||||
|
||||
definitions() {
|
||||
local query="$1"
|
||||
python-build --definitions | $(type -p ggrep grep | head -1) -F "$query" || true
|
||||
}
|
||||
|
||||
indent() {
|
||||
sed 's/^/ /'
|
||||
}
|
||||
|
||||
unset FORCE
|
||||
unset SKIP_EXISTING
|
||||
unset KEEP
|
||||
unset VERBOSE
|
||||
unset HAS_PATCH
|
||||
unset DEBUG
|
||||
|
||||
parse_options "$@"
|
||||
for option in "${OPTIONS[@]}"; do
|
||||
case "$option" in
|
||||
"h" | "help" )
|
||||
usage 0
|
||||
;;
|
||||
"l" | "list" )
|
||||
echo "Available versions:"
|
||||
definitions | indent
|
||||
exit
|
||||
;;
|
||||
"f" | "force" )
|
||||
FORCE=true
|
||||
;;
|
||||
"s" | "skip-existing" )
|
||||
SKIP_EXISTING=true
|
||||
;;
|
||||
"k" | "keep" )
|
||||
[ -n "${PYENV_BUILD_ROOT}" ] || PYENV_BUILD_ROOT="${PYENV_ROOT}/sources"
|
||||
;;
|
||||
"v" | "verbose" )
|
||||
VERBOSE="-v"
|
||||
;;
|
||||
"p" | "patch" )
|
||||
HAS_PATCH="-p"
|
||||
;;
|
||||
"g" | "debug" )
|
||||
DEBUG="-g"
|
||||
;;
|
||||
"version" )
|
||||
exec python-build --version
|
||||
;;
|
||||
* )
|
||||
usage 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[ "${#ARGUMENTS[@]}" -le 1 ] || usage 1 >&2
|
||||
|
||||
unset VERSION_NAME
|
||||
|
||||
# The first argument contains the definition to install. If the
|
||||
# argument is missing, try to install whatever local app-specific
|
||||
# version is specified by pyenv. Show usage instructions if a local
|
||||
# version is not specified.
|
||||
DEFINITION="${ARGUMENTS[0]}"
|
||||
[ -n "$DEFINITION" ] || DEFINITION="$(pyenv-local 2>/dev/null || true)"
|
||||
[ -n "$DEFINITION" ] || usage 1 >&2
|
||||
|
||||
# Define `before_install` and `after_install` functions that allow
|
||||
# plugin hooks to register a string of code for execution before or
|
||||
# after the installation process.
|
||||
declare -a before_hooks after_hooks
|
||||
|
||||
before_install() {
|
||||
local hook="$1"
|
||||
before_hooks["${#before_hooks[@]}"]="$hook"
|
||||
}
|
||||
|
||||
after_install() {
|
||||
local hook="$1"
|
||||
after_hooks["${#after_hooks[@]}"]="$hook"
|
||||
}
|
||||
|
||||
OLDIFS="$IFS"
|
||||
IFS=$'\n' scripts=(`pyenv-hooks install`)
|
||||
IFS="$OLDIFS"
|
||||
for script in "${scripts[@]}"; do source "$script"; done
|
||||
|
||||
|
||||
# Set VERSION_NAME from $DEFINITION, if it is not already set. Then
|
||||
# compute the installation prefix.
|
||||
[ -n "$VERSION_NAME" ] || VERSION_NAME="${DEFINITION##*/}"
|
||||
[ -n "$DEBUG" ] && VERSION_NAME="${VERSION_NAME}-debug"
|
||||
PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}"
|
||||
|
||||
[ -d "${PREFIX}" ] && PREFIX_EXISTS=1
|
||||
|
||||
# If the installation prefix exists, prompt for confirmation unless
|
||||
# the --force option was specified.
|
||||
if [ -d "${PREFIX}/bin" ]; then
|
||||
if [ -z "$FORCE" ] && [ -z "$SKIP_EXISTING" ]; then
|
||||
echo "pyenv: $PREFIX already exists" >&2
|
||||
read -p "continue with installation? (y/N) "
|
||||
|
||||
case "$REPLY" in
|
||||
y* | Y* ) ;;
|
||||
* ) exit 1 ;;
|
||||
esac
|
||||
elif [ -n "$SKIP_EXISTING" ]; then
|
||||
# Since we know the python version is already installed, and are opting to
|
||||
# not force installation of existing versions, we just `exit 0` here to
|
||||
# leave things happy
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# If PYENV_BUILD_ROOT is set, always pass keep options to python-build.
|
||||
if [ -n "${PYENV_BUILD_ROOT}" ]; then
|
||||
export PYTHON_BUILD_BUILD_PATH="${PYENV_BUILD_ROOT}/${VERSION_NAME}"
|
||||
KEEP="-k"
|
||||
fi
|
||||
|
||||
# Set PYTHON_BUILD_CACHE_PATH to $PYENV_ROOT/cache, if the directory
|
||||
# exists and the variable is not already set.
|
||||
if [ -z "${PYTHON_BUILD_CACHE_PATH}" ] && [ -d "${PYENV_ROOT}/cache" ]; then
|
||||
export PYTHON_BUILD_CACHE_PATH="${PYENV_ROOT}/cache"
|
||||
fi
|
||||
|
||||
# Default PYENV_VERSION to the friendly Python version. (The
|
||||
# CPython installer requires an existing Python installation to run. An
|
||||
# unsatisfied local .python-version file can cause the installer to
|
||||
# fail.)
|
||||
if [[ "${VERSION_NAME}" == [23]"."* ]]; then
|
||||
for version in "${VERSION_NAME%-dev}" "${VERSION_NAME%.*}" "${VERSION_NAME%%.*}"; do
|
||||
PYENV_VERSION="$(pyenv-whence "python${version}" 2>/dev/null | tail -n 1 || true)"
|
||||
if [ -n "${PYENV_VERSION}" ]; then
|
||||
export PYENV_VERSION
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# PyPy/PyPy3 requires existing Python 2.7 to build
|
||||
if [[ "${VERSION_NAME}" == "pypy-"*"-src" ]] || [[ "${VERSION_NAME}" == "pypy3-"*"-src" ]]; then
|
||||
if [ -z "$PYENV_RPYTHON_VERSION" ]; then
|
||||
for version in $(pyenv-versions --bare | sort -r); do
|
||||
if [[ "$version" == "2.7"* ]]; then
|
||||
PYENV_RPYTHON_VERSION="$version"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ -n "$PYENV_RPYTHON_VERSION" ]; then
|
||||
if PYENV_VERSION="$PYENV_RPYTHON_VERSION" pyenv-exec python -c 'import curses' 1>/dev/null 2>&1; then
|
||||
export PYENV_VERSION="$PYENV_RPYTHON_VERSION"
|
||||
else
|
||||
echo "pyenv-install: $VERSION_NAME: PyPy requires \`curses' in $PYENV_RPYTHON_VERSION to build from source." >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "pyenv-install: $VERSION_NAME: PyPy requires Python 2.5, 2.6 or 2.7 to build from source." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Execute `before_install` hooks.
|
||||
for hook in "${before_hooks[@]}"; do eval "$hook"; done
|
||||
|
||||
# Plan cleanup on unsuccessful installation.
|
||||
cleanup() {
|
||||
[ -z "${PREFIX_EXISTS}" ] && rm -rf "$PREFIX"
|
||||
}
|
||||
|
||||
trap cleanup SIGINT
|
||||
|
||||
# Invoke `python-build` and record the exit status in $STATUS.
|
||||
STATUS=0
|
||||
python-build $KEEP $VERBOSE $HAS_PATCH $DEBUG "$DEFINITION" "$PREFIX" || STATUS="$?"
|
||||
|
||||
# Display a more helpful message if the definition wasn't found.
|
||||
if [ "$STATUS" == "2" ]; then
|
||||
{ candidates="$(definitions "$DEFINITION")"
|
||||
here="$(dirname "${0%/*}")/../.."
|
||||
if [ -n "$candidates" ]; then
|
||||
echo
|
||||
echo "The following versions contain \`$DEFINITION' in the name:"
|
||||
echo "$candidates" | indent
|
||||
fi
|
||||
echo
|
||||
echo "See all available versions with \`pyenv install --list'."
|
||||
echo
|
||||
echo -n "If the version you need is missing, try upgrading pyenv"
|
||||
if [ "$here" != "${here#$(brew --prefix 2>/dev/null)}" ]; then
|
||||
printf ":\n\n"
|
||||
echo " brew update && brew upgrade pyenv"
|
||||
elif [ -d "${here}/.git" ]; then
|
||||
printf ":\n\n"
|
||||
echo " cd ${here} && git pull"
|
||||
else
|
||||
printf ".\n"
|
||||
fi
|
||||
} >&2
|
||||
fi
|
||||
|
||||
# Execute `after_install` hooks.
|
||||
for hook in "${after_hooks[@]}"; do eval "$hook"; done
|
||||
|
||||
# Run `pyenv-rehash` after a successful installation.
|
||||
if [ "$STATUS" == "0" ]; then
|
||||
pyenv-rehash
|
||||
else
|
||||
cleanup
|
||||
fi
|
||||
|
||||
exit "$STATUS"
|
||||
90
plugins/python-build/bin/pyenv-uninstall
Executable file
90
plugins/python-build/bin/pyenv-uninstall
Executable file
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Uninstall a specific Python version
|
||||
#
|
||||
# Usage: pyenv uninstall [-f|--force] <version>
|
||||
#
|
||||
# -f Attempt to remove the specified version without prompting
|
||||
# for confirmation. If the version does not exist, do not
|
||||
# display an error message.
|
||||
#
|
||||
# See `pyenv versions` for a complete list of installed versions.
|
||||
#
|
||||
set -e
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
exec pyenv versions --bare
|
||||
fi
|
||||
|
||||
usage() {
|
||||
# We can remove the sed fallback once pyenv 0.4.0 is widely available
|
||||
pyenv-help uninstall 2>/dev/null || sed -ne '/^#/!q;s/.//;s/.//;1,4d;p' < "$0"
|
||||
[ -z "$1" ] || exit "$1"
|
||||
}
|
||||
|
||||
if [ -z "$PYENV_ROOT" ]; then
|
||||
PYENV_ROOT="${HOME}/.pyenv"
|
||||
fi
|
||||
|
||||
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||||
usage 0
|
||||
fi
|
||||
|
||||
unset FORCE
|
||||
if [ "$1" = "-f" ] || [ "$1" = "--force" ]; then
|
||||
FORCE=true
|
||||
shift
|
||||
fi
|
||||
|
||||
[ "$#" -eq 1 ] || usage 1 >&2
|
||||
|
||||
DEFINITION="$1"
|
||||
case "$DEFINITION" in
|
||||
"" | -* )
|
||||
usage 1 >&2
|
||||
;;
|
||||
esac
|
||||
|
||||
declare -a before_hooks after_hooks
|
||||
|
||||
before_uninstall() {
|
||||
local hook="$1"
|
||||
before_hooks["${#before_hooks[@]}"]="$hook"
|
||||
}
|
||||
|
||||
after_uninstall() {
|
||||
local hook="$1"
|
||||
after_hooks["${#after_hooks[@]}"]="$hook"
|
||||
}
|
||||
|
||||
OLDIFS="$IFS"
|
||||
IFS=$'\n' scripts=(`pyenv-hooks uninstall`)
|
||||
IFS="$OLDIFS"
|
||||
for script in "${scripts[@]}"; do source "$script"; done
|
||||
|
||||
|
||||
VERSION_NAME="${DEFINITION##*/}"
|
||||
PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}"
|
||||
|
||||
if [ -z "$FORCE" ]; then
|
||||
if [ ! -d "$PREFIX" ]; then
|
||||
echo "pyenv: version \`$VERSION_NAME' not installed" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -p "pyenv: remove $PREFIX? "
|
||||
case "$REPLY" in
|
||||
y* | Y* ) ;;
|
||||
* ) exit 1 ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for hook in "${before_hooks[@]}"; do eval "$hook"; done
|
||||
|
||||
if [ -d "$PREFIX" ]; then
|
||||
rm -rf "$PREFIX"
|
||||
pyenv-rehash
|
||||
fi
|
||||
|
||||
for hook in "${after_hooks[@]}"; do eval "$hook"; done
|
||||
1838
plugins/python-build/bin/python-build
Executable file
1838
plugins/python-build/bin/python-build
Executable file
File diff suppressed because it is too large
Load Diff
26
plugins/python-build/install.sh
Executable file
26
plugins/python-build/install.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
# Usage: PREFIX=/usr/local ./install.sh
|
||||
#
|
||||
# Installs python-build under $PREFIX.
|
||||
|
||||
set -e
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
if [ -z "${PREFIX}" ]; then
|
||||
PREFIX="/usr/local"
|
||||
fi
|
||||
|
||||
BIN_PATH="${PREFIX}/bin"
|
||||
SHARE_PATH="${PREFIX}/share/python-build"
|
||||
|
||||
mkdir -p "$BIN_PATH" "$SHARE_PATH"
|
||||
|
||||
install -p bin/* "$BIN_PATH"
|
||||
for share in share/python-build/*; do
|
||||
if [ -d "$share" ]; then
|
||||
cp -RPp "$share" "$SHARE_PATH"
|
||||
else
|
||||
install -p -m 0644 "$share" "$SHARE_PATH"
|
||||
fi
|
||||
done
|
||||
5
plugins/python-build/share/python-build/2.1.3
Normal file
5
plugins/python-build/share/python-build/2.1.3
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.2" "http://ftpmirror.gnu.org/readline/readline-6.2.tar.gz#67948acb2ca081f23359d0256e9a271c" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.1.3" "http://www.python.org/ftp/python/2.1.3/Python-2.1.3.tgz#1bcb5bb587948bc38f36db60e15c376009c56c66570e563a08a82bf7f227afb9" ldflags_dirs standard verify_py21
|
||||
#install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#13951be6711438073fbe50843e7f141f" python
|
||||
#install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#62a9f08dd5dc69d76734568a6c040508" python
|
||||
5
plugins/python-build/share/python-build/2.2.3
Normal file
5
plugins/python-build/share/python-build/2.2.3
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.2" "http://ftpmirror.gnu.org/readline/readline-6.2.tar.gz#67948acb2ca081f23359d0256e9a271c" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.2.3" "http://www.python.org/ftp/python/2.2.3/Python-2.2.3.tgz#a8f92e6b89d47359fff0d1fbfe47f104afc77fd1cd5143e7332758b7bc100188" ldflags_dirs standard verify_py22
|
||||
#install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#13951be6711438073fbe50843e7f141f" python
|
||||
#install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#62a9f08dd5dc69d76734568a6c040508" python
|
||||
5
plugins/python-build/share/python-build/2.3.7
Normal file
5
plugins/python-build/share/python-build/2.3.7
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.2" "http://ftpmirror.gnu.org/readline/readline-6.2.tar.gz#67948acb2ca081f23359d0256e9a271c" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.3.7" "http://python.org/ftp/python/2.3.7/Python-2.3.7.tgz#969a9891dce9f50b13e54f9890acaf2be66715a5895bf9b11111f320c205b90e" ldflags_dirs standard verify_py23
|
||||
#install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#13951be6711438073fbe50843e7f141f" python
|
||||
#install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#62a9f08dd5dc69d76734568a6c040508" python
|
||||
5
plugins/python-build/share/python-build/2.4
Normal file
5
plugins/python-build/share/python-build/2.4
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.4" "http://python.org/ftp/python/2.4/Python-2.4.tgz#ff746de0fae8691c082414b42a2bb172da8797e6e8ff66c9a39d2e452f7034e9" ldflags_dirs standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.1
Normal file
5
plugins/python-build/share/python-build/2.4.1
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.4.1" "http://python.org/ftp/python/2.4.1/Python-2.4.1.tgz#f449c3b167389324c525ad99d02376c518ac11e163dbbbc13bc88a5c7101fd00" ldflags_dirs standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.2
Normal file
5
plugins/python-build/share/python-build/2.4.2
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.4.2" "http://python.org/ftp/python/2.4.2/Python-2.4.2.tgz#2653e1846e87fd9b3ee287fefc965c80c54646548b4913a22265b0dd54493adf" ldflags_dirs standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.3
Normal file
5
plugins/python-build/share/python-build/2.4.3
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.4.3" "http://python.org/ftp/python/2.4.3/Python-2.4.3.tgz#985a413932f5e31e6280b37da6b285a3a0b2748c6786643989ed9b23de97e2d5" ldflags_dirs standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.4
Normal file
5
plugins/python-build/share/python-build/2.4.4
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.4.4" "http://python.org/ftp/python/2.4.4/Python-2.4.4.tgz#92be6e20cbc3111d9dd0c016d72ef7914c23b879dc52df7ba28df97afbf12e2e" ldflags_dirs standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.5
Normal file
5
plugins/python-build/share/python-build/2.4.5
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.4.5" "http://python.org/ftp/python/2.4.5/Python-2.4.5.tgz#6ae6f67a388a7f70ed3a20eebab5aae995ee433089d1f1724095c62f4b7389a1" ldflags_dirs standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.6
Normal file
5
plugins/python-build/share/python-build/2.4.6
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.4.6" "http://python.org/ftp/python/2.4.6/Python-2.4.6.tgz#b03f269e826927f05c966cf4f4414f3c93ee2314960859e7f8375e24e82f8b02" ldflags_dirs standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.5
Normal file
5
plugins/python-build/share/python-build/2.5
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.5" "http://python.org/ftp/python/2.5/Python-2.5.tgz#d7bbf42e36003c6065cd19f3e67d283521858515ee923220f654131cebe1d8f2" ldflags_dirs standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
5
plugins/python-build/share/python-build/2.5.1
Normal file
5
plugins/python-build/share/python-build/2.5.1
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.5.1" "http://python.org/ftp/python/2.5.1/Python-2.5.1.tgz#1f5caee846049ca30d996f9403eefdb996295c4af664867e35dcc5eb36e4e7e8" ldflags_dirs standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
5
plugins/python-build/share/python-build/2.5.2
Normal file
5
plugins/python-build/share/python-build/2.5.2
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.5.2" "http://python.org/ftp/python/2.5.2/Python-2.5.2.tgz#834afe8a88adaf623b05ac5dd6700dd5bb5d0d5553fc74ad529359a3496e4ae3" ldflags_dirs standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
5
plugins/python-build/share/python-build/2.5.3
Normal file
5
plugins/python-build/share/python-build/2.5.3
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.5.3" "http://python.org/ftp/python/2.5.3/Python-2.5.3.tgz#c3fee607d20a77dfb72ea2e627eb4d95d25c735603435abde62c57015a0445bd" ldflags_dirs standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
5
plugins/python-build/share/python-build/2.5.4
Normal file
5
plugins/python-build/share/python-build/2.5.4
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.5.4" "http://python.org/ftp/python/2.5.4/Python-2.5.4.tgz#3d3b205611ee503a38a9433d5645a571668420bb219242c7f51af85f05664da6" ldflags_dirs standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
5
plugins/python-build/share/python-build/2.5.5
Normal file
5
plugins/python-build/share/python-build/2.5.5
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.5.5" "http://python.org/ftp/python/2.5.5/Python-2.5.5.tgz#03be1019c4fe93daeb53ba9e4294bf22a8ed4cb854cbd57e24e16f6bf63e2392" ldflags_dirs standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
5
plugins/python-build/share/python-build/2.5.6
Normal file
5
plugins/python-build/share/python-build/2.5.6
Normal file
@@ -0,0 +1,5 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.5.6" "http://python.org/ftp/python/2.5.6/Python-2.5.6.tgz#c2e4377597241b1065677d23327c04d0f41945d370c61a491cc88be367234c5d" ldflags_dirs standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
3
plugins/python-build/share/python-build/2.6.6
Normal file
3
plugins/python-build/share/python-build/2.6.6
Normal file
@@ -0,0 +1,3 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.6.6" "http://python.org/ftp/python/2.6.6/Python-2.6.6.tgz#372f66db46d773214e4619df1794a26449158f626138d4d2141a64c2f017fae1" ldflags_dirs standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.7
Normal file
3
plugins/python-build/share/python-build/2.6.7
Normal file
@@ -0,0 +1,3 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.6.7" "http://python.org/ftp/python/2.6.7/Python-2.6.7.tgz#a8093eace4cfd3e06b05f0deb5d765e3c6cec65908048640a8cadd7a948b3826" ldflags_dirs standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.8
Normal file
3
plugins/python-build/share/python-build/2.6.8
Normal file
@@ -0,0 +1,3 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.6.8" "http://python.org/ftp/python/2.6.8/Python-2.6.8.tgz#5bf02a75ffa2fcaa5a3cabb8201998519b045541975622316888ea468d9512f7" ldflags_dirs standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.9
Normal file
3
plugins/python-build/share/python-build/2.6.9
Normal file
@@ -0,0 +1,3 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.6.9" "http://python.org/ftp/python/2.6.9/Python-2.6.9.tgz#7277b1285d8a82f374ef6ebaac85b003266f7939b3f2a24a3af52f9523ac94db" ldflags_dirs standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7
Normal file
3
plugins/python-build/share/python-build/2.7
Normal file
@@ -0,0 +1,3 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.7" "http://python.org/ftp/python/2.7/Python-2.7.tgz#5670dd6c0c93b0b529781d070852f7b51ce6855615b16afcd318341af2910fb5" ldflags_dirs standard verify_py27 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7-dev
Normal file
3
plugins/python-build/share/python-build/2.7-dev
Normal file
@@ -0,0 +1,3 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_hg "Python-2.7-dev" "https://bitbucket.org/mirror/cpython" "2.7" standard verify_py27 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7.1
Normal file
3
plugins/python-build/share/python-build/2.7.1
Normal file
@@ -0,0 +1,3 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.7.1" "http://python.org/ftp/python/2.7.1/Python-2.7.1.tgz#ca13e7b1860821494f70de017202283ad73b1fb7bd88586401c54ef958226ec8" ldflags_dirs standard verify_py27 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7.2
Normal file
3
plugins/python-build/share/python-build/2.7.2
Normal file
@@ -0,0 +1,3 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.7.2" "http://python.org/ftp/python/2.7.2/Python-2.7.2.tgz#1d54b7096c17902c3f40ffce7e5b84e0072d0144024184fff184a84d563abbb3" ldflags_dirs standard verify_py27 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7.3
Normal file
3
plugins/python-build/share/python-build/2.7.3
Normal file
@@ -0,0 +1,3 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.7.3" "http://python.org/ftp/python/2.7.3/Python-2.7.3.tgz#d4c20f2b5faf95999fd5fecb3f7d32071b0820516224a6d2b72932ab47a1cb8e" ldflags_dirs standard verify_py27 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7.4
Normal file
3
plugins/python-build/share/python-build/2.7.4
Normal file
@@ -0,0 +1,3 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.7.4" "http://python.org/ftp/python/2.7.4/Python-2.7.4.tgz#98c5eb9c8e65effcc0122112ba17a0bce880aa23ecb560af56b55eb55632b81a" ldflags_dirs standard verify_py27 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7.5
Normal file
3
plugins/python-build/share/python-build/2.7.5
Normal file
@@ -0,0 +1,3 @@
|
||||
#require_gcc
|
||||
install_package "readline-6.3" "http://ftpmirror.gnu.org/readline/readline-6.3.tar.gz#56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43" standard --if has_broken_mac_readline
|
||||
install_package "Python-2.7.5" "http://python.org/ftp/python/2.7.5/Python-2.7.5.tgz#8e1b5fa87b91835afb376a9c0d319d41feca07ffebc0288d97ab08d64f48afbf" ldflags_dirs standard verify_py27 ensurepip
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user