kopia lustrzana https://github.com/jupyterhub/repo2docker
Porównaj commity
708 Commity
Autor | SHA1 | Data |
---|---|---|
Erik Sundell | af6d3e8448 | |
pre-commit-ci[bot] | 3c204f3b08 | |
Erik Sundell | d2f467cef6 | |
pre-commit-ci[bot] | 0e7907f86b | |
Simon Li | 243669b928 | |
Simon Li | d4bb9c14da | |
Erik Sundell | f667caf49c | |
Erik Sundell | 755a32bc2a | |
Erik Sundell | 91d3f150e5 | |
Erik Sundell | f121a0d481 | |
Erik Sundell | 57e4b3f687 | |
Erik Sundell | 920ddd86ac | |
YuviPanda | 601fa25291 | |
YuviPanda | 756e7d1a98 | |
YuviPanda | dd9f6ad2de | |
Sylvain Corlay | 01d818b974 | |
Erik Sundell | a20dd1cf97 | |
pre-commit-ci[bot] | f2c1cb7a8c | |
pre-commit-ci[bot] | 625b296773 | |
Yuvi Panda | 3221560bb1 | |
Simon Li | 56299a2312 | |
Erik Sundell | c806c1c1c2 | |
dependabot[bot] | 767047c84c | |
Simon Li | 237375f3a4 | |
Simon Li | 6fe9ee6763 | |
Simon Li | 6f92fa0e84 | |
Simon Li | 3505ad7c8b | |
pre-commit-ci[bot] | 089e919e19 | |
Timo Rothenpieler | fa8394b09b | |
Timo Rothenpieler | 2eac520042 | |
Min RK | 6aad2bcce2 | |
Yuvi Panda | b3b8db7954 | |
Yuvi Panda | 8f0d9aaf9e | |
Yuvi Panda | abe7c15b3a | |
Samuel Gaist | 77df191536 | |
Samuel Gaist | 09e503c4e6 | |
Samuel Gaist | a51235f9a5 | |
Samuel Gaist | d6670f4378 | |
Samuel Gaist | 3028d07182 | |
Samuel Gaist | 6b8b2334e7 | |
Simon Li | 0e02889faf | |
Erik Sundell | 7713f2a82f | |
Erik Sundell | 40682d762a | |
Erik Sundell | 809f511799 | |
pre-commit-ci[bot] | 97ce87c079 | |
dependabot[bot] | 6dc8dee823 | |
dependabot[bot] | 766f4b8eb4 | |
Cheng-Yen Liu | 066e951a7d | |
haarli | 38f6e0acd1 | |
haarli | 24fa50118e | |
Min RK | c6f97e55c1 | |
pre-commit-ci[bot] | 42ffce107d | |
Hiroyuki Sato | 570c11769b | |
Erik Sundell | 57d229eb19 | |
Simon Li | 72cfc12a8d | |
Yuvi Panda | 8bdf681a4a | |
Simon Li | f4591425b4 | |
Simon Li | 4b0c7d9bfd | |
Simon Li | 2e26e773b7 | |
Simon Li | 3ec7d41bce | |
Yuvi Panda | aa57e01d24 | |
Simon Li | fc7de2768b | |
Simon Li | 1fc8f192ee | |
Simon Li | ebdd121b05 | |
Simon Li | 74a94cf2b0 | |
Simon Li | efb4cd3bbc | |
Yuvi Panda | de496f893b | |
Simon Li | 2ad8eebd41 | |
Yuvi Panda | 8c32db9987 | |
YuviPanda | 18ab230b0c | |
YuviPanda | 654199c705 | |
Simon Li | 94a0043883 | |
Simon Li | 8f0d763ec4 | |
Erik Sundell | d0ad8d3715 | |
pre-commit-ci[bot] | 714a26e11d | |
Erik Sundell | 129f624120 | |
dependabot[bot] | 77289c4719 | |
Erik Sundell | 4cd89f5328 | |
dependabot[bot] | 8ee344ef30 | |
Erik Sundell | 580101abd9 | |
Erik Sundell | 2d82547742 | |
dependabot[bot] | c7d5094e06 | |
dependabot[bot] | df22b13f94 | |
Erik Sundell | 3fe6c75a88 | |
Erik Sundell | c53971b1b5 | |
Simon Li | d414e994fc | |
Sylvain Corlay | fbe7ebad53 | |
Yuvi Panda | df111a06ee | |
Simon Li | e0609adca8 | |
Frédéric Collonval | e231c1a619 | |
Yamato Matsuoka | 6a0d76a308 | |
Min RK | 247e9535b1 | |
YuviPanda | 0205c112b9 | |
YuviPanda | e586b26110 | |
Yuvi Panda | fd22a4f49c | |
Yuvi Panda | 5f12217705 | |
pre-commit-ci[bot] | fcdf7c424e | |
YuviPanda | 119cff990f | |
Min RK | 0ea6f7d85e | |
pre-commit-ci[bot] | 18e76f9d38 | |
YuviPanda | 49bdc6c048 | |
YuviPanda | 5947b756ba | |
YuviPanda | 9f1a6406b6 | |
YuviPanda | 0dfce76775 | |
YuviPanda | a0fd8743b2 | |
YuviPanda | 6c719bd671 | |
YuviPanda | 3fb91c7f56 | |
YuviPanda | 0a756e72dd | |
YuviPanda | 5572e37a7d | |
YuviPanda | 1224084345 | |
Min RK | 8500d479a5 | |
Min RK | e8eab153e7 | |
Yuvi Panda | 671c423421 | |
Min RK | e1051c3cb8 | |
Erik Sundell | 8bb242d40c | |
Erik Sundell | 90252fd30d | |
Simon Li | f2247b8814 | |
Erik Sundell | 07be88950b | |
Frédéric Collonval | 1e31b117d8 | |
Erik Sundell | 05ac1ec274 | |
Erik Sundell | 2775e14161 | |
Yuvi Panda | 6d3b80cbdd | |
Min RK | be74e4ae42 | |
Min RK | deaaeb2ef7 | |
pre-commit-ci[bot] | 8efd8c5b26 | |
pre-commit-ci[bot] | ad028f665f | |
YuviPanda | f13d80e51d | |
dependabot[bot] | 44e4697caf | |
Simon Li | 6250c069a8 | |
Simon Li | 4ae9cfa5bf | |
Min RK | 2f46bccb7b | |
Simon Li | 7112d178c0 | |
Kacper Kowalik (Xarthisius) | 7bf02d8101 | |
Erik Sundell | d3c74414cf | |
Min RK | 39d203cc80 | |
Erik Sundell | c5be2a7e3a | |
Erik Sundell | 3068954c4d | |
Erik Sundell | f87c86c625 | |
YuviPanda | 5f383fd8cd | |
Erik Sundell | 1bb1d8f87c | |
dependabot[bot] | 30f3cb368d | |
Erik Sundell | 2c6d20c3c7 | |
Erik Sundell | 1e7cd82722 | |
Erik Sundell | 7e1c89fde7 | |
Min RK | 333ec83f3e | |
Min RK | e52f9b4965 | |
pre-commit-ci[bot] | 438e696c80 | |
dependabot[bot] | b4b8629a45 | |
Min RK | 43ff7bbc4d | |
Philip Durbin | 48f4cc630e | |
Min RK | 0d84b9e1c4 | |
Min RK | f9b912c7a6 | |
Yuvi Panda | ebc7816e5b | |
Yuvi Panda | 049320301c | |
Yuvi Panda | b52ea663ac | |
Yuvi Panda | 5bcbe9b453 | |
dependabot[bot] | 6b68e5aaf9 | |
YuviPanda | 5894f63b87 | |
Sylvain Corlay | de908c9213 | |
Min RK | 70a2de4e12 | |
Min RK | 1e1d6ac20f | |
YuviPanda | f848c81073 | |
Philip Durbin | 938d91c9ca | |
Min RK | 21fa80fad6 | |
pre-commit-ci[bot] | 39b563c47d | |
Simon Li | 4c6b5bc7f8 | |
Min RK | 1faf4b88fc | |
Min RK | e57bd23950 | |
Min RK | 66b8765c69 | |
Min RK | c1d12ad06d | |
Min RK | 0a4cd197e5 | |
Min RK | 847fdffe01 | |
Min RK | 52be2d3d64 | |
Min RK | 1a2438d34e | |
Min RK | ceb25f85f2 | |
Yuvi Panda | 8c0f49ed89 | |
Erik Sundell | 6d6e5ffd1b | |
Min RK | 5f6d76764b | |
Min RK | 0f328e67e7 | |
Simon Li | 5e8ee1ca7d | |
Simon Li | 1e61d4f1ae | |
Roberto Di Remigio Eikås | b84abf3b77 | |
Min RK | 62f5dbfe4e | |
Min RK | abe2cc8598 | |
Min RK | fbab2cd330 | |
dependabot[bot] | 6e92cdd05b | |
Min RK | 738a56dcd5 | |
Min RK | 957a4db136 | |
Min RK | 12f94dc69e | |
Min RK | 18cbf55b90 | |
Min RK | a9d77e21f1 | |
Min RK | b8c76448a3 | |
Min RK | ca51f8fc00 | |
Min RK | 13ee5f4075 | |
pre-commit-ci[bot] | 3e6951c02e | |
Min RK | 4bffe3df6a | |
Min RK | fc2ce1f3aa | |
Min RK | 45b5080f88 | |
Simon Li | c45374d74a | |
Jeremy Tuloup | 32fada9b0e | |
Jeremy Tuloup | 971caee73f | |
Simon Li | 326dc92d6b | |
Jeremy Tuloup | 498cb68210 | |
Jeremy Tuloup | 6e508d2b23 | |
Tim | 348efa2efe | |
Sylvain Corlay | 75a8bd74b2 | |
YuviPanda | a6ccf815cc | |
pre-commit-ci[bot] | 01c142b8c2 | |
YuviPanda | 0a3846f5d9 | |
Yuvi Panda | 99125ab179 | |
Erik Sundell | 49162fc11a | |
Simon Li | 8f818645f9 | |
Simon Li | cdd0d56342 | |
Erik Sundell | cde0126de0 | |
pre-commit-ci[bot] | 2308cfe232 | |
Simon Li | 8f3f57ada7 | |
Simon Li | 064d91ae22 | |
Simon Li | 33eee4a440 | |
Simon Li | e774709744 | |
Simon Li | d0d55c07ba | |
Simon Li | 268e86b0f7 | |
Yuvi Panda | c6318105d2 | |
Yuvi Panda | a123586f15 | |
Simon Li | e498f1df47 | |
Simon Li | 0fffbf8873 | |
Erik Sundell | fabf178d0b | |
Erik Sundell | fb6a2d5297 | |
Erik Sundell | ec6f28408b | |
pre-commit-ci[bot] | aa07af045c | |
Simon Li | 364bf2eae3 | |
Florian Kohrt | b72fde0732 | |
pre-commit-ci[bot] | e956501d67 | |
Chris Holdgraf | 4a5ff3c37e | |
pre-commit-ci[bot] | 4eaf096bf9 | |
Chris Holdgraf | 5e75258f2f | |
Yuvi Panda | 2b17eca207 | |
dependabot[bot] | dc337e9e36 | |
Bartosz Kardas | 0b9154ae2b | |
Bartosz Kardas | b85df8f993 | |
Bartosz Kardas | 52e80769b0 | |
Bartosz Kardas | 21ad4cac54 | |
Bartosz Kardas | 76731c885b | |
Bartosz Kardas | c3d257519b | |
Bartosz Kardas | 8a359f9c00 | |
YuviPanda | aae6a71621 | |
YuviPanda | 90c375c5f7 | |
Bartosz Kardas | 389334a4a3 | |
YuviPanda | 4d83abc2df | |
Yuvi Panda | f776d8efcb | |
Yuvi Panda | c21374d305 | |
YuviPanda | 7eb143eab0 | |
YuviPanda | b58fd1508d | |
YuviPanda | 9ff14c1907 | |
YuviPanda | 446e67820e | |
YuviPanda | f35a948e75 | |
YuviPanda | 20b0815257 | |
YuviPanda | 8086937445 | |
YuviPanda | b724c02c6a | |
YuviPanda | 592ccb7596 | |
YuviPanda | 5058eca99f | |
YuviPanda | ad5ecaa865 | |
Min RK | ab4c4f2a19 | |
pre-commit-ci[bot] | 485a8ad097 | |
Yuvi Panda | d8942c47fa | |
Erik Sundell | 98aceac76d | |
Erik Sundell | e6a66316ab | |
Erik Sundell | 9be3ac697c | |
Erik Sundell | 37ce79a5d4 | |
Erik Sundell | 430565faf7 | |
Min RK | 31e9722c82 | |
Min RK | 8802ca2a30 | |
Min RK | d5f291bec1 | |
Min RK | 2a9dab13f8 | |
Min RK | 98724fb255 | |
Min RK | b841dea4ac | |
Frankie Robertson | e99a106171 | |
Frankie Robertson | 61b76f622d | |
Simon Li | b4fee8e3a7 | |
Sylvain Corlay | 3e5a64f82f | |
Simon Li | ecd7c5d1c0 | |
Erik Sundell | ff586d0e10 | |
Yuvi Panda | b6098c02f3 | |
pre-commit-ci[bot] | ae3aeb6dc5 | |
Erik Sundell | 94bd21e16e | |
pre-commit-ci[bot] | 27c2b403db | |
Erik Sundell | 1926795c8c | |
Erik Sundell | 15a1fb6e2d | |
pre-commit-ci[bot] | 5a93542321 | |
Erik Sundell | ce44f98c9a | |
Erik Sundell | eab0b50fc4 | |
Erik Sundell | 89f2b61db6 | |
Erik Sundell | 3d05b32dee | |
Min RK | e7c93b0fc8 | |
Min RK | 757799516d | |
Min RK | bd02e2e997 | |
Min RK | 6b0291551d | |
Min RK | 2da784ca21 | |
Min RK | 38f5aceb45 | |
Min RK | f6ecb28e5e | |
Erik Sundell | 9a80e95600 | |
Erik Sundell | 442951d010 | |
Erik Sundell | ea1fbcd440 | |
Erik Sundell | 8a28264b97 | |
Erik Sundell | 4a5b8541e7 | |
Erik Sundell | f3284bfcd1 | |
Erik Sundell | 224633af93 | |
Erik Sundell | 55a9cd81f8 | |
Erik Sundell | 84408ef12b | |
Erik Sundell | 2f13af8a29 | |
Nicholas Bollweg | 23e195f363 | |
Nicholas Bollweg | df733fc81b | |
Nicholas Bollweg | 803a1c223b | |
Erik Sundell | be7fc8a11a | |
Erik Sundell | b3234b54f0 | |
Min RK | b314ba90cd | |
Min RK | 6826d72aa2 | |
Erik Sundell | 0f5ee7049a | |
pre-commit-ci[bot] | 5f5e3bbbb4 | |
Erik Sundell | 2dba862d5b | |
Erik Sundell | 59a9663fbd | |
Erik Sundell | 7ffeae734a | |
Erik Sundell | 7ea7454049 | |
Erik Sundell | 8b9b05b32c | |
Erik Sundell | 85919afa99 | |
Erik Sundell | 9559cf2517 | |
Erik Sundell | b4a1b50984 | |
Erik Sundell | 0b53691786 | |
Erik Sundell | 68a0331ea2 | |
Min RK | e9ad8fdb41 | |
Simon Li | e0d5b9bb63 | |
Simon Li | d4567417ea | |
Yuvi Panda | 380f8177d0 | |
Erik Sundell | 1e4bc50a77 | |
Erik Sundell | af076ca7de | |
Erik Sundell | 3ea45d1258 | |
Erik Sundell | 6e89647dbc | |
Erik Sundell | 42bb1b384a | |
Simon Li | 6acab5d1f9 | |
Simon Li | d7be04efb5 | |
Jeremy Tuloup | f572c3a9de | |
Erik Sundell | a6af244605 | |
Erik Sundell | f1b1339507 | |
Erik Sundell | f69d65feb9 | |
Erik Sundell | 2c0b14c7da | |
Erik Sundell | f8d0efe490 | |
Erik Sundell | 5ffbe65bec | |
Erik Sundell | 87dd7e1283 | |
Erik Sundell | b18adce53f | |
Erik Sundell | 3034a09a91 | |
Yuvi Panda | 27fbab66c0 | |
Erik Sundell | 4540bf1cc9 | |
Erik Sundell | c981b3baa7 | |
Erik Sundell | 11f2d2dc02 | |
Erik Sundell | f62d4e0f58 | |
Erik Sundell | d29af17b2e | |
Erik Sundell | 55f4663329 | |
Erik Sundell | b927ebdf13 | |
Erik Sundell | f65776b2f3 | |
Erik Sundell | f3b0e18c0b | |
Erik Sundell | 77c8ef4adb | |
Erik Sundell | de4b71ea37 | |
Erik Sundell | e31e33544a | |
Erik Sundell | 313d495f32 | |
Erik Sundell | 67f77f028c | |
Erik Sundell | a568c3b8e4 | |
Erik Sundell | d1a4f43b08 | |
Erik Sundell | 2cc0ea6a16 | |
Erik Sundell | b3de499659 | |
Erik Sundell | 7e517cfb0a | |
Erik Sundell | fc08ee1c58 | |
Erik Sundell | bdec455ec3 | |
Simon Li | 1735925116 | |
Tim Head | 0345a86143 | |
Min RK | 1841bf7130 | |
Yuvi Panda | 7580a30314 | |
Min RK | ed82b83eba | |
Simon Li | 0f52247b93 | |
Min RK | 996beea228 | |
Simon Li | c5246cd963 | |
Simon Li | 2d9c31ac19 | |
Min RK | a8735e9c07 | |
Min RK | 0693fae442 | |
Min RK | a74369c5c7 | |
Min RK | 88acca0e8a | |
Min RK | 8bf808bd4c | |
Min RK | 2af4d3d46b | |
Min RK | cac960d10d | |
Simon Li | d415115b66 | |
YuviPanda | d695b3dcdf | |
YuviPanda | be39a1a3f2 | |
YuviPanda | d6f5c95e52 | |
YuviPanda | 5738d4161c | |
Yuvi Panda | e725b079da | |
Yuvi Panda | 42bb1a0383 | |
Simon Li | 7eff2e6c6c | |
Simon Li | 671636b9f1 | |
Sylvain Corlay | 8a4c48e88f | |
Min RK | 18512fe6d9 | |
YuviPanda | b97db1066d | |
YuviPanda | ffdf544ee4 | |
Yuvi Panda | 484b29b6c4 | |
wilhelmfrank | d97e32b433 | |
Yuvi Panda | 5b688f48a1 | |
Erik Sundell | b1bcbc0f99 | |
YuviPanda | 0b76608208 | |
Erik Sundell | ae8ed290b9 | |
Yuvi Panda | 57a95a3614 | |
Aaron Curtis | cae431d115 | |
YuviPanda | 8af47e9985 | |
YuviPanda | 28035d6426 | |
YuviPanda | e51eae9287 | |
Yuvi Panda | a098f95dc4 | |
YuviPanda | 8ed4c96a8e | |
Yuvi Panda | 232dddac50 | |
YuviPanda | dfa23f6306 | |
YuviPanda | 9d89d6bd69 | |
YuviPanda | a9443f04fe | |
YuviPanda | 2819a6d1b4 | |
YuviPanda | 9fa096d0f6 | |
YuviPanda | def4009a6b | |
YuviPanda | 9c335a5e9e | |
YuviPanda | ba82209e67 | |
YuviPanda | c1ce8fd189 | |
YuviPanda | d72ac15037 | |
YuviPanda | c123d7bf32 | |
YuviPanda | 4ccbdddeb5 | |
YuviPanda | 13250c73d1 | |
YuviPanda | 22167c35f0 | |
YuviPanda | 965cb15b99 | |
Yuvi Panda | 0f0fca19a0 | |
Min RK | e7524a7b4b | |
Yuvi Panda | c4e01b3a8d | |
Dara Adib | 56bf03811e | |
Dara Adib | 991c249141 | |
Dara Adib | 49d47b855e | |
Ümit Seren | 3ee04e34a3 | |
Min RK | 61247bec16 | |
Min RK | 5df775aac6 | |
Gerald Manipon | c09d66fea6 | |
Gerald Manipon | e75c664edb | |
Gerald Manipon | 304b1430a5 | |
Gerald Manipon | 051c9d36a3 | |
Gerald Manipon | 723e5b6907 | |
Min RK | 1d218afd38 | |
YuviPanda | 76aacbf3ab | |
YuviPanda | 5444850bc4 | |
Min RK | 5f86ef6269 | |
Min RK | ddcb532a56 | |
YuviPanda | 672c21ff82 | |
YuviPanda | 34a7e33148 | |
Andrei Plamada | 190f4cfba8 | |
YuviPanda | f5759cbdac | |
Yuvi Panda | 66f608e207 | |
Simon Li | ec993498ab | |
Min RK | 5cfd798008 | |
Simon Li | d8c1978134 | |
yoogottamk | c8d86b9b3d | |
Simon Li | c83efb0427 | |
Simon Li | 46441c0ec4 | |
Burt Holzman | 41f3478331 | |
Simon Li | 5cee982971 | |
Simon Li | 29e7f56118 | |
Simon Li | e40242c067 | |
Simon Li | 753af0ea1c | |
Min RK | 47ea95a743 | |
Min RK | 42f83f0af4 | |
Min RK | 84220028bd | |
Min RK | f2f8bb666e | |
Simon Li | 8c21b96401 | |
Min RK | b8a2c88501 | |
Min RK | 710d533f75 | |
Min RK | 7f89926e51 | |
Sylvain Corlay | 25bc273a17 | |
Yuvi Panda | cbc7699cd8 | |
Simon Li | fd7597c50e | |
Simon Li | a856862ead | |
Yuvi Panda | 2c27b09a46 | |
Yuvi Panda | a5df995532 | |
Min RK | d728a64dd9 | |
YuviPanda | 3af38557ad | |
YuviPanda | 885cb464b6 | |
Min RK | 8ab5c81245 | |
Min RK | e3d0a9ae8e | |
Sylvain Corlay | a0f83c012d | |
YuviPanda | 6ab41efd4d | |
Simon Li | 813d28bfdb | |
Min RK | 3f07830957 | |
YuviPanda | 9066d079d0 | |
Min RK | 945c45299f | |
YuviPanda | f6737cfff5 | |
Yuvi Panda | bf99b93dae | |
Min RK | ad0034cb2f | |
Min RK | 19acf46392 | |
Sylvain Corlay | 65a36cc3f7 | |
Sylvain Corlay | 374efff3dc | |
Sylvain Corlay | 5f82b2c8b0 | |
Wolf Vollprecht | 7d4ac3b960 | |
Wolf Vollprecht | e12ffc4a99 | |
Wolf Vollprecht | b6091c9265 | |
Wolf Vollprecht | c96a230962 | |
Wolf Vollprecht | 245fc1b939 | |
Sylvain Corlay | 089f6a87a5 | |
Wolf Vollprecht | 3c2ded30be | |
Wolf Vollprecht | 7c4f2a5b4f | |
Wolf Vollprecht | 7ad3c177d2 | |
Wolf Vollprecht | abc1fe98c8 | |
Madhur Tandon | 22d4781809 | |
Madhur Tandon | 2d27bb2af6 | |
Madhur Tandon | d2a2c070e7 | |
Madhur Tandon | b08c7dc3b6 | |
Madhur Tandon | e12c436af2 | |
Madhur Tandon | 8926cdc968 | |
Madhur Tandon | 9c109f95b4 | |
Madhur Tandon | 2e702f0248 | |
Madhur Tandon | 3288bca6a4 | |
Madhur Tandon | 6cc7567f2e | |
Madhur Tandon | f9388c3200 | |
Madhur Tandon | 2bfbf44efa | |
Madhur Tandon | f508bf167e | |
Simon Li | a37a205c0e | |
Simon Li | aa17545a9b | |
YuviPanda | c04fff30cd | |
Andrei V. Plamada | b2b0f758ff | |
Simon Li | 43525352a7 | |
Simon Li | 457f718386 | |
Andrei Plamada | 8a817eba97 | |
YuviPanda | 7fd9a3d25f | |
YuviPanda | 3cb3fbf853 | |
YuviPanda | 05e504a7ce | |
YuviPanda | ceb4f8ac4f | |
YuviPanda | e2aefcfbdd | |
YuviPanda | 54636c6ecf | |
YuviPanda | dbb5ff7c7d | |
YuviPanda | 8d194b2d1a | |
YuviPanda | 7c36566bf2 | |
YuviPanda | c398de3d88 | |
YuviPanda | 0b76e9ea44 | |
YuviPanda | 5246a0e7c2 | |
YuviPanda | ffbace3b38 | |
YuviPanda | d75c0079ad | |
YuviPanda | 3ea55e9205 | |
YuviPanda | 685c8a0544 | |
YuviPanda | fd6314d07d | |
Tim Head | d688997aee | |
Tim Head | 020160baf0 | |
Simon Li | 62c0de2282 | |
Simon Li | da20e9f421 | |
Simon Li | 006b0179bf | |
YuviPanda | 054b602b13 | |
YuviPanda | bca7d849bd | |
YuviPanda | 5d173a349d | |
YuviPanda | 1ed05b59c6 | |
YuviPanda | 290b008ac5 | |
Yuvi Panda | 4aa1d154a1 | |
YuviPanda | 476a25998b | |
Timo Rothenpieler | ad1dea14ba | |
Timo Rothenpieler | 9f4827132f | |
Tim Head | 1146d4fbde | |
Tim Head | 540001edd8 | |
YuviPanda | e5e00bd1bf | |
YuviPanda | 0ba4c6851d | |
Min RK | 4d6dd532ab | |
YuviPanda | 2f1fc81dff | |
YuviPanda | 730e622e3f | |
Timo Rothenpieler | 86df151414 | |
Timo Rothenpieler | fa512e76bd | |
Timo Rothenpieler | cf8f3b9195 | |
Min RK | 00769c0fb2 | |
Min RK | 7aee21fd05 | |
Simon Li | 3b02cc4702 | |
YuviPanda | 27399081ff | |
YuviPanda | 6db7273423 | |
Simon Li | 4da2e1e715 | |
Min RK | 6d37487e0a | |
Min RK | 06c23b83a2 | |
Chris Holdgraf | 3eef69f745 | |
Min RK | f77e6ee916 | |
Min RK | 0308f79f98 | |
Tim Head | a07fe38f77 | |
Chris Holdgraf | d2bdb90786 | |
Chris Holdgraf | b83ebe9920 | |
Chris Holdgraf | 7376dfcd80 | |
Chris Holdgraf | 1ffb05f02e | |
Simon Li | 4f3b0d050f | |
Chris Holdgraf | ce898da03c | |
Chris Holdgraf | d9dbd2b08a | |
Min RK | 5b5b759a4e | |
Sylvain Corlay | 92999d64aa | |
Min RK | f1d01b6b67 | |
Min RK | 90c0e8958c | |
Simon Li | f7cadcd5f0 | |
Yuvi Panda | 92a00b2c18 | |
Yuvi Panda | 6e2a6af959 | |
Erik Sundell | c73321cfda | |
Simon Li | 2ea48cbaca | |
Erik Sundell | aaf5f5d75f | |
Simon Li | 57466d5c95 | |
Simon Li | 4c89e51d7a | |
Simon Li | 9703a12e6d | |
Simon Li | b3fb4cccaa | |
Simon Li | 3ce97e207d | |
Simon Li | b209342356 | |
Simon Li | bd58a4a7d4 | |
Simon Li | b45db5acf9 | |
magnush0lm | 72ebf8acf1 | |
jgart | 2c81b6059b | |
jgart | 13976264ee | |
Simon Li | ca769b373c | |
Simon Li | c6f09ea2e4 | |
Simon Li | e6f4966881 | |
Simon Li | 0468715500 | |
Simon Li | 97ca881a01 | |
Simon Li | 7fecae7763 | |
Erik Sundell | 297c7955d2 | |
Yuvi Panda | a9b6fbe7b2 | |
Simon Li | db3ba82e88 | |
Simon Li | 805eddd91a | |
Simon Li | 0d20a9f7e2 | |
Simon Li | 7d682f7576 | |
Simon Li | 0c1fdeb15e | |
Simon Li | 06ecc5e9ed | |
Simon Li | efc37c4c5b | |
Erik Sundell | f3906be35b | |
Erik Sundell | d1bbffac30 | |
Simon Li | e7f4667aec | |
Simon Li | c62ae8076f | |
Simon Li | afd64f8bf2 | |
Simon Li | 4ab4b17ef7 | |
Simon Li | f8a16d42ef | |
Simon Li | 1541ae6ca9 | |
Erik Sundell | 231cf1cb13 | |
Erik Sundell | 43891a6f60 | |
Jack Homan | e783a9aef5 | |
Simon Li | df65135795 | |
Simon Li | 470443cc39 | |
Simon Li | dc03809fa2 | |
Min RK | ab1e33bc4c | |
Min RK | 6966847bf9 | |
Yuvi Panda | f07111c4a5 | |
Anton Akhmerov | 8db656d1ce | |
Min RK | e9c22422f6 | |
Min RK | 164efd31ab | |
Simon Li | eb75209019 | |
Simon Li | cbab82b7ce | |
YuviPanda | 6d1dc4a77b | |
YuviPanda | e7e4dd9ee3 | |
YuviPanda | 072d706eb6 | |
YuviPanda | 54f2e51058 | |
Yuvi Panda | de7468d78f | |
Simon Li | 2e4140cd6f | |
Simon Li | 38e7e7b92e | |
YuviPanda | df92b99cdb | |
YuviPanda | ef1497dddf | |
YuviPanda | cbda2eba2b | |
YuviPanda | 1d53990f34 | |
Yuvi Panda | 520c7add7d | |
Simon Li | d47b74492f | |
Simon Li | 5778ed0381 | |
Simon Li | e32c7b02df | |
Simon Li | 0e7e0f003e | |
Simon Li | 4ed6685dc9 | |
Simon Li | 5c2c8f7385 | |
Simon Li | 52b672a17a | |
Simon Li | 4647dd0702 | |
Simon Li | ad5701dd3a | |
Simon Li | 00df21069e | |
Simon Li | 8215f0b065 | |
Simon Li | 17af0c7293 | |
Simon Li | 4a06ef19d9 | |
Simon Li | a73595ce4c | |
Simon Li | 787d1d3aeb | |
Simon Li | b6bead74cd | |
Simon Li | c521c3c950 | |
Simon Li | 9ac8a8314c | |
Simon Li | 2864b692ef | |
Simon Li | 0610edfc20 | |
Simon Li | cf35f51a38 | |
Yuvi Panda | 76f55c5a25 | |
Min RK | ea90ae23d3 | |
Yuvi Panda | bbb88aceb8 | |
YuviPanda | b18188d5ed | |
Yuvi Panda | bf35a5cfc2 | |
Yuvi Panda | 99eb8819b9 | |
Sarah Gibson | 767f95fa06 | |
dependabot[bot] | cf6c35afd7 | |
Florian Kohrt | f8d1a19fee | |
Tim Head | 73ab48a42d | |
Mridul Seth | a833c3949b | |
Mridul Seth | 3112a56f37 | |
Mridul Seth | 3edc76342c | |
Tim Head | 0eb7260f47 | |
Tim Head | 1d07b643dc | |
dependabot[bot] | 033c02d07b | |
Kyungdahm Yun | ebbb83b665 | |
Simon Li | a5f5bbbb75 | |
Tim Head | 4590e2c498 | |
Tim Head | 8731ecf096 | |
Min RK | b36a6a75f5 | |
Min RK | 03d673b096 | |
Min RK | 789a3a23c3 | |
Min RK | d7c26b7a79 | |
Min RK | 93de3872a4 | |
Min RK | a2d0329b15 | |
Min RK | 1e240efc96 | |
Min RK | a49d260ac9 | |
Min RK | 0f848f7855 | |
Min RK | a06991de50 | |
Min RK | ebf640cb84 |
|
@ -1,43 +0,0 @@
|
|||
version: 2
|
||||
jobs:
|
||||
# Define a "build_docs" job to be run with Circle
|
||||
build_docs:
|
||||
# This is the base environment that Circle will use
|
||||
docker:
|
||||
- image: circleci/python:3.8-buster
|
||||
steps:
|
||||
# Get our data and merge with upstream
|
||||
- run: sudo apt-get update
|
||||
- checkout
|
||||
# Update our path
|
||||
- run: echo "export PATH=~/.local/bin:$PATH" >> $BASH_ENV
|
||||
# Restore cached files to speed things up
|
||||
- restore_cache:
|
||||
keys:
|
||||
- cache-pip
|
||||
- run: pip install --user -e .
|
||||
# Install the packages needed to build our documentation
|
||||
# This will depend on your particular package!
|
||||
- run: pip install --user -r docs/doc-requirements.txt
|
||||
# Cache some files for a speedup in subsequent builds
|
||||
- save_cache:
|
||||
key: cache-pip
|
||||
paths:
|
||||
- ~/.cache/pip
|
||||
# Build the docs
|
||||
- run:
|
||||
name: Build docs to store
|
||||
command: |
|
||||
cd docs
|
||||
make html
|
||||
# Tell Circle to store the documentation output in a folder that we can access later
|
||||
- store_artifacts:
|
||||
path: docs/build/html/
|
||||
destination: html
|
||||
|
||||
# Tell CircleCI to use this workflow when it builds the site
|
||||
workflows:
|
||||
version: 2
|
||||
default:
|
||||
jobs:
|
||||
- build_docs
|
|
@ -6,7 +6,7 @@ coverage:
|
|||
status:
|
||||
project:
|
||||
default:
|
||||
target: auto
|
||||
target: "0%"
|
||||
patch:
|
||||
default:
|
||||
target: 20%
|
||||
target: "0%"
|
||||
|
|
|
@ -1,23 +1,27 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us repair something that is currently broken
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
title: ""
|
||||
labels: ""
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
<!-- Thank you for contributing. These HTML commments will not render in the issue, but you can delete them once you've read them if you prefer! -->
|
||||
|
||||
### Bug description
|
||||
|
||||
<!-- Use this section to clearly and concisely describe the bug. -->
|
||||
|
||||
#### Expected behaviour
|
||||
|
||||
<!-- Tell us what you thought would happen. -->
|
||||
|
||||
#### Actual behaviour
|
||||
|
||||
<!-- Tell us what you actually happens. -->
|
||||
|
||||
### How to reproduce
|
||||
|
||||
<!-- Use this section to describe the steps that a user would take to experience this bug. -->
|
||||
|
||||
1. Go to '...'
|
||||
|
@ -26,9 +30,9 @@ assignees: ''
|
|||
4. See error
|
||||
|
||||
### Your personal set up
|
||||
|
||||
<!-- Tell us a little about the system you're using. You can see the guidelines for setting up and reporting this information at https://repo2docker.readthedocs.io/en/latest/contributing/contributing.html#setting-up-for-local-development. -->
|
||||
|
||||
- OS: [e.g. linux, OSX]
|
||||
- Docker version: `docker version` <!-- Run this command to get your version. -->
|
||||
- repo2docker version `repo2docker --version` <!-- Run this command to get your version. -->
|
||||
|
||||
- OS: [e.g. linux, OSX]
|
||||
- Docker version: `docker version` <!-- Run this command to get your version. -->
|
||||
- repo2docker version `repo2docker --version` <!-- Run this command to get your version. -->
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest a new feature or a big change to repo2docker
|
||||
title: ''
|
||||
labels: 'needs: discussion'
|
||||
assignees: ''
|
||||
|
||||
title: ""
|
||||
labels: "needs: discussion"
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
<!-- Thank you for contributing. These HTML commments will not render in the issue, but you can delete them once you've read them if you prefer! -->
|
||||
|
||||
### Proposed change
|
||||
|
||||
<!-- Use this section to describe the feature you'd like to be added. -->
|
||||
|
||||
|
||||
### Alternative options
|
||||
|
||||
<!-- Use this section to describe alternative options and why you've decided on the proposed feature above. -->
|
||||
|
||||
|
||||
### Who would use this feature?
|
||||
|
||||
<!-- Describe the audience for this feature. This information will affect who chooses to work on the feature with you. -->
|
||||
|
||||
|
||||
### How much effort will adding it take?
|
||||
|
||||
<!-- Try to estimate how much work adding this feature will require. This information will affect who chooses to work on the feature with you. -->
|
||||
|
||||
|
||||
### Who can do this work?
|
||||
<!-- What skills are needed? Who can be recruited to add this feature? This information will affect who chooses to work on the feature with you. -->
|
||||
|
||||
<!-- What skills are needed? Who can be recruited to add this feature? This information will affect who chooses to work on the feature with you. -->
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
---
|
||||
name: Support question
|
||||
about: Ask a question about using repo2docker
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
title: ""
|
||||
labels: ""
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
🚨 Please do **not** open an issue for support questions. Instead please search for similar issues or post on http://discourse.jupyter.org/c/questions. 🚨
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
# dependabot.yaml reference: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
||||
#
|
||||
# Notes:
|
||||
# - Status and logs from dependabot are provided at
|
||||
# https://github.com/jupyterhub/repo2docker/network/updates.
|
||||
# - YAML anchors are not supported here or in GitHub Workflows.
|
||||
#
|
||||
version: 2
|
||||
updates:
|
||||
# Maintain dependencies in our GitHub Workflows
|
||||
- package-ecosystem: github-actions
|
||||
directory: /
|
||||
labels: [ci]
|
||||
schedule:
|
||||
interval: monthly
|
||||
time: "05:00"
|
||||
timezone: Etc/UTC
|
|
@ -1,21 +1,44 @@
|
|||
# This is a GitHub workflow defining a set of jobs with a set of steps.
|
||||
# ref: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
|
||||
#
|
||||
name: Docker build
|
||||
|
||||
on:
|
||||
- push
|
||||
- pull_request
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- "docs/**"
|
||||
- "**.md"
|
||||
- "**.rst"
|
||||
- ".github/workflows/*"
|
||||
- "!.github/workflows/docker.yml"
|
||||
- ".pre-commit-config.yaml"
|
||||
push:
|
||||
paths-ignore:
|
||||
- "docs/**"
|
||||
- "**.md"
|
||||
- "**.rst"
|
||||
- ".github/workflows/*"
|
||||
- "!.github/workflows/docker.yml"
|
||||
- ".pre-commit-config.yaml"
|
||||
branches-ignore:
|
||||
- "dependabot/**"
|
||||
- "pre-commit-ci-update-config"
|
||||
tags:
|
||||
- "**"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# https://github.com/docker/build-push-action
|
||||
- name: Build Docker image
|
||||
uses: docker/build-push-action@v2
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
tags: jupyter/repo2docker:pr
|
||||
|
|
|
@ -1,34 +1,132 @@
|
|||
name: Create a release on pypi.org
|
||||
# This is a GitHub workflow defining a set of jobs with a set of steps.
|
||||
# ref: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
|
||||
#
|
||||
name: Publish
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- "docs/**"
|
||||
- "**.md"
|
||||
- "**.rst"
|
||||
- ".github/workflows/*"
|
||||
- "!.github/workflows/release.yml"
|
||||
- ".pre-commit-config.yaml"
|
||||
push:
|
||||
paths-ignore:
|
||||
- "docs/**"
|
||||
- "**.md"
|
||||
- "**.rst"
|
||||
- ".github/workflows/*"
|
||||
- "!.github/workflows/release.yml"
|
||||
- ".pre-commit-config.yaml"
|
||||
branches-ignore:
|
||||
- "dependabot/**"
|
||||
- "pre-commit-ci-update-config"
|
||||
tags:
|
||||
- "**"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-n-publish:
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: "Setup Python 3.8"
|
||||
uses: actions/setup-python@v2
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.8"
|
||||
python-version: "3.9"
|
||||
|
||||
- name: "Install dependencies"
|
||||
- name: install build requirements
|
||||
run: |
|
||||
pip install --upgrade setuptools pip
|
||||
pip install --upgrade -r dev-requirements.txt
|
||||
pip install build
|
||||
pip freeze
|
||||
|
||||
- name: "Build distribution archives"
|
||||
- name: build release
|
||||
run: |
|
||||
python setup.py sdist bdist_wheel
|
||||
python -m build --sdist --wheel .
|
||||
ls -l dist
|
||||
|
||||
# ref: https://github.com/actions/upload-artifact#readme
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: repo2docker-${{ github.sha }}
|
||||
path: "dist/*"
|
||||
if-no-files-found: error
|
||||
|
||||
# This step is only run when a new tag is pushed
|
||||
# all previous steps always run in order to exercise them
|
||||
- name: Publish distribution to PyPI
|
||||
if: startsWith(github.ref, 'refs/tags')
|
||||
uses: pypa/gh-action-pypi-publish@master
|
||||
uses: pypa/gh-action-pypi-publish@release/v1
|
||||
with:
|
||||
password: ${{ secrets.PYPI_API_TOKEN }}
|
||||
password: ${{ secrets.PYPI_PASSWORD }}
|
||||
|
||||
publish-docker:
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
DEFAULT_REGISTRY: quay.io
|
||||
IMAGE_NAME: jupyterhub/repo2docker
|
||||
|
||||
services:
|
||||
# So that we can test this in PRs/branches
|
||||
local-registry:
|
||||
image: registry:2
|
||||
ports:
|
||||
- 5000:5000
|
||||
|
||||
steps:
|
||||
- name: Should we push this image to a public registry?
|
||||
run: |
|
||||
if [ "${{ startsWith(github.ref, 'refs/tags/') || (github.ref == 'refs/heads/main') }}" = "true" ]; then
|
||||
REGISTRY=$DEFAULT_REGISTRY
|
||||
else
|
||||
REGISTRY=localhost:5000
|
||||
fi
|
||||
echo "REGISTRY=$REGISTRY" >> $GITHUB_ENV
|
||||
echo "Publishing to $REGISTRY"
|
||||
|
||||
# versioneer requires the full git history for non-tags
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# Setup docker to build for multiple platforms, see:
|
||||
# https://github.com/docker/build-push-action/tree/v2.4.0#usage
|
||||
# https://github.com/docker/build-push-action/blob/v2.4.0/docs/advanced/multi-platform.md
|
||||
- name: Set up QEMU (for docker buildx)
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx (for multi-arch builds)
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
# Allows pushing to registry on localhost:5000
|
||||
driver-opts: network=host
|
||||
|
||||
- name: Setup push rights to Docker registry
|
||||
if: env.REGISTRY != 'localhost:5000'
|
||||
run: |
|
||||
docker login -u "${{ secrets.DOCKER_REGISTRY_USERNAME }}" -p "${{ secrets.DOCKER_REGISTRY_TOKEN }}" "${{ env.REGISTRY }}"
|
||||
|
||||
# when building jupyter/repo2docker:master
|
||||
# also push jupyter/repo2docker:1.2.3-3.abcd1234 (replace + with -)
|
||||
- name: Get list of repo2docker docker tags
|
||||
run: |
|
||||
VERSION=$(python3 -c 'import versioneer; print(versioneer.get_version().replace("+", "-"))')
|
||||
TAGS="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:$VERSION"
|
||||
if [ "${{ github.ref }}" == "refs/heads/main" ]; then
|
||||
TAGS="$TAGS,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:main"
|
||||
fi
|
||||
if [ "${{ startsWith(github.ref, 'refs/tags/') }}" = "true" ]; then
|
||||
TAGS="$TAGS,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest"
|
||||
fi
|
||||
|
||||
echo "TAGS=$TAGS"
|
||||
echo "TAGS=$TAGS" >> $GITHUB_ENV
|
||||
|
||||
- name: Build and push repo2docker
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: true
|
||||
tags: ${{ env.TAGS }}
|
||||
|
|
|
@ -1,19 +1,37 @@
|
|||
# Useful GitHub Actions docs:
|
||||
# This is a GitHub workflow defining a set of jobs with a set of steps.
|
||||
# ref: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
|
||||
#
|
||||
# - https://help.github.com/en/actions
|
||||
# - https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions
|
||||
# - https://help.github.com/en/actions/configuring-and-managing-workflows/configuring-a-workflow
|
||||
# - https://help.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions
|
||||
|
||||
name: Continuous Integration
|
||||
name: Test
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- "docs/**"
|
||||
- "**.md"
|
||||
- "**.rst"
|
||||
- ".github/workflows/*"
|
||||
- "!.github/workflows/test.yml"
|
||||
- ".pre-commit-config.yaml"
|
||||
push:
|
||||
paths-ignore:
|
||||
- "docs/**"
|
||||
- "**.md"
|
||||
- "**.rst"
|
||||
- ".github/workflows/*"
|
||||
- "!.github/workflows/test.yml"
|
||||
- ".pre-commit-config.yaml"
|
||||
branches-ignore:
|
||||
- "dependabot/**"
|
||||
- "pre-commit-ci-update-config"
|
||||
tags:
|
||||
- "**"
|
||||
schedule:
|
||||
# Weekly test so we know if tests break for external reasons
|
||||
# https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows#scheduled-events
|
||||
# Run weekly test so we know if tests break for external reasons
|
||||
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#scheduled-events
|
||||
#
|
||||
# At 10:36 on Sunday (https://crontab.guru)
|
||||
- cron: '36 10 * * 0'
|
||||
workflow_dispatch:
|
||||
|
||||
# Global environment variables
|
||||
env:
|
||||
|
@ -23,51 +41,14 @@ env:
|
|||
GIT_AUTHOR_NAME: CI User
|
||||
|
||||
jobs:
|
||||
# Job to run linter / autoformat
|
||||
lint:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
# Action Repo: https://github.com/actions/checkout
|
||||
- name: "Checkout repo"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# Action Repo: https://github.com/actions/setup-python
|
||||
- name: "Setup Python"
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: "3.8"
|
||||
|
||||
# Action Repo: https://github.com/actions/cache
|
||||
- name: "Cache pip dependencies"
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ hashFiles('dev-requirements.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-
|
||||
|
||||
- name: "Install dependencies"
|
||||
run: |
|
||||
pip install --upgrade setuptools pip
|
||||
pip install --upgrade -r dev-requirements.txt
|
||||
pip freeze
|
||||
|
||||
- name: "Run linter"
|
||||
run: |
|
||||
pre-commit run --all-files
|
||||
|
||||
test:
|
||||
# Previous job must have successfully completed for this job to execute
|
||||
# - https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idneeds
|
||||
needs: lint
|
||||
runs-on: ubuntu-18.04
|
||||
# - https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstrategy
|
||||
runs-on: ubuntu-${{ matrix.ubuntu_version }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false # Do not cancel all jobs if one fails
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python_version: ["3.8"]
|
||||
ubuntu_version: ["22.04"]
|
||||
python_version: ["3.9"]
|
||||
repo_type:
|
||||
- base
|
||||
- conda
|
||||
|
@ -80,45 +61,36 @@ jobs:
|
|||
- unit
|
||||
- venv
|
||||
include:
|
||||
- python_version: "3.6"
|
||||
# The actions/setup-python action with Python version 3.6 isn't
|
||||
# possible to use with the ubuntu-22.04 runner, so we use ubuntu-20.04
|
||||
# for this test where Python 3.6 remain available.
|
||||
- ubuntu_version: "20.04"
|
||||
python_version: "3.6"
|
||||
repo_type: venv
|
||||
|
||||
steps:
|
||||
- name: "Checkout repo"
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: "Setup Python"
|
||||
uses: actions/setup-python@v2
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python_version }}
|
||||
python-version: "${{ matrix.python_version }}"
|
||||
|
||||
# Action Repo: https://github.com/actions/cache
|
||||
- name: "Cache pip dependencies"
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ hashFiles('dev-requirements.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-
|
||||
|
||||
- name: "Install"
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pip install --upgrade setuptools pip wheel
|
||||
pip install --upgrade -r dev-requirements.txt
|
||||
python setup.py bdist_wheel
|
||||
pip install dist/*.whl
|
||||
pip install -r dev-requirements.txt
|
||||
pip freeze
|
||||
# hg-evolve pinned to 9.2 because hg-evolve dropped support for
|
||||
# hg 4.5, installed with apt in Ubuntu 18.04
|
||||
$(hg debuginstall --template "{pythonexe}") -m pip install hg-evolve==9.2 --user
|
||||
|
||||
- name: "Run tests"
|
||||
- name: Install repo2docker
|
||||
run: |
|
||||
cd tests
|
||||
pytest --durations 10 --cov repo2docker -v ${{ matrix.repo_type }}
|
||||
python -m build --wheel .
|
||||
pip install dist/*.whl
|
||||
|
||||
- name: "Upload code coverage stats"
|
||||
# add for mercurial tests
|
||||
pip install mercurial hg-evolve
|
||||
|
||||
pip freeze
|
||||
|
||||
- name: Run pytest
|
||||
run: |
|
||||
pip install codecov
|
||||
pushd tests && codecov && cat
|
||||
cat /home/runner/work/repo2docker/repo2docker/tests/coverage.xml
|
||||
pytest --verbose --color=yes --durations=10 --cov=repo2docker tests/${{ matrix.repo_type }}
|
||||
|
||||
- uses: codecov/codecov-action@v4
|
||||
|
|
|
@ -1,23 +1,15 @@
|
|||
# Manually added parts to .gitignore
|
||||
# ----------------------------------
|
||||
#
|
||||
.#*
|
||||
dist
|
||||
build
|
||||
*.tar.gz
|
||||
*.egg-info
|
||||
*.py[co]
|
||||
__pycache__
|
||||
MANIFEST
|
||||
|
||||
.DS_Store
|
||||
.cache
|
||||
.pytest_cache
|
||||
.coverage
|
||||
htmlcov
|
||||
|
||||
repo2docker/s2i
|
||||
|
||||
^bin/
|
||||
lib/
|
||||
lib64/
|
||||
share/
|
||||
include/
|
||||
|
||||
|
@ -31,7 +23,171 @@ tests/dockerfile/legacy/root.frozen.yml
|
|||
generated/
|
||||
test_file_text.txt
|
||||
|
||||
|
||||
\.vscode/
|
||||
|
||||
tests/dockerfile_diff.sh
|
||||
|
||||
|
||||
# Python .gitignore from https://github.com/github/gitignore/blob/HEAD/Python.gitignore
|
||||
# -------------------------------------------------------------------------------------
|
||||
#
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
.pybuilder/
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
# For a library or package, you might want to ignore these files since the code is
|
||||
# intended to run in multiple environments; otherwise, check them in:
|
||||
# .python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||
# install all needed dependencies.
|
||||
#Pipfile.lock
|
||||
|
||||
# poetry
|
||||
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||
# commonly ignored for libraries.
|
||||
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||
#poetry.lock
|
||||
|
||||
# pdm
|
||||
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||
#pdm.lock
|
||||
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
||||
# in version control.
|
||||
# https://pdm.fming.dev/#use-with-ide
|
||||
.pdm.toml
|
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# pytype static type analyzer
|
||||
.pytype/
|
||||
|
||||
# Cython debug symbols
|
||||
cython_debug/
|
||||
|
||||
# PyCharm
|
||||
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||
#.idea/
|
||||
|
|
10
.gitpod.yml
10
.gitpod.yml
|
@ -1,10 +1,12 @@
|
|||
tasks:
|
||||
- init: |
|
||||
pip3 install sphinx-autobuild
|
||||
pip3 install -r docs/doc-requirements.txt
|
||||
pip3 install -e.
|
||||
pip3 install -r dev-requirements.txt
|
||||
pip3 install -r docs/requirements.txt
|
||||
pip3 install -e .
|
||||
command: |
|
||||
sphinx-autobuild docs/source/ docs/build/html/
|
||||
sphinx-autobuild docs/source/ docs/_build/html/
|
||||
name: Sphinx preview
|
||||
|
||||
ports:
|
||||
- port: 8000
|
||||
- port: 8000
|
||||
|
|
|
@ -1,6 +1,54 @@
|
|||
# pre-commit is a tool to perform a predefined set of tasks manually and/or
|
||||
# automatically before git commits are made.
|
||||
#
|
||||
# Config reference: https://pre-commit.com/#pre-commit-configyaml---top-level
|
||||
#
|
||||
# Common tasks
|
||||
#
|
||||
# - Run on all files: pre-commit run --all-files
|
||||
# - Register git hooks: pre-commit install --install-hooks
|
||||
#
|
||||
repos:
|
||||
- repo: https://github.com/ambv/black
|
||||
rev: 20.8b1
|
||||
hooks:
|
||||
- id: black
|
||||
args: [--target-version=py36]
|
||||
# Autoformat: Python code, syntax patterns are modernized
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
rev: v3.15.2
|
||||
hooks:
|
||||
- id: pyupgrade
|
||||
args:
|
||||
- --py36-plus
|
||||
# check-tmp is a Python based test script run in created environments
|
||||
# that can be at least Python 3.5 even though we require Python 3.6 for
|
||||
# repo2docker itself.
|
||||
exclude: check-tmp
|
||||
|
||||
# Autoformat: Python code
|
||||
- repo: https://github.com/psf/black
|
||||
rev: 24.4.2
|
||||
hooks:
|
||||
- id: black
|
||||
args:
|
||||
- --target-version=py36
|
||||
- --target-version=py37
|
||||
- --target-version=py38
|
||||
- --target-version=py39
|
||||
- --target-version=py310
|
||||
- --target-version=py311
|
||||
|
||||
# Autoformat: Python code
|
||||
- repo: https://github.com/pycqa/isort
|
||||
rev: 5.13.2
|
||||
hooks:
|
||||
- id: isort
|
||||
args:
|
||||
- --profile=black
|
||||
|
||||
# Autoformat: markdown
|
||||
- repo: https://github.com/pre-commit/mirrors-prettier
|
||||
rev: v4.0.0-alpha.8
|
||||
hooks:
|
||||
- id: prettier
|
||||
files: ".md"
|
||||
|
||||
# pre-commit.ci config reference: https://pre-commit.ci/#configuration
|
||||
ci:
|
||||
autoupdate_schedule: monthly
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# Configuration on how ReadTheDocs (RTD) builds our documentation
|
||||
# ref: https://readthedocs.org/projects/repo2docker-service/
|
||||
# ref: https://docs.readthedocs.io/en/stable/config-file/v2.html
|
||||
#
|
||||
version: 2
|
||||
|
||||
sphinx:
|
||||
configuration: docs/source/conf.py
|
||||
|
||||
build:
|
||||
os: ubuntu-22.04
|
||||
tools:
|
||||
python: "3.10"
|
||||
|
||||
python:
|
||||
install:
|
||||
- requirements: docs/requirements.txt
|
||||
- method: pip
|
||||
path: .
|
|
@ -1 +1 @@
|
|||
The ``repo2docker`` changelog has been moved. It can be viewed online at https://repo2docker.readthedocs.io/en/latest/changelog.html. In the ``repo2docker`` repository, the changelog is located at ``docs/source/changelog.rst``.
|
||||
The ``repo2docker`` changelog has been moved. It can be viewed online at https://repo2docker.readthedocs.io/en/latest/changelog.html. In the ``repo2docker`` repository, the changelog is located at ``docs/source/changelog.md``.
|
||||
|
|
|
@ -8,19 +8,20 @@ The repo2docker developer documentation is all rendered on our documentation web
|
|||
If you're here, you're probably looking for the [Contributing to repo2docker development](https://repo2docker.readthedocs.io/en/latest/contributing/contributing.html) page.
|
||||
|
||||
Please make sure you've read the following sections before opening an issue/pull request:
|
||||
* [Process for making a contribution](https://repo2docker.readthedocs.io/en/latest/contributing/contributing.html#process-for-making-a-contribution).
|
||||
* These steps talk you through choosing the right issue template (bug report or feature request) and making a change.
|
||||
* [Guidelines to getting a Pull Request merged](https://repo2docker.readthedocs.io/en/latest/contributing/contributing.html#guidelines-to-getting-a-pull-request-merged).
|
||||
* These are tips and tricks to help make your contribution as smooth as possible for you and for the repo2docker maintenance team.
|
||||
|
||||
- [Process for making a contribution](https://repo2docker.readthedocs.io/en/latest/contributing/contributing.html#process-for-making-a-contribution).
|
||||
- These steps talk you through choosing the right issue template (bug report or feature request) and making a change.
|
||||
- [Guidelines to getting a Pull Request merged](https://repo2docker.readthedocs.io/en/latest/contributing/contributing.html#guidelines-to-getting-a-pull-request-merged).
|
||||
- These are tips and tricks to help make your contribution as smooth as possible for you and for the repo2docker maintenance team.
|
||||
|
||||
There are a few other pages to highlight:
|
||||
|
||||
* [Our roadmap](https://repo2docker.readthedocs.io/en/latest/contributing/roadmap.html)
|
||||
* We use the roadmap to develop a shared understanding of the project's vision and direction amongst the community of users, contributors, and maintainers.
|
||||
- [Our roadmap](https://repo2docker.readthedocs.io/en/latest/contributing/roadmap.html)
|
||||
- We use the roadmap to develop a shared understanding of the project's vision and direction amongst the community of users, contributors, and maintainers.
|
||||
This is a great place to get a feel for what the maintainers are thinking about for the short, medium, and long term future of the project.
|
||||
* [Design of repo2docker](https://repo2docker.readthedocs.io/en/latest/design.html)
|
||||
* This page explains some of the design principles behind repo2docker.
|
||||
- [Design of repo2docker](https://repo2docker.readthedocs.io/en/latest/design.html)
|
||||
- This page explains some of the design principles behind repo2docker.
|
||||
Its a good place to understand _why_ the team have made the decisions that they have along the way!
|
||||
* We absolutely encourage discussion around refactoring, updating or extending repo2docker, but please make sure that you've understood this page before opening an issue to discuss the change you'd like to propose.
|
||||
* [Common developer tasks and how-tos](https://repo2docker.readthedocs.io/en/latest/contributing/tasks.html)
|
||||
* Some notes on running tests, buildpack dependencies, creating a release, and keeping the pip files up to date.
|
||||
- We absolutely encourage discussion around refactoring, updating or extending repo2docker, but please make sure that you've understood this page before opening an issue to discuss the change you'd like to propose.
|
||||
- [Common developer tasks and how-tos](https://repo2docker.readthedocs.io/en/latest/contributing/tasks.html)
|
||||
- Some notes on running tests, buildpack dependencies, creating a release, and keeping the pip files up to date.
|
||||
|
|
32
Dockerfile
32
Dockerfile
|
@ -1,30 +1,40 @@
|
|||
ARG ALPINE_VERSION=3.12.0
|
||||
# syntax = docker/dockerfile:1.3
|
||||
ARG ALPINE_VERSION=3.19
|
||||
FROM alpine:${ALPINE_VERSION}
|
||||
|
||||
RUN apk add --no-cache git python3 python3-dev py-pip
|
||||
RUN apk add --no-cache git python3 python3-dev py3-pip py3-setuptools build-base
|
||||
|
||||
# build wheels in a build stage
|
||||
ARG VIRTUAL_ENV=/opt/venv
|
||||
ENV PATH=${VIRTUAL_ENV}/bin:${PATH}
|
||||
|
||||
RUN python3 -m venv ${VIRTUAL_ENV}
|
||||
|
||||
# build wheels in first image
|
||||
ADD . /tmp/src
|
||||
# restore the hooks directory so that the repository isn't marked as dirty
|
||||
RUN cd /tmp/src && git clean -xfd && git checkout -- hooks && git status
|
||||
RUN cd /tmp/src && git clean -xfd && git status
|
||||
RUN mkdir /tmp/wheelhouse \
|
||||
&& cd /tmp/wheelhouse \
|
||||
&& pip3 install wheel \
|
||||
&& pip3 wheel --no-cache-dir /tmp/src \
|
||||
&& pip install wheel \
|
||||
&& pip wheel --no-cache-dir /tmp/src \
|
||||
&& ls -l /tmp/wheelhouse
|
||||
|
||||
FROM alpine:${ALPINE_VERSION}
|
||||
|
||||
# install python, git, bash, mercurial
|
||||
RUN apk add --no-cache git git-lfs python3 py-pip bash docker mercurial
|
||||
RUN apk add --no-cache git git-lfs python3 py3-pip py3-setuptools bash docker mercurial
|
||||
|
||||
ARG VIRTUAL_ENV=/opt/venv
|
||||
ENV PATH=${VIRTUAL_ENV}/bin:${PATH}
|
||||
|
||||
RUN python3 -m venv ${VIRTUAL_ENV}
|
||||
|
||||
# install hg-evolve (Mercurial extensions)
|
||||
RUN pip3 install hg-evolve --user --no-cache-dir
|
||||
RUN pip install hg-evolve --no-cache-dir
|
||||
|
||||
# install repo2docker
|
||||
COPY --from=0 /tmp/wheelhouse /tmp/wheelhouse
|
||||
RUN pip3 install --no-cache-dir /tmp/wheelhouse/*.whl \
|
||||
&& pip3 list
|
||||
RUN pip install --no-cache-dir --ignore-installed --no-deps /tmp/wheelhouse/*.whl \
|
||||
&& pip list
|
||||
|
||||
# add git-credential helper
|
||||
COPY ./docker/git-credential-env /usr/local/bin/git-credential-env
|
||||
|
|
17
Pipfile
17
Pipfile
|
@ -1,17 +0,0 @@
|
|||
# Note that there are a dev-requirements.txt and a docs/doc-requirements.txt
|
||||
# files in this project, if you are updating this Pipfile make sure to
|
||||
# update these accordingly
|
||||
|
||||
[dev-packages]
|
||||
pytest=">=4.6"
|
||||
wheel="*"
|
||||
pytest-cov="*"
|
||||
PyYAML = "*"
|
||||
recommonmark = "*"
|
||||
alabaster = "*"
|
||||
Sphinx = ">=1.4,!=1.5.4"
|
||||
alabaster_jupyterhub = "*"
|
||||
sphinxcontrib-autoprogram = "*"
|
||||
|
||||
[packages]
|
||||
repo2docker = {path=".", editable=true}
|
|
@ -1,559 +0,0 @@
|
|||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "e5e25d07eef39c6a63fc222436b9fe266edf7f024fd5c0ff72afd454e4176602"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {},
|
||||
"sources": [
|
||||
{
|
||||
"name": "pypi",
|
||||
"url": "https://pypi.org/simple",
|
||||
"verify_ssl": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": {
|
||||
"certifi": {
|
||||
"hashes": [
|
||||
"sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939",
|
||||
"sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695"
|
||||
],
|
||||
"version": "==2019.6.16"
|
||||
},
|
||||
"chardet": {
|
||||
"hashes": [
|
||||
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
|
||||
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
|
||||
],
|
||||
"version": "==3.0.4"
|
||||
},
|
||||
"decorator": {
|
||||
"hashes": [
|
||||
"sha256:86156361c50488b84a3f148056ea716ca587df2f0de1d34750d35c21312725de",
|
||||
"sha256:f069f3a01830ca754ba5258fde2278454a0b5b79e0d7f5c13b3b97e57d4acff6"
|
||||
],
|
||||
"version": "==4.4.0"
|
||||
},
|
||||
"docker": {
|
||||
"hashes": [
|
||||
"sha256:acf51b5e3e0d056925c3b780067a6f753c915fffaa46c5f2d79eb0fc1cbe6a01",
|
||||
"sha256:cc5b2e94af6a2b1e1ed9d7dcbdc77eff56c36081757baf9ada6e878ea0213164"
|
||||
],
|
||||
"version": "==4.0.2"
|
||||
},
|
||||
"escapism": {
|
||||
"hashes": [
|
||||
"sha256:5f1cc1fa04a95f5b85b3da194750f8a71846d493ea332f62e8798949f10c9b86",
|
||||
"sha256:bde950505d0a2c0fce069620f8ffb99464635851146c25e8d1be882ca9a1bb75"
|
||||
],
|
||||
"version": "==1.0.0"
|
||||
},
|
||||
"idna": {
|
||||
"hashes": [
|
||||
"sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
|
||||
"sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
|
||||
],
|
||||
"version": "==2.8"
|
||||
},
|
||||
"ipython-genutils": {
|
||||
"hashes": [
|
||||
"sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8",
|
||||
"sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"
|
||||
],
|
||||
"version": "==0.2.0"
|
||||
},
|
||||
"jinja2": {
|
||||
"hashes": [
|
||||
"sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013",
|
||||
"sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b"
|
||||
],
|
||||
"version": "==2.10.1"
|
||||
},
|
||||
"markupsafe": {
|
||||
"hashes": [
|
||||
"sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
|
||||
"sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
|
||||
"sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
|
||||
"sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
|
||||
"sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
|
||||
"sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
|
||||
"sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
|
||||
"sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
|
||||
"sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
|
||||
"sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
|
||||
"sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
|
||||
"sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
|
||||
"sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
|
||||
"sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
|
||||
"sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
|
||||
"sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
|
||||
"sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
|
||||
"sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
|
||||
"sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
|
||||
"sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
|
||||
"sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
|
||||
"sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
|
||||
"sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
|
||||
"sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
|
||||
"sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
|
||||
"sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
|
||||
"sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
|
||||
"sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"
|
||||
],
|
||||
"version": "==1.1.1"
|
||||
},
|
||||
"python-json-logger": {
|
||||
"hashes": [
|
||||
"sha256:b7a31162f2a01965a5efb94453ce69230ed208468b0bbc7fdfc56e6d8df2e281"
|
||||
],
|
||||
"version": "==0.1.11"
|
||||
},
|
||||
"repo2docker": {
|
||||
"editable": true,
|
||||
"path": "."
|
||||
},
|
||||
"requests": {
|
||||
"hashes": [
|
||||
"sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
|
||||
"sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"
|
||||
],
|
||||
"version": "==2.22.0"
|
||||
},
|
||||
"ruamel.yaml": {
|
||||
"hashes": [
|
||||
"sha256:17dbf6b7362e7aee8494f7a0f5cffd44902a6331fe89ef0853b855a7930ab845",
|
||||
"sha256:23731c9efb79f3f5609dedffeb6c5c47a68125fd3d4b157d9fc71b1cd49076a9",
|
||||
"sha256:2bbdd598ae57bac20968cf9028cc67d37d83bdb7942a94b9478110bc72193148",
|
||||
"sha256:34586084cdd60845a3e1bece2b58f0a889be25450db8cc0ea143ddf0f40557a2",
|
||||
"sha256:35957fedbb287b01313bb5c556ffdc70c0277c3500213b5e73dfd8716f748d77",
|
||||
"sha256:414cb87a40974a575830b406ffab4ab8c6cbd82eeb73abd2a9d1397c1f0223e1",
|
||||
"sha256:428775be75db68d908b17e4e8dda424c410222f170dc173246aa63e972d094b3",
|
||||
"sha256:514f670f7d36519bda504d507edfe63e3c20489f86c86d42bc4d9a6dbdf82c7b",
|
||||
"sha256:5cb962c1ac6887c5da29138fbbe3b4b7705372eb54e599907fa63d4cd743246d",
|
||||
"sha256:5f6e30282cf70fb7754e1a5f101e27b5240009766376e131b31ab49f14fe81be",
|
||||
"sha256:86f8e010af6af0b4f42de2d0d9b19cb441e61d3416082186f9dd03c8552d13ad",
|
||||
"sha256:8d47ed1e557d546bd2dfe54f504d7274274602ff7a0652cde84c258ad6c2d96d",
|
||||
"sha256:98668876720bce1ac08562d8b93a564a80e3397e442c7ea19cebdcdf73da7f74",
|
||||
"sha256:9e1f0ddc18d8355dcf5586a5d90417df56074f237812b8682a93b62cca9d2043",
|
||||
"sha256:a7bc812a72a79d6b7dbb96fa5bee3950464b65ec055d3abc4db6572f2373a95c",
|
||||
"sha256:b72e13f9f206ee103247b07afd5a39c8b1aa98e8eba80ddba184d030337220ba",
|
||||
"sha256:bcff8ea9d916789e85e24beed8830c157fb8bc7c313e554733a8151540e66c01",
|
||||
"sha256:c76e78b3bab652069b8d6f7889b0e72f3455c2b854b2e0a8818393d149ad0a0d"
|
||||
],
|
||||
"version": "==0.15.97"
|
||||
},
|
||||
"semver": {
|
||||
"hashes": [
|
||||
"sha256:41c9aa26c67dc16c54be13074c352ab666bce1fa219c7110e8f03374cd4206b0",
|
||||
"sha256:5b09010a66d9a3837211bb7ae5a20d10ba88f8cb49e92cb139a69ef90d5060d8"
|
||||
],
|
||||
"version": "==2.8.1"
|
||||
},
|
||||
"six": {
|
||||
"hashes": [
|
||||
"sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
|
||||
"sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
|
||||
],
|
||||
"version": "==1.12.0"
|
||||
},
|
||||
"toml": {
|
||||
"hashes": [
|
||||
"sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c",
|
||||
"sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"
|
||||
],
|
||||
"version": "==0.10.0"
|
||||
},
|
||||
"traitlets": {
|
||||
"hashes": [
|
||||
"sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835",
|
||||
"sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9"
|
||||
],
|
||||
"version": "==4.3.2"
|
||||
},
|
||||
"urllib3": {
|
||||
"hashes": [
|
||||
"sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1",
|
||||
"sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232"
|
||||
],
|
||||
"version": "==1.25.3"
|
||||
},
|
||||
"websocket-client": {
|
||||
"hashes": [
|
||||
"sha256:1151d5fb3a62dc129164292e1227655e4bbc5dd5340a5165dfae61128ec50aa9",
|
||||
"sha256:1fd5520878b68b84b5748bb30e592b10d0a91529d5383f74f4964e72b297fd3a"
|
||||
],
|
||||
"version": "==0.56.0"
|
||||
}
|
||||
},
|
||||
"develop": {
|
||||
"alabaster": {
|
||||
"hashes": [
|
||||
"sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359",
|
||||
"sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==0.7.12"
|
||||
},
|
||||
"alabaster-jupyterhub": {
|
||||
"hashes": [
|
||||
"sha256:00911ff8828996c44dadc1aa234853b98d91c6a0c25153dde4b2c241cd0851c7",
|
||||
"sha256:787c7a895f2fdfab5adc1478bd6925a287cee6dcf12ac8ccf565c6856969a4ef"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==0.1.8"
|
||||
},
|
||||
"atomicwrites": {
|
||||
"hashes": [
|
||||
"sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4",
|
||||
"sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"
|
||||
],
|
||||
"version": "==1.3.0"
|
||||
},
|
||||
"attrs": {
|
||||
"hashes": [
|
||||
"sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79",
|
||||
"sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"
|
||||
],
|
||||
"version": "==19.1.0"
|
||||
},
|
||||
"babel": {
|
||||
"hashes": [
|
||||
"sha256:af92e6106cb7c55286b25b38ad7695f8b4efb36a90ba483d7f7a6628c46158ab",
|
||||
"sha256:e86135ae101e31e2c8ec20a4e0c5220f4eed12487d5cf3f78be7e98d3a57fc28"
|
||||
],
|
||||
"version": "==2.7.0"
|
||||
},
|
||||
"certifi": {
|
||||
"hashes": [
|
||||
"sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939",
|
||||
"sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695"
|
||||
],
|
||||
"version": "==2019.6.16"
|
||||
},
|
||||
"chardet": {
|
||||
"hashes": [
|
||||
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
|
||||
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
|
||||
],
|
||||
"version": "==3.0.4"
|
||||
},
|
||||
"commonmark": {
|
||||
"hashes": [
|
||||
"sha256:14c3df31e8c9c463377e287b2a1eefaa6019ab97b22dad36e2f32be59d61d68d",
|
||||
"sha256:867fc5db078ede373ab811e16b6789e9d033b15ccd7296f370ca52d1ee792ce0"
|
||||
],
|
||||
"version": "==0.9.0"
|
||||
},
|
||||
"coverage": {
|
||||
"hashes": [
|
||||
"sha256:3684fabf6b87a369017756b551cef29e505cb155ddb892a7a29277b978da88b9",
|
||||
"sha256:39e088da9b284f1bd17c750ac672103779f7954ce6125fd4382134ac8d152d74",
|
||||
"sha256:3c205bc11cc4fcc57b761c2da73b9b72a59f8d5ca89979afb0c1c6f9e53c7390",
|
||||
"sha256:465ce53a8c0f3a7950dfb836438442f833cf6663d407f37d8c52fe7b6e56d7e8",
|
||||
"sha256:48020e343fc40f72a442c8a1334284620f81295256a6b6ca6d8aa1350c763bbe",
|
||||
"sha256:5296fc86ab612ec12394565c500b412a43b328b3907c0d14358950d06fd83baf",
|
||||
"sha256:5f61bed2f7d9b6a9ab935150a6b23d7f84b8055524e7be7715b6513f3328138e",
|
||||
"sha256:68a43a9f9f83693ce0414d17e019daee7ab3f7113a70c79a3dd4c2f704e4d741",
|
||||
"sha256:6b8033d47fe22506856fe450470ccb1d8ba1ffb8463494a15cfc96392a288c09",
|
||||
"sha256:7ad7536066b28863e5835e8cfeaa794b7fe352d99a8cded9f43d1161be8e9fbd",
|
||||
"sha256:7bacb89ccf4bedb30b277e96e4cc68cd1369ca6841bde7b005191b54d3dd1034",
|
||||
"sha256:839dc7c36501254e14331bcb98b27002aa415e4af7ea039d9009409b9d2d5420",
|
||||
"sha256:8f9a95b66969cdea53ec992ecea5406c5bd99c9221f539bca1e8406b200ae98c",
|
||||
"sha256:932c03d2d565f75961ba1d3cec41ddde00e162c5b46d03f7423edcb807734eab",
|
||||
"sha256:988529edadc49039d205e0aa6ce049c5ccda4acb2d6c3c5c550c17e8c02c05ba",
|
||||
"sha256:998d7e73548fe395eeb294495a04d38942edb66d1fa61eb70418871bc621227e",
|
||||
"sha256:9de60893fb447d1e797f6bf08fdf0dbcda0c1e34c1b06c92bd3a363c0ea8c609",
|
||||
"sha256:9e80d45d0c7fcee54e22771db7f1b0b126fb4a6c0a2e5afa72f66827207ff2f2",
|
||||
"sha256:a545a3dfe5082dc8e8c3eb7f8a2cf4f2870902ff1860bd99b6198cfd1f9d1f49",
|
||||
"sha256:a5d8f29e5ec661143621a8f4de51adfb300d7a476224156a39a392254f70687b",
|
||||
"sha256:aca06bfba4759bbdb09bf52ebb15ae20268ee1f6747417837926fae990ebc41d",
|
||||
"sha256:bb23b7a6fd666e551a3094ab896a57809e010059540ad20acbeec03a154224ce",
|
||||
"sha256:bfd1d0ae7e292105f29d7deaa9d8f2916ed8553ab9d5f39ec65bcf5deadff3f9",
|
||||
"sha256:c62ca0a38958f541a73cf86acdab020c2091631c137bd359c4f5bddde7b75fd4",
|
||||
"sha256:c709d8bda72cf4cd348ccec2a4881f2c5848fd72903c185f363d361b2737f773",
|
||||
"sha256:c968a6aa7e0b56ecbd28531ddf439c2ec103610d3e2bf3b75b813304f8cb7723",
|
||||
"sha256:df785d8cb80539d0b55fd47183264b7002077859028dfe3070cf6359bf8b2d9c",
|
||||
"sha256:f406628ca51e0ae90ae76ea8398677a921b36f0bd71aab2099dfed08abd0322f",
|
||||
"sha256:f46087bbd95ebae244a0eda01a618aff11ec7a069b15a3ef8f6b520db523dcf1",
|
||||
"sha256:f8019c5279eb32360ca03e9fac40a12667715546eed5c5eb59eb381f2f501260",
|
||||
"sha256:fc5f4d209733750afd2714e9109816a29500718b32dd9a5db01c0cb3a019b96a"
|
||||
],
|
||||
"version": "==4.5.3"
|
||||
},
|
||||
"docutils": {
|
||||
"hashes": [
|
||||
"sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6",
|
||||
"sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274",
|
||||
"sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6"
|
||||
],
|
||||
"version": "==0.14"
|
||||
},
|
||||
"future": {
|
||||
"hashes": [
|
||||
"sha256:67045236dcfd6816dc439556d009594abf643e5eb48992e36beac09c2ca659b8"
|
||||
],
|
||||
"version": "==0.17.1"
|
||||
},
|
||||
"idna": {
|
||||
"hashes": [
|
||||
"sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
|
||||
"sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
|
||||
],
|
||||
"version": "==2.8"
|
||||
},
|
||||
"imagesize": {
|
||||
"hashes": [
|
||||
"sha256:3f349de3eb99145973fefb7dbe38554414e5c30abd0c8e4b970a7c9d09f3a1d8",
|
||||
"sha256:f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5"
|
||||
],
|
||||
"version": "==1.1.0"
|
||||
},
|
||||
"importlib-metadata": {
|
||||
"hashes": [
|
||||
"sha256:6dfd58dfe281e8d240937776065dd3624ad5469c835248219bd16cf2e12dbeb7",
|
||||
"sha256:cb6ee23b46173539939964df59d3d72c3e0c1b5d54b84f1d8a7e912fe43612db"
|
||||
],
|
||||
"version": "==0.18"
|
||||
},
|
||||
"jinja2": {
|
||||
"hashes": [
|
||||
"sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013",
|
||||
"sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b"
|
||||
],
|
||||
"version": "==2.10.1"
|
||||
},
|
||||
"markupsafe": {
|
||||
"hashes": [
|
||||
"sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
|
||||
"sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
|
||||
"sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
|
||||
"sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
|
||||
"sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
|
||||
"sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
|
||||
"sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
|
||||
"sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
|
||||
"sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
|
||||
"sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
|
||||
"sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
|
||||
"sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
|
||||
"sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
|
||||
"sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
|
||||
"sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
|
||||
"sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
|
||||
"sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
|
||||
"sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
|
||||
"sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
|
||||
"sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
|
||||
"sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
|
||||
"sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
|
||||
"sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
|
||||
"sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
|
||||
"sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
|
||||
"sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
|
||||
"sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
|
||||
"sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"
|
||||
],
|
||||
"version": "==1.1.1"
|
||||
},
|
||||
"more-itertools": {
|
||||
"hashes": [
|
||||
"sha256:2112d2ca570bb7c3e53ea1a35cd5df42bb0fd10c45f0fb97178679c3c03d64c7",
|
||||
"sha256:c3e4748ba1aad8dba30a4886b0b1a2004f9a863837b8654e7059eebf727afa5a"
|
||||
],
|
||||
"markers": "python_version > '2.7'",
|
||||
"version": "==7.0.0"
|
||||
},
|
||||
"packaging": {
|
||||
"hashes": [
|
||||
"sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af",
|
||||
"sha256:9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3"
|
||||
],
|
||||
"version": "==19.0"
|
||||
},
|
||||
"pluggy": {
|
||||
"hashes": [
|
||||
"sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc",
|
||||
"sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c"
|
||||
],
|
||||
"version": "==0.12.0"
|
||||
},
|
||||
"py": {
|
||||
"hashes": [
|
||||
"sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa",
|
||||
"sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"
|
||||
],
|
||||
"version": "==1.8.0"
|
||||
},
|
||||
"pygments": {
|
||||
"hashes": [
|
||||
"sha256:71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127",
|
||||
"sha256:881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297"
|
||||
],
|
||||
"version": "==2.4.2"
|
||||
},
|
||||
"pyparsing": {
|
||||
"hashes": [
|
||||
"sha256:1873c03321fc118f4e9746baf201ff990ceb915f433f23b395f5580d1840cb2a",
|
||||
"sha256:9b6323ef4ab914af344ba97510e966d64ba91055d6b9afa6b30799340e89cc03"
|
||||
],
|
||||
"version": "==2.4.0"
|
||||
},
|
||||
"pytest": {
|
||||
"hashes": [
|
||||
"sha256:4a784f1d4f2ef198fe9b7aef793e9fa1a3b2f84e822d9b3a64a181293a572d45",
|
||||
"sha256:926855726d8ae8371803f7b2e6ec0a69953d9c6311fa7c3b6c1b929ff92d27da"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==4.6.3"
|
||||
},
|
||||
"pytest-cov": {
|
||||
"hashes": [
|
||||
"sha256:2b097cde81a302e1047331b48cadacf23577e431b61e9c6f49a1170bbe3d3da6",
|
||||
"sha256:e00ea4fdde970725482f1f35630d12f074e121a23801aabf2ae154ec6bdd343a"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.7.1"
|
||||
},
|
||||
"pytz": {
|
||||
"hashes": [
|
||||
"sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda",
|
||||
"sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141"
|
||||
],
|
||||
"version": "==2019.1"
|
||||
},
|
||||
"pyyaml": {
|
||||
"hashes": [
|
||||
"sha256:57acc1d8533cbe51f6662a55434f0dbecfa2b9eaf115bede8f6fd00115a0c0d3",
|
||||
"sha256:588c94b3d16b76cfed8e0be54932e5729cc185caffaa5a451e7ad2f7ed8b4043",
|
||||
"sha256:68c8dd247f29f9a0d09375c9c6b8fdc64b60810ebf07ba4cdd64ceee3a58c7b7",
|
||||
"sha256:70d9818f1c9cd5c48bb87804f2efc8692f1023dac7f1a1a5c61d454043c1d265",
|
||||
"sha256:86a93cccd50f8c125286e637328ff4eef108400dd7089b46a7be3445eecfa391",
|
||||
"sha256:a0f329125a926876f647c9fa0ef32801587a12328b4a3c741270464e3e4fa778",
|
||||
"sha256:a3c252ab0fa1bb0d5a3f6449a4826732f3eb6c0270925548cac342bc9b22c225",
|
||||
"sha256:b4bb4d3f5e232425e25dda21c070ce05168a786ac9eda43768ab7f3ac2770955",
|
||||
"sha256:cd0618c5ba5bda5f4039b9398bb7fb6a317bb8298218c3de25c47c4740e4b95e",
|
||||
"sha256:ceacb9e5f8474dcf45b940578591c7f3d960e82f926c707788a570b51ba59190",
|
||||
"sha256:fe6a88094b64132c4bb3b631412e90032e8cfe9745a58370462240b8cb7553cd"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==5.1.1"
|
||||
},
|
||||
"recommonmark": {
|
||||
"hashes": [
|
||||
"sha256:a520b8d25071a51ae23a27cf6252f2fe387f51bdc913390d83b2b50617f5bb48",
|
||||
"sha256:c85228b9b7aea7157662520e74b4e8791c5eacd375332ec68381b52bf10165be"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==0.5.0"
|
||||
},
|
||||
"requests": {
|
||||
"hashes": [
|
||||
"sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
|
||||
"sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"
|
||||
],
|
||||
"version": "==2.22.0"
|
||||
},
|
||||
"six": {
|
||||
"hashes": [
|
||||
"sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
|
||||
"sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
|
||||
],
|
||||
"version": "==1.12.0"
|
||||
},
|
||||
"snowballstemmer": {
|
||||
"hashes": [
|
||||
"sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128",
|
||||
"sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89"
|
||||
],
|
||||
"version": "==1.2.1"
|
||||
},
|
||||
"sphinx": {
|
||||
"hashes": [
|
||||
"sha256:22538e1bbe62b407cf5a8aabe1bb15848aa66bb79559f42f5202bbce6b757a69",
|
||||
"sha256:f9a79e746b87921cabc3baa375199c6076d1270cee53915dbd24fdbeaaacc427"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.1.2"
|
||||
},
|
||||
"sphinxcontrib-applehelp": {
|
||||
"hashes": [
|
||||
"sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897",
|
||||
"sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d"
|
||||
],
|
||||
"version": "==1.0.1"
|
||||
},
|
||||
"sphinxcontrib-autoprogram": {
|
||||
"hashes": [
|
||||
"sha256:5c1af55d44c0a4301807eb42174a0f474d97decc137169c7c9305e56ed4d3000",
|
||||
"sha256:7ec6bdf235b491dc693d1a72fb7f9f734db69e29b81333435efb41f09f9bbeef"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==0.1.5"
|
||||
},
|
||||
"sphinxcontrib-devhelp": {
|
||||
"hashes": [
|
||||
"sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34",
|
||||
"sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981"
|
||||
],
|
||||
"version": "==1.0.1"
|
||||
},
|
||||
"sphinxcontrib-htmlhelp": {
|
||||
"hashes": [
|
||||
"sha256:4670f99f8951bd78cd4ad2ab962f798f5618b17675c35c5ac3b2132a14ea8422",
|
||||
"sha256:d4fd39a65a625c9df86d7fa8a2d9f3cd8299a3a4b15db63b50aac9e161d8eff7"
|
||||
],
|
||||
"version": "==1.0.2"
|
||||
},
|
||||
"sphinxcontrib-jsmath": {
|
||||
"hashes": [
|
||||
"sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178",
|
||||
"sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"
|
||||
],
|
||||
"version": "==1.0.1"
|
||||
},
|
||||
"sphinxcontrib-qthelp": {
|
||||
"hashes": [
|
||||
"sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20",
|
||||
"sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f"
|
||||
],
|
||||
"version": "==1.0.2"
|
||||
},
|
||||
"sphinxcontrib-serializinghtml": {
|
||||
"hashes": [
|
||||
"sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227",
|
||||
"sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768"
|
||||
],
|
||||
"version": "==1.1.3"
|
||||
},
|
||||
"urllib3": {
|
||||
"hashes": [
|
||||
"sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1",
|
||||
"sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232"
|
||||
],
|
||||
"version": "==1.25.3"
|
||||
},
|
||||
"wcwidth": {
|
||||
"hashes": [
|
||||
"sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e",
|
||||
"sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c"
|
||||
],
|
||||
"version": "==0.1.7"
|
||||
},
|
||||
"wheel": {
|
||||
"hashes": [
|
||||
"sha256:5e79117472686ac0c4aef5bad5172ea73a1c2d1646b808c35926bd26bdfb0c08",
|
||||
"sha256:62fcfa03d45b5b722539ccbc07b190e4bfff4bb9e3a4d470dd9f6a0981002565"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==0.33.4"
|
||||
},
|
||||
"zipp": {
|
||||
"hashes": [
|
||||
"sha256:8c1019c6aad13642199fbe458275ad6a84907634cc9f0989877ccc4a2840139d",
|
||||
"sha256:ca943a7e809cc12257001ccfb99e3563da9af99d52f261725e96dfe0f9275bc3"
|
||||
],
|
||||
"version": "==0.5.1"
|
||||
}
|
||||
}
|
||||
}
|
29
README.md
29
README.md
|
@ -1,9 +1,9 @@
|
|||
# <a href="https://github.com/jupyterhub/repo2docker"><img src="https://raw.githubusercontent.com/jupyterhub/repo2docker/3fa7444fca6ae2b51e590cbc9d83baf92738ca2a/docs/source/_static/images/repo2docker.png" height="48px" /> repo2docker</a>
|
||||
# <a href="https://github.com/jupyterhub/repo2docker"><img src="https://raw.githubusercontent.com/jupyterhub/repo2docker/8731ecf0967cc5fde028c456f2b92be651ebbc18/docs/source/_static/images/repo2docker.png" height="48px" /> repo2docker</a>
|
||||
|
||||
[![Deploy Status](https://travis-ci.org/jupyterhub/repo2docker.svg?branch=master)](https://travis-ci.org/jupyterhub/repo2docker)
|
||||
[![Build Status](https://github.com/jupyterhub/repo2docker/workflows/Continuous%20Integration/badge.svg)](https://github.com/jupyterhub/repo2docker/actions)
|
||||
[![Build Status](https://github.com/jupyterhub/repo2docker/workflows/Test/badge.svg)](https://github.com/jupyterhub/repo2docker/actions)
|
||||
[![Documentation Status](https://readthedocs.org/projects/repo2docker/badge/?version=latest)](http://repo2docker.readthedocs.io/en/latest/?badge=latest)
|
||||
[![Contribute](https://img.shields.io/badge/I_want_to_contribute!-grey?logo=jupyter)](https://repo2docker.readthedocs.io/en/latest/contributing/contributing.html)
|
||||
[![Docker Repository on Quay](https://img.shields.io/badge/quay.io-container-green "Docker Repository on Quay")](https://quay.io/repository/jupyterhub/repo2docker?tab=tags)
|
||||
|
||||
`repo2docker` fetches a git repository and builds a container image based on
|
||||
the configuration files found in the repository.
|
||||
|
@ -16,8 +16,22 @@ For support questions please search or post to https://discourse.jupyter.org/c/b
|
|||
See the [contributing guide](CONTRIBUTING.md) for information on contributing to
|
||||
repo2docker.
|
||||
|
||||
---
|
||||
|
||||
Please note that this repository is participating in a study into sustainability
|
||||
of open source projects. Data will be gathered about this repository for
|
||||
approximately the next 12 months, starting from 2021-06-11.
|
||||
|
||||
Data collected will include number of contributors, number of PRs, time taken to
|
||||
close/merge these PRs, and issues closed.
|
||||
|
||||
For more information, please visit
|
||||
[our informational page](https://sustainable-open-science-and-software.github.io/) or download our [participant information sheet](https://sustainable-open-science-and-software.github.io/assets/PIS_sustainable_software.pdf).
|
||||
|
||||
---
|
||||
|
||||
## Using repo2docker
|
||||
|
||||
### Prerequisites
|
||||
|
||||
1. Docker to build & run the repositories. The [community edition](https://store.docker.com/search?type=edition&offering=community)
|
||||
|
@ -70,16 +84,19 @@ something like:
|
|||
If you copy paste that URL into your browser you will see a Jupyter Notebook
|
||||
with the contents of the repository you had just built!
|
||||
|
||||
For more information on how to use ``repo2docker``, see the
|
||||
For more information on how to use `repo2docker`, see the
|
||||
[usage guide](http://repo2docker.readthedocs.io/en/latest/usage.html).
|
||||
|
||||
|
||||
## Repository specifications
|
||||
|
||||
Repo2Docker looks for configuration files in the source repository to
|
||||
determine how the Docker image should be built. For a list of the configuration
|
||||
files that ``repo2docker`` can use, see the
|
||||
files that `repo2docker` can use, see the
|
||||
[complete list of configuration files](https://repo2docker.readthedocs.io/en/latest/config_files.html).
|
||||
|
||||
The philosophy of repo2docker is inspired by
|
||||
[Heroku Build Packs](https://devcenter.heroku.com/articles/buildpacks).
|
||||
|
||||
## Docker Image
|
||||
|
||||
Repo2Docker can be run inside a Docker container if access to the Docker Daemon is provided, for example see [BinderHub](https://github.com/jupyterhub/binderhub). Docker images are [published to quay.io](https://quay.io/repository/jupyterhub/repo2docker?tab=tags). The old [Docker Hub image](https://hub.docker.com/r/jupyter/repo2docker) is no longer supported.
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
See https://repo2docker.readthedocs.io/en/latest/contributing/tasks.html#creating-a-release
|
|
@ -1,8 +1,7 @@
|
|||
# Note that there is also a Pipfile for this project if you are updating this
|
||||
# file do not forget to update the Pipfile accordingly
|
||||
pyyaml
|
||||
pytest>=4.6
|
||||
wheel
|
||||
pytest-cov
|
||||
build
|
||||
conda-lock
|
||||
pre-commit
|
||||
pytest-cov
|
||||
pytest>=7
|
||||
pyyaml
|
||||
requests_mock
|
||||
|
|
|
@ -1,20 +1,38 @@
|
|||
# Minimal makefile for Sphinx documentation
|
||||
#
|
||||
# Makefile for Sphinx documentation generated by sphinx-quickstart
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS = -W
|
||||
SPHINXBUILD = python3 -msphinx
|
||||
SPHINXPROJ = repo2docker
|
||||
# You can set these variables from the command line, and also
|
||||
# from the environment for the first two.
|
||||
SPHINXOPTS ?=
|
||||
SPHINXBUILD ?= sphinx-build
|
||||
SOURCEDIR = source
|
||||
BUILDDIR = build
|
||||
BUILDDIR = _build
|
||||
|
||||
# Put it first so that "make" without argument is like "make help".
|
||||
help:
|
||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
||||
|
||||
.PHONY: help Makefile
|
||||
|
||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||
# "make mode" option.
|
||||
%: Makefile
|
||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
||||
|
||||
|
||||
# Manually added commands
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# For local development:
|
||||
# - builds and rebuilds html on changes to source
|
||||
# - starts a livereload enabled webserver and opens up a browser
|
||||
devenv:
|
||||
sphinx-autobuild -b html --open-browser "$(SOURCEDIR)" "$(BUILDDIR)/html" $(SPHINXOPTS)
|
||||
|
||||
# For local development and CI:
|
||||
# - verifies that links are valid
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck "$(SOURCEDIR)" "$(BUILDDIR)/linkcheck" $(SPHINXOPTS)
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
# Note that there is also a Pipfile for this project if you are updating this
|
||||
# file do not forget to update the Pipfile accordingly
|
||||
sphinx>=1.4, !=1.5.4
|
||||
recommonmark
|
||||
sphinxcontrib-autoprogram
|
||||
pydata-sphinx-theme
|
|
@ -5,32 +5,51 @@ pushd %~dp0
|
|||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=python -msphinx
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set SOURCEDIR=source
|
||||
set BUILDDIR=build
|
||||
set SPHINXPROJ=repo2docker
|
||||
set BUILDDIR=_build
|
||||
|
||||
if "%1" == "" goto help
|
||||
if "%1" == "devenv" goto devenv
|
||||
if "%1" == "linkcheck" goto linkcheck
|
||||
goto default
|
||||
|
||||
|
||||
:default
|
||||
%SPHINXBUILD% >NUL 2>NUL
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The Sphinx module was not found. Make sure you have Sphinx installed,
|
||||
echo.then set the SPHINXBUILD environment variable to point to the full
|
||||
echo.path of the 'sphinx-build' executable. Alternatively you may add the
|
||||
echo.Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.http://sphinx-doc.org/
|
||||
echo.The 'sphinx-build' command was not found. Open and read README.md!
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
|
||||
%SPHINXBUILD% -M %1 "%SOURCEDIR%" "%BUILDDIR%" %SPHINXOPTS%
|
||||
goto end
|
||||
|
||||
|
||||
:help
|
||||
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
|
||||
%SPHINXBUILD% -M help "%SOURCEDIR%" "%BUILDDIR%" %SPHINXOPTS%
|
||||
goto end
|
||||
|
||||
|
||||
:devenv
|
||||
sphinx-autobuild >NUL 2>NUL
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The 'sphinx-autobuild' command was not found. Open and read README.md!
|
||||
exit /b 1
|
||||
)
|
||||
sphinx-autobuild -b html --open-browser "%SOURCEDIR%" "%BUILDDIR%/html" %SPHINXOPTS%
|
||||
goto end
|
||||
|
||||
|
||||
:linkcheck
|
||||
%SPHINXBUILD% -b linkcheck "%SOURCEDIR%" "%BUILDDIR%/linkcheck" %SPHINXOPTS%
|
||||
echo.
|
||||
echo.Link check complete; look for any errors in the above output
|
||||
echo.or in "%BUILDDIR%/linkcheck/output.txt".
|
||||
goto end
|
||||
|
||||
|
||||
:end
|
||||
popd
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
myst-parser>=0.18
|
||||
pydata-sphinx-theme>=0.11
|
||||
sphinx-autobuild
|
||||
sphinx-copybutton
|
||||
sphinxcontrib-autoprogram>=0.1.7
|
||||
sphinxext-opengraph
|
||||
sphinxext-rediraffe
|
|
@ -3,9 +3,7 @@
|
|||
This is a living document talking about the architecture of repo2docker
|
||||
from various perspectives.
|
||||
|
||||
```eval_rst
|
||||
.. _buildpacks:
|
||||
```
|
||||
(buildpacks)=
|
||||
|
||||
## Buildpacks
|
||||
|
||||
|
@ -60,7 +58,7 @@ and basic notebook packages (from `repo2docker/buildpacks/conda/environment.yml`
|
|||
to be the same for most repositories built with `CondaBuildPack`, so we want to use
|
||||
[docker layer caching](https://thenewstack.io/understanding-the-docker-cache-for-faster-builds/) as
|
||||
much as possible for performance reasons. Next time a repository is built with `CondaBuildPack`,
|
||||
we can skip straight to the **copy** step (since the base environment docker image *layers* have
|
||||
we can skip straight to the **copy** step (since the base environment docker image _layers_ have
|
||||
already been built and cached).
|
||||
|
||||
The `get_build_scripts` and `get_build_script_files` methods are primarily used for this.
|
||||
|
@ -68,11 +66,11 @@ The `get_build_scripts` and `get_build_script_files` methods are primarily used
|
|||
and `get_build_script_files` is used to copy specific scripts (such as a conda installer) into
|
||||
the image to be run as pat of `get_build_scripts`. Code in either has following constraints:
|
||||
|
||||
1. You can *not* use the contents of repository in them, since this happens before the repository
|
||||
1. You can _not_ use the contents of repository in them, since this happens before the repository
|
||||
is copied into the image. For example, `pip install -r requirements.txt` will not work,
|
||||
since there's no `requirements.txt` inside the image at this point. This is an explicit
|
||||
design decision, to enable better layer caching.
|
||||
2. You *may*, however, read the contents of the repository and modify the scripts emitted based
|
||||
2. You _may_, however, read the contents of the repository and modify the scripts emitted based
|
||||
on that! For example, in `CondaBuildPack`, if there's Python 2 specified in `environment.yml`,
|
||||
a different kind of environment is set up. The reading of the `environment.yml` is performed
|
||||
in the BuildPack itself, and not in the scripts returned by `get_build_scripts`. This is fine.
|
||||
|
@ -121,7 +119,7 @@ a path to a repository. This might be a local path or a URL. Upon being called,
|
|||
`repo2docker` will loop through all ContentProviders and perform the following
|
||||
commands:
|
||||
|
||||
* Run the `detect()` method on the repository path given to `repo2docker`. This
|
||||
- Run the `detect()` method on the repository path given to `repo2docker`. This
|
||||
should return any value other than `None` if the path matches what the ContentProvider is looking
|
||||
for.
|
||||
|
||||
|
@ -129,12 +127,11 @@ commands:
|
|||
> checks whether the argument is a valid local path. If so, then `detect(`
|
||||
> returns a dictionary: `{'path': source}` which defines the path to the repository.
|
||||
> This path is used by `fetch()` to check that it matches the output directory.
|
||||
* If `detect()` returns something other than `None`, run `fetch()` with the
|
||||
|
||||
- If `detect()` returns something other than `None`, run `fetch()` with the
|
||||
returned value as its argument. This should
|
||||
result in the contents of the repository being placed locally to a folder.
|
||||
|
||||
For more information on ContentProviders, take a look at
|
||||
[the ContentProvider base class](https://github.com/jupyterhub/repo2docker/blob/80b979f8580ddef184d2ba7d354e7a833cfa38a4/repo2docker/contentproviders/base.py#L16-L60)
|
||||
which has more explanation.
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,612 @@
|
|||
# Changelog
|
||||
|
||||
## Version 2024.03.0
|
||||
|
||||
([full changelog](https://github.com/jupyterhub/repo2docker/compare/2023.06.0...2024.01.03))
|
||||
|
||||
### New features added
|
||||
|
||||
- Implement support for dockerignore and containerignore [#1205](https://github.com/jupyterhub/repo2docker/pull/1205) ([@sgaist](https://github.com/sgaist))
|
||||
|
||||
### Enhancements made
|
||||
|
||||
- rstudio: log-level info to stderr [#1317](https://github.com/jupyterhub/repo2docker/pull/1317) ([@manics](https://github.com/manics))
|
||||
|
||||
### Bugs fixed
|
||||
|
||||
- Get Zenodo working again [#1315](https://github.com/jupyterhub/repo2docker/pull/1315) ([@manics](https://github.com/manics))
|
||||
|
||||
### Maintenance and upkeep improvements
|
||||
|
||||
- Update mamba to 1.5.7 from 1.5.1, and conda to 24.3.0 from 23.7.4 [#1337](https://github.com/jupyterhub/repo2docker/pull/1337) ([@SylvainCorlay](https://github.com/SylvainCorlay))
|
||||
- Dockerfile: bump alpine from 3.17 to 3.19 and Python 3.10 to 3.11 [#1332](https://github.com/jupyterhub/repo2docker/pull/1332) ([@yuvipanda](https://github.com/yuvipanda))
|
||||
- Upgrade base image from to Ubuntu 22.04 from 18.04 [#1287](https://github.com/jupyterhub/repo2docker/pull/1287) ([@yuvipanda](https://github.com/yuvipanda))
|
||||
|
||||
### Documentation improvements
|
||||
|
||||
- Add Ubuntu 22.04 upgrade guide [#1309](https://github.com/jupyterhub/repo2docker/pull/1309) ([@manics](https://github.com/manics))
|
||||
- Update version of R available [#1288](https://github.com/jupyterhub/repo2docker/pull/1288) ([@yuvipanda](https://github.com/yuvipanda))
|
||||
- Add changelog for 2023.06.0 [#1286](https://github.com/jupyterhub/repo2docker/pull/1286) ([@yuvipanda](https://github.com/yuvipanda))
|
||||
|
||||
### Other merged PRs
|
||||
|
||||
- [pre-commit.ci] pre-commit autoupdate [#1333](https://github.com/jupyterhub/repo2docker/pull/1333) ([@pre-commit-ci](https://github.com/pre-commit-ci))
|
||||
- build(deps): bump codecov/codecov-action from 3 to 4 [#1331](https://github.com/jupyterhub/repo2docker/pull/1331) ([@dependabot](https://github.com/dependabot))
|
||||
- Support pytest=8 [#1330](https://github.com/jupyterhub/repo2docker/pull/1330) ([@manics](https://github.com/manics))
|
||||
- Update versioneer [#1329](https://github.com/jupyterhub/repo2docker/pull/1329) ([@TimoRoth](https://github.com/TimoRoth))
|
||||
- build(deps): bump actions/setup-python from 4 to 5 [#1328](https://github.com/jupyterhub/repo2docker/pull/1328) ([@dependabot](https://github.com/dependabot))
|
||||
- build(deps): bump actions/upload-artifact from 3 to 4 [#1327](https://github.com/jupyterhub/repo2docker/pull/1327) ([@dependabot](https://github.com/dependabot))
|
||||
- Add NYCU Dataverse [#1326](https://github.com/jupyterhub/repo2docker/pull/1326) ([@twtw](https://github.com/twtw))
|
||||
- [pre-commit.ci] pre-commit autoupdate [#1322](https://github.com/jupyterhub/repo2docker/pull/1322) ([@pre-commit-ci](https://github.com/pre-commit-ci))
|
||||
- New domain for Edmond MPG repository [#1321](https://github.com/jupyterhub/repo2docker/pull/1321) ([@haarli](https://github.com/haarli))
|
||||
- [pre-commit.ci] pre-commit autoupdate [#1319](https://github.com/jupyterhub/repo2docker/pull/1319) ([@pre-commit-ci](https://github.com/pre-commit-ci))
|
||||
- [MRG] docs: Add base_image parameter example. [#1318](https://github.com/jupyterhub/repo2docker/pull/1318) ([@hiroyuki-sato](https://github.com/hiroyuki-sato))
|
||||
- Upgrade mamba and refreeze [#1313](https://github.com/jupyterhub/repo2docker/pull/1313) ([@manics](https://github.com/manics))
|
||||
- r: Bump version of rsession-proxy [#1310](https://github.com/jupyterhub/repo2docker/pull/1310) ([@yuvipanda](https://github.com/yuvipanda))
|
||||
- build(deps): bump actions/checkout from 3 to 4 [#1308](https://github.com/jupyterhub/repo2docker/pull/1308) ([@dependabot](https://github.com/dependabot))
|
||||
- build(deps): bump docker/build-push-action from 4 to 5 [#1307](https://github.com/jupyterhub/repo2docker/pull/1307) ([@dependabot](https://github.com/dependabot))
|
||||
- build(deps): bump docker/setup-qemu-action from 2 to 3 [#1306](https://github.com/jupyterhub/repo2docker/pull/1306) ([@dependabot](https://github.com/dependabot))
|
||||
- build(deps): bump docker/setup-buildx-action from 2 to 3 [#1305](https://github.com/jupyterhub/repo2docker/pull/1305) ([@dependabot](https://github.com/dependabot))
|
||||
- Update conda and mamba [#1299](https://github.com/jupyterhub/repo2docker/pull/1299) ([@SylvainCorlay](https://github.com/SylvainCorlay))
|
||||
- Point to official documentation for handling JupyterLab workspace [#1294](https://github.com/jupyterhub/repo2docker/pull/1294) ([@fcollonval](https://github.com/fcollonval))
|
||||
- Fix rstudio-build selection [#1293](https://github.com/jupyterhub/repo2docker/pull/1293) ([@yamaton](https://github.com/yamaton))
|
||||
- [pre-commit.ci] pre-commit autoupdate [#1291](https://github.com/jupyterhub/repo2docker/pull/1291) ([@pre-commit-ci](https://github.com/pre-commit-ci))
|
||||
|
||||
### Contributors to this release
|
||||
|
||||
([GitHub contributors page for this release](https://github.com/jupyterhub/repo2docker/graphs/contributors?from=2023-06-13&to=2024-03-28&type=c))
|
||||
|
||||
[@annakrystalli](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Aannakrystalli+updated%3A2023-06-13..2024-03-28&type=Issues) | [@betatim](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Abetatim+updated%3A2023-06-13..2024-03-28&type=Issues) | [@bollwyvl](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Abollwyvl+updated%3A2023-06-13..2024-03-28&type=Issues) | [@consideRatio](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3AconsideRatio+updated%3A2023-06-13..2024-03-28&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Adependabot+updated%3A2023-06-13..2024-03-28&type=Issues) | [@dolfinus](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Adolfinus+updated%3A2023-06-13..2024-03-28&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Afcollonval+updated%3A2023-06-13..2024-03-28&type=Issues) | [@felder](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Afelder+updated%3A2023-06-13..2024-03-28&type=Issues) | [@haarli](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Ahaarli+updated%3A2023-06-13..2024-03-28&type=Issues) | [@hiroyuki-sato](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Ahiroyuki-sato+updated%3A2023-06-13..2024-03-28&type=Issues) | [@manics](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Amanics+updated%3A2023-06-13..2024-03-28&type=Issues) | [@mathieuboudreau](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Amathieuboudreau+updated%3A2023-06-13..2024-03-28&type=Issues) | [@minrk](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Aminrk+updated%3A2023-06-13..2024-03-28&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Apre-commit-ci+updated%3A2023-06-13..2024-03-28&type=Issues) | [@rgaiacs](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Argaiacs+updated%3A2023-06-13..2024-03-28&type=Issues) | [@ryanlovett](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Aryanlovett+updated%3A2023-06-13..2024-03-28&type=Issues) | [@sgaist](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Asgaist+updated%3A2023-06-13..2024-03-28&type=Issues) | [@SylvainCorlay](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3ASylvainCorlay+updated%3A2023-06-13..2024-03-28&type=Issues) | [@TimoRoth](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3ATimoRoth+updated%3A2023-06-13..2024-03-28&type=Issues) | [@twtw](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Atwtw+updated%3A2023-06-13..2024-03-28&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Awelcome+updated%3A2023-06-13..2024-03-28&type=Issues) | [@yamaton](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Ayamaton+updated%3A2023-06-13..2024-03-28&type=Issues) | [@yuvipanda](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Ayuvipanda+updated%3A2023-06-13..2024-03-28&type=Issues)
|
||||
|
||||
## Version 2023.06.0
|
||||
|
||||
([full changelog](https://github.com/jupyterhub/repo2docker/compare/2022.10.0...2023.06.0))
|
||||
|
||||
### Breaking changes
|
||||
|
||||
- JupyterHub version installed by default upgraded from 1.5 to 3.1.1
|
||||
- Microsoft [killed MRAN](https://techcommunity.microsoft.com/t5/azure-sql-blog/microsoft-r-application-network-retirement/ba-p/3707161), so all package snapshots now come from [Posit Package Manager](https://packagemanager.posit.co/client/). Snapshots from before 2018-12-07 are now no longer available, so you might have to update the snapshot date in your `runtime.txt`.
|
||||
|
||||
### New features added
|
||||
|
||||
- Support Python 3.11 and upgrade jupyterhub from 1.5.0 to 3.1.1 [#1239](https://github.com/jupyterhub/repo2docker/pull/1239) ([@minrk](https://github.com/minrk))
|
||||
- allow user to specify a single port with default command [#918](https://github.com/jupyterhub/repo2docker/pull/918) ([@minrk](https://github.com/minrk))
|
||||
- Let `FROM <base_image>` in the Dockerfile template be configurable [#909](https://github.com/jupyterhub/repo2docker/pull/909) ([@yuvipanda](https://github.com/yuvipanda))
|
||||
|
||||
### Enhancements made
|
||||
|
||||
- Update to mamba 1.4.0 [#1256](https://github.com/jupyterhub/repo2docker/pull/1256) ([@SylvainCorlay](https://github.com/SylvainCorlay))
|
||||
- [MRG] download original file formats from Dataverse #1242 [#1253](https://github.com/jupyterhub/repo2docker/pull/1253) ([@pdurbin](https://github.com/pdurbin))
|
||||
- Add optional registry credentials to push() [#1245](https://github.com/jupyterhub/repo2docker/pull/1245) ([@manics](https://github.com/manics))
|
||||
- Add ARM64 support where possible [#1228](https://github.com/jupyterhub/repo2docker/pull/1228) ([@manics](https://github.com/manics))
|
||||
- Switch default python to 3.10 [#1219](https://github.com/jupyterhub/repo2docker/pull/1219) ([@yuvipanda](https://github.com/yuvipanda))
|
||||
|
||||
### Bugs fixed
|
||||
|
||||
- Microsoft killed MRAN, stop relying on it [#1285](https://github.com/jupyterhub/repo2docker/pull/1285) ([@minrk](https://github.com/minrk))
|
||||
- Update the location of R packagemanager [#1273](https://github.com/jupyterhub/repo2docker/pull/1273) ([@Xarthisius](https://github.com/Xarthisius))
|
||||
- missing `f` in julia fetch error f-string [#1264](https://github.com/jupyterhub/repo2docker/pull/1264) ([@minrk](https://github.com/minrk))
|
||||
- avoid duplicate log statements by memoizing getters [#1248](https://github.com/jupyterhub/repo2docker/pull/1248) ([@minrk](https://github.com/minrk))
|
||||
- Add Conda env library path to RStudio configuration [#1237](https://github.com/jupyterhub/repo2docker/pull/1237) ([@TimStewartJ](https://github.com/TimStewartJ))
|
||||
- Create Julia projects based on binder/Project.toml when found [#1216](https://github.com/jupyterhub/repo2docker/pull/1216) ([@frankier](https://github.com/frankier))
|
||||
- Allow REPO_DIR to be a non-existing folder by creating it and providing the user with permissions [#976](https://github.com/jupyterhub/repo2docker/pull/976) ([@bollwyvl](https://github.com/bollwyvl))
|
||||
|
||||
### Maintenance and upkeep improvements
|
||||
|
||||
- Microsoft killed MRAN, stop relying on it [#1285](https://github.com/jupyterhub/repo2docker/pull/1285) ([@minrk](https://github.com/minrk))
|
||||
- Relax pins to major versions and refreeze, introduce explicit jupyter_server v1 pin [#1283](https://github.com/jupyterhub/repo2docker/pull/1283) ([@consideRatio](https://github.com/consideRatio))
|
||||
- fix github link templates [#1276](https://github.com/jupyterhub/repo2docker/pull/1276) ([@minrk](https://github.com/minrk))
|
||||
- dependabot: monthly updates of github actions [#1262](https://github.com/jupyterhub/repo2docker/pull/1262) ([@consideRatio](https://github.com/consideRatio))
|
||||
- Remove deprecated nteract_on_jupyter [#1259](https://github.com/jupyterhub/repo2docker/pull/1259) ([@yuvipanda](https://github.com/yuvipanda))
|
||||
- disable codecov failures [#1251](https://github.com/jupyterhub/repo2docker/pull/1251) ([@minrk](https://github.com/minrk))
|
||||
- Support Python 3.11 and upgrade jupyterhub from 1.5.0 to 3.1.1 [#1239](https://github.com/jupyterhub/repo2docker/pull/1239) ([@minrk](https://github.com/minrk))
|
||||
- pre-commit update to fix ci [#1238](https://github.com/jupyterhub/repo2docker/pull/1238) ([@minrk](https://github.com/minrk))
|
||||
- Upgrade to mamba 1.1 and enable rich SAT error messages [#1232](https://github.com/jupyterhub/repo2docker/pull/1232) ([@SylvainCorlay](https://github.com/SylvainCorlay))
|
||||
- Upgrade to mamba 1.0 [#1213](https://github.com/jupyterhub/repo2docker/pull/1213) ([@SylvainCorlay](https://github.com/SylvainCorlay))
|
||||
- docker image: update alpine to 3.16 [#1212](https://github.com/jupyterhub/repo2docker/pull/1212) ([@consideRatio](https://github.com/consideRatio))
|
||||
- reconcile CLI/config priority [#1211](https://github.com/jupyterhub/repo2docker/pull/1211) ([@minrk](https://github.com/minrk))
|
||||
- pipfile: pass --clear flag, and do it separetely to not be ignored [#1208](https://github.com/jupyterhub/repo2docker/pull/1208) ([@consideRatio](https://github.com/consideRatio))
|
||||
- run submodule test over https [#1204](https://github.com/jupyterhub/repo2docker/pull/1204) ([@minrk](https://github.com/minrk))
|
||||
- pre-commit: add pyupgrade, isort, and prettier for .md files [#1202](https://github.com/jupyterhub/repo2docker/pull/1202) ([@consideRatio](https://github.com/consideRatio))
|
||||
- Create wheels with the build package, stop calling setup.py directly [#1199](https://github.com/jupyterhub/repo2docker/pull/1199) ([@consideRatio](https://github.com/consideRatio))
|
||||
- Add check-tmp step to local repo tests [#1126](https://github.com/jupyterhub/repo2docker/pull/1126) ([@minrk](https://github.com/minrk))
|
||||
- Set default, type, and help method for engine in argparse [#1073](https://github.com/jupyterhub/repo2docker/pull/1073) ([@jgarte](https://github.com/jgarte))
|
||||
|
||||
### Documentation improvements
|
||||
|
||||
- Fix links to jupyterlab-demo postBuild file [#1282](https://github.com/jupyterhub/repo2docker/pull/1282) ([@fcollonval](https://github.com/fcollonval))
|
||||
- Recreate changelog as markdown [#1281](https://github.com/jupyterhub/repo2docker/pull/1281) ([@yuvipanda](https://github.com/yuvipanda))
|
||||
- fix github link templates [#1276](https://github.com/jupyterhub/repo2docker/pull/1276) ([@minrk](https://github.com/minrk))
|
||||
- update docs for default and supported Python versions [#1250](https://github.com/jupyterhub/repo2docker/pull/1250) ([@minrk](https://github.com/minrk))
|
||||
- docs: add devenv, linkcheck, and refresh misc config etc [#1197](https://github.com/jupyterhub/repo2docker/pull/1197) ([@consideRatio](https://github.com/consideRatio))
|
||||
|
||||
### Other merged PRs
|
||||
|
||||
- build(deps): bump pypa/gh-action-pypi-publish from 1.8.5 to (edit) release/v1 [#1279](https://github.com/jupyterhub/repo2docker/pull/1279) ([@dependabot](https://github.com/dependabot))
|
||||
- [pre-commit.ci] pre-commit autoupdate [#1270](https://github.com/jupyterhub/repo2docker/pull/1270) ([@pre-commit-ci](https://github.com/pre-commit-ci))
|
||||
- build(deps): bump pypa/gh-action-pypi-publish from 1.8.4 to 1.8.5 [#1263](https://github.com/jupyterhub/repo2docker/pull/1263) ([@dependabot](https://github.com/dependabot))
|
||||
- [pre-commit.ci] pre-commit autoupdate [#1261](https://github.com/jupyterhub/repo2docker/pull/1261) ([@pre-commit-ci](https://github.com/pre-commit-ci))
|
||||
- build(deps): bump pypa/gh-action-pypi-publish from 1.8.3 to 1.8.4 [#1260](https://github.com/jupyterhub/repo2docker/pull/1260) ([@dependabot](https://github.com/dependabot))
|
||||
- build(deps): bump pypa/gh-action-pypi-publish from 1.6.4 to 1.8.3 [#1257](https://github.com/jupyterhub/repo2docker/pull/1257) ([@dependabot](https://github.com/dependabot))
|
||||
- [pre-commit.ci] pre-commit autoupdate [#1252](https://github.com/jupyterhub/repo2docker/pull/1252) ([@pre-commit-ci](https://github.com/pre-commit-ci))
|
||||
- Ensure `BuildPack.python_version` is specified [#1249](https://github.com/jupyterhub/repo2docker/pull/1249) ([@minrk](https://github.com/minrk))
|
||||
- Update install-nix.bash [#1244](https://github.com/jupyterhub/repo2docker/pull/1244) ([@robertodr](https://github.com/robertodr))
|
||||
- build(deps): bump docker/build-push-action from 3 to 4 [#1241](https://github.com/jupyterhub/repo2docker/pull/1241) ([@dependabot](https://github.com/dependabot))
|
||||
- Update to `jupyter-resource-usage==0.7.0` [#1236](https://github.com/jupyterhub/repo2docker/pull/1236) ([@jtpio](https://github.com/jtpio))
|
||||
- Also install dev requirements on Gitpod [#1235](https://github.com/jupyterhub/repo2docker/pull/1235) ([@jtpio](https://github.com/jtpio))
|
||||
- Bump to Node 18 [#1234](https://github.com/jupyterhub/repo2docker/pull/1234) ([@jtpio](https://github.com/jtpio))
|
||||
- [pre-commit.ci] pre-commit autoupdate [#1229](https://github.com/jupyterhub/repo2docker/pull/1229) ([@pre-commit-ci](https://github.com/pre-commit-ci))
|
||||
- Quick-fix for Docker image build [#1227](https://github.com/jupyterhub/repo2docker/pull/1227) ([@manics](https://github.com/manics))
|
||||
- Fix tests/external/reproductions.repos.yaml [#1226](https://github.com/jupyterhub/repo2docker/pull/1226) ([@manics](https://github.com/manics))
|
||||
- Fix typo [#1224](https://github.com/jupyterhub/repo2docker/pull/1224) ([@fkohrt](https://github.com/fkohrt))
|
||||
- build(deps): bump pypa/gh-action-pypi-publish from 1.5.1 to 1.6.4 [#1223](https://github.com/jupyterhub/repo2docker/pull/1223) ([@dependabot](https://github.com/dependabot))
|
||||
- [pre-commit.ci] pre-commit autoupdate [#1222](https://github.com/jupyterhub/repo2docker/pull/1222) ([@pre-commit-ci](https://github.com/pre-commit-ci))
|
||||
- ci: cleanup no longer used test logic related to memlimit [#1218](https://github.com/jupyterhub/repo2docker/pull/1218) ([@consideRatio](https://github.com/consideRatio))
|
||||
- [pre-commit.ci] pre-commit autoupdate [#1217](https://github.com/jupyterhub/repo2docker/pull/1217) ([@pre-commit-ci](https://github.com/pre-commit-ci))
|
||||
- ci: use non-deprecated codecov uploader [#1209](https://github.com/jupyterhub/repo2docker/pull/1209) ([@consideRatio](https://github.com/consideRatio))
|
||||
- ci: stop running pre-commit in gha, rely on pre-commit.ci [#1200](https://github.com/jupyterhub/repo2docker/pull/1200) ([@consideRatio](https://github.com/consideRatio))
|
||||
- Initial changelog for 2022.10.0 [#1194](https://github.com/jupyterhub/repo2docker/pull/1194) ([@manics](https://github.com/manics))
|
||||
|
||||
### Contributors to this release
|
||||
|
||||
([GitHub contributors page for this release](https://github.com/jupyterhub/repo2docker/graphs/contributors?from=2022-10-18&to=2023-06-13&type=c))
|
||||
|
||||
[@AliMirlou](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3AAliMirlou+updated%3A2022-10-18..2023-06-13&type=Issues) | [@betatim](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Abetatim+updated%3A2022-10-18..2023-06-13&type=Issues) | [@bollwyvl](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Abollwyvl+updated%3A2022-10-18..2023-06-13&type=Issues) | [@choldgraf](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Acholdgraf+updated%3A2022-10-18..2023-06-13&type=Issues) | [@consideRatio](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3AconsideRatio+updated%3A2022-10-18..2023-06-13&type=Issues) | [@craig-willis](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Acraig-willis+updated%3A2022-10-18..2023-06-13&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Adependabot+updated%3A2022-10-18..2023-06-13&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Afcollonval+updated%3A2022-10-18..2023-06-13&type=Issues) | [@fkohrt](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Afkohrt+updated%3A2022-10-18..2023-06-13&type=Issues) | [@frankier](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Afrankier+updated%3A2022-10-18..2023-06-13&type=Issues) | [@jgarte](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Ajgarte+updated%3A2022-10-18..2023-06-13&type=Issues) | [@jhamman](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Ajhamman+updated%3A2022-10-18..2023-06-13&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Ajtpio+updated%3A2022-10-18..2023-06-13&type=Issues) | [@manics](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Amanics+updated%3A2022-10-18..2023-06-13&type=Issues) | [@meeseeksmachine](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Ameeseeksmachine+updated%3A2022-10-18..2023-06-13&type=Issues) | [@minrk](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Aminrk+updated%3A2022-10-18..2023-06-13&type=Issues) | [@nuest](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Anuest+updated%3A2022-10-18..2023-06-13&type=Issues) | [@pdurbin](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Apdurbin+updated%3A2022-10-18..2023-06-13&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Apre-commit-ci+updated%3A2022-10-18..2023-06-13&type=Issues) | [@robertodr](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Arobertodr+updated%3A2022-10-18..2023-06-13&type=Issues) | [@SylvainCorlay](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3ASylvainCorlay+updated%3A2022-10-18..2023-06-13&type=Issues) | [@TimStewartJ](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3ATimStewartJ+updated%3A2022-10-18..2023-06-13&type=Issues) | [@trybik](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Atrybik+updated%3A2022-10-18..2023-06-13&type=Issues) | [@welcome](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Awelcome+updated%3A2022-10-18..2023-06-13&type=Issues) | [@westurner](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Awesturner+updated%3A2022-10-18..2023-06-13&type=Issues) | [@Xarthisius](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3AXarthisius+updated%3A2022-10-18..2023-06-13&type=Issues) | [@yamaton](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Ayamaton+updated%3A2022-10-18..2023-06-13&type=Issues) | [@yuvipanda](https://github.com/search?q=repo%3Ajupyterhub%2Frepo2docker+involves%3Ayuvipanda+updated%3A2022-10-18..2023-06-13&type=Issues)
|
||||
|
||||
## Version 2022.10.0
|
||||
|
||||
[Full changelog](https://github.com/jupyterhub/repo2docker/compare/2022.02.0...2022.10.0)
|
||||
|
||||
### New features
|
||||
|
||||
- Update Jupyter dependencies {pr}`1193` by {user}`jtpio`
|
||||
- add Python 3.10 base environment {pr}`1175` by {user}`minrk`
|
||||
- Bump default R version to 4.2 from 4.1, and let R 3.4 go from 3.4.0 to 3.4.4 {pr}`1165` by {user}`yuvipanda`
|
||||
- Support pulling from zenodo sandbox too {pr}`1169` by {user}`yuvipanda`
|
||||
- Add MPDL Dataverse {pr}`1167` by {user}`wilhelmfrank`
|
||||
- Add JPL Dataverse {pr}`1163` by {user}`foobarbecue`
|
||||
- upgrade RStudio Server to v2022.02.1 {pr}`1148` by {user}`aplamada`
|
||||
- Pass build_args to `render()` during `--no-build` for consistency with regular builds {pr}`1135` by {user}`yoogottamk`
|
||||
|
||||
### Documentation improvements
|
||||
|
||||
- Update 'how to get R' section {pr}`1147` by {user}`yuvipanda`
|
||||
- Post release fixes {pr}`1133` by {user}`manics`
|
||||
|
||||
### API changes
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- consistent log handling when not using JSON loggers {pr}`1177` by {user}`minrk`
|
||||
- Fix Read-Only filesystem permission issue for log file {pr}`1156` by {user}`timeu`
|
||||
- handle permission issue writing .jupyter-server-log.txt in REPO_DIR {pr}`1151` by {user}`pymonger`
|
||||
- handle r version being unspecified in environment.yml {pr}`1141` by {user}`minrk`
|
||||
|
||||
### Other merged PRs
|
||||
|
||||
- Remove conda buildpacks pin of r-irkernel to 1.2 {pr}`1191` by {user}`consideRatio`
|
||||
- ci: refactor julia/r/conda tests - now ~25 min instead of ~50 min {pr}`1188` by {user}`consideRatio`
|
||||
- ci: general refresh of github workflows, update gha versions and let dependabot do it, etc. {pr}`1186` by {user}`consideRatio`
|
||||
- Use enum to standardise `phase` {pr}`1185` by {user}`manics`
|
||||
- fail on unsupported Python {pr}`1184` by {user}`minrk`
|
||||
- mount wheels from build stage instead of copying them {pr}`1182` by {user}`minrk`
|
||||
- get CI working again {pr}`1178` by {user}`minrk`
|
||||
- explicitly build linux/amd64 images {pr}`1176` by {user}`minrk`
|
||||
- Freeze.py update {pr}`1173` by {user}`manics`
|
||||
- Bump version of nodejs {pr}`1172` by {user}`yuvipanda`
|
||||
- Update mamba {pr}`1171` by {user}`SylvainCorlay`
|
||||
- ci: switch to using a 2fa enabled accounts pypi api-token {pr}`1166` by {user}`consideRatio`
|
||||
- Get R from RStudio provided apt packages (.deb files) {pr}`1161` by {user}`yuvipanda`
|
||||
- Shallow clone HEAD {pr}`1160` by {user}`daradib`
|
||||
- Update black version {pr}`1150` by {user}`yuvipanda`
|
||||
- Update base notebook packages {pr}`1149` by {user}`yuvipanda`
|
||||
- Update Dockerfile to current Alpine (ALPINE_VERSION=3.15.0) {pr}`1136` by {user}`holzman`
|
||||
- update Python in some dockerfile tests {pr}`1130` by {user}`minrk`
|
||||
|
||||
## Version 2022.02.0
|
||||
|
||||
[Full changelog](https://github.com/jupyterhub/repo2docker/compare/2021.08.0...2022.02.0)
|
||||
|
||||
### New features
|
||||
|
||||
- Update ipywidgets jupyter-offlinenotebook jupyterlab {pr}`1127` by {user}`manics`
|
||||
- Allow passing in extra args to Docker initialization {pr}`1124` by {user}`yuvipanda`
|
||||
- Allow passing in traitlets via commandline {pr}`1123` by {user}`yuvipanda`
|
||||
- Bump default R version to 4.1 {pr}`1107` by {user}`yuvipanda`
|
||||
- Update jupyterlab 3.2.5 jupyter-resource-usage 0.6.1 {pr}`1105` by {user}`manics`
|
||||
- Get binary R packages from packagemanager.rstudio.com {pr}`1104` by {user}`yuvipanda`
|
||||
- Support R 4.1 {pr}`1102` by {user}`yuvipanda`
|
||||
- Add command line option to pass extra build args {pr}`1100` by {user}`TimoRoth`
|
||||
- Set labels when building image from Dockerfile {pr}`1097` by {user}`TimoRoth`
|
||||
- jupyterlab 3.1.17 {pr}`1092` by {user}`minrk`
|
||||
- Bump JupyterLab to 3.1.11 {pr}`1081` by {user}`choldgraf`
|
||||
- Bootstrap base env with micromamba {pr}`1062` by {user}`wolfv`
|
||||
- Default UI to JupyterLab {pr}`1035` by {user}`SylvainCorlay`
|
||||
|
||||
### API changes
|
||||
|
||||
### Bug fixes
|
||||
|
||||
### Other merged PRs
|
||||
|
||||
- Put micromamba in /usr/local/bin and use mamba for installs {pr}`1128` by {user}`minrk`
|
||||
- Remove deprecated calls to distutils {pr}`1122` by {user}`minrk`
|
||||
- Delete /tmp/downloaded_packages after running install.R {pr}`1119` by {user}`yuvipanda`
|
||||
- Use a smaller R library in our tests {pr}`1118` by {user}`yuvipanda`
|
||||
- Only get R itself (r-base-core) from apt, not CRAN packages {pr}`1117` by {user}`minrk`
|
||||
- set USER root after each directive block {pr}`1115` by {user}`minrk`
|
||||
- Say 'apt repository' rather than PPA {pr}`1111` by {user}`yuvipanda`
|
||||
- add tests for R conda {pr}`1108` by {user}`aplamada`
|
||||
- Add help message to freeze.py {pr}`1106` by {user}`manics`
|
||||
- Quieter R builds {pr}`1103` by {user}`yuvipanda`
|
||||
- update user_interface doc to reflect that lab is default {pr}`1085` by {user}`minrk`
|
||||
- Updates to dev docs + Recommonmark -> MyST Parser {pr}`1082` by {user}`choldgraf`
|
||||
- Fix Docker build (again) {pr}`1078` by {user}`manics`
|
||||
- \[mrg\] \_\_init\_\_.py: r_version: fixed description {pr}`1074` by {user}`magnush0lm`
|
||||
- Typo fix in utils docstring {pr}`1072` by {user}`jgarte`
|
||||
- Rename requirements.py-3.5.txt to requirements.py-3.5.pip {pr}`1061` by {user}`manics`
|
||||
- Remove nodesource' nodejs {pr}`847` by {user}`yuvipanda`
|
||||
|
||||
## Version 2021.08.0
|
||||
|
||||
[Full changelog](https://github.com/jupyterhub/repo2docker/compare/2021.03.0...2021.08.0)
|
||||
|
||||
The repo2docker container image has moved to [quay.io/jupyterhub/repo2docker](https://quay.io/repository/jupyterhub/repo2docker?tab=tags)
|
||||
|
||||
### New features
|
||||
|
||||
- always unpack a single zenodo zip {pr}`1043` by {user}`akhmerov`
|
||||
- Refreeze with conda-lock {pr}`1024` by {user}`minrk`
|
||||
- Refine buffered output debugging {pr}`1016` by {user}`minrk`
|
||||
- reimplement entrypoint in Python {pr}`1014` by {user}`minrk`
|
||||
- Fetch available Julia versions from hosted json {pr}`994` by {user}`tomyun`
|
||||
- Define an interface for Container engines {pr}`848` by {user}`manics`
|
||||
|
||||
### API changes
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Workaround docker-py dependency's failure to import six {pr}`1066:` by {user}`consideratio`
|
||||
- fix: add chardet, a not explicitly declared dependency {pr}`1064` by {user}`johnhoman`
|
||||
- Add build-base to build stage of docker image {pr}`1051` by {user}`yuvipanda`
|
||||
- Fix regression in hydroshare introduced after moving to requests {pr}`1034` by {user}`MridulS`
|
||||
|
||||
### Other merged PRs
|
||||
|
||||
- Update README quay.io URL, Add docker latest tag {pr}`1075` by {user}`manics`
|
||||
- GitHub workflow build and push to Docker hub {pr}`1071` by {user}`manics`
|
||||
- Rename master branch to main {pr}`1068` by {user}`manics`
|
||||
- Remove Pipfile & Pipfile.lock {pr}`1054` by {user}`yuvipanda`
|
||||
- Remove CircleCI docs build {pr}`1053` by {user}`yuvipanda`
|
||||
- Pin doc requirements to avoid CI breakages {pr}`1052` by {user}`manics`
|
||||
- Stop using deprecated add_stylesheet in sphinx {pr}`1050` by {user}`yuvipanda`
|
||||
- Add study participation notice to readme {pr}`1046` by {user}`sgibson91`
|
||||
- Bump urllib3 from 1.26.4 to 1.26.5 {pr}`1045` by {user}`dependabot`
|
||||
- State newly used installation command {pr}`1040` by {user}`fkohrt`
|
||||
- Bump pyyaml from 5.1.1 to 5.4 {pr}`1029` by {user}`dependabot`
|
||||
- Set default Julia version to 1.6 {pr}`1028` by {user}`tomyun`
|
||||
- Fix logo URL in README {pr}`1027` by {user}`betatim`
|
||||
|
||||
## Version 2021.03.0
|
||||
|
||||
[Full changelog](https://github.com/jupyterhub/repo2docker/compare/2021.01.0...2021.03.0)
|
||||
|
||||
### New features
|
||||
|
||||
- freeze with mamba, add 3.9 {pr}`1017` by {user}`minrk`
|
||||
- Add GH workflow to push releases to PYPi and introduce CalVer {pr}`1004` by {user}`betatim`
|
||||
- Add entrypoint script which automatically propagates \*\_PROXY env vars… {pr}`1003` (\[@g-braeunlich\](<https://github.com/g-braeunlich>))
|
||||
- Update to JupyterLab 3.0 {pr}`996` by {user}`jtpio`
|
||||
- Fetch available Julia versions from hosted json {pr}`994` by {user}`tomyun`
|
||||
- Add a contentprovider for Software Heritage persistent ID (SWHID) {pr}`988` by {user}`douardda`
|
||||
- Stream jupyter server logs to a file {pr}`987` by {user}`betatim`
|
||||
- add 4.0, 4.0.2 to list of supported R versions {pr}`960` by {user}`minrk`
|
||||
|
||||
### API changes
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- fix dataverse regression introduced in last release {pr}`1011` by {user}`MridulS`
|
||||
- buildpacks.r: dont use apt-key directly to respect \*\_proxy env vars {pr}`1019` (\[@g-braeunlich\](<https://github.com/g-braeunlich>))
|
||||
|
||||
### Other merged PRs
|
||||
|
||||
- Cleanup install_requires including duplicates {pr}`1020` by {user}`manics`
|
||||
- bump docker action version {pr}`1018` by {user}`minrk`
|
||||
- bump python in circleci test {pr}`1013` by {user}`minrk`
|
||||
- Investigating the missing logs {pr}`1008` by {user}`betatim`
|
||||
- Experiment with different install mechanism to get code coverage stats again {pr}`982` by {user}`betatim`
|
||||
|
||||
## Version 2021.01.0
|
||||
|
||||
[Full changelog](https://github.com/jupyterhub/repo2docker/compare/0.11.0...2021.01.0)
|
||||
|
||||
### New features
|
||||
|
||||
- Replace urllib by requests in contentproviders {pr}`993` by {user}`douardda`
|
||||
- Use mambaforge instead of miniforge {pr}`992` by {user}`SylvainCorlay`
|
||||
- buildpacks/nix: 2.3 -> 2.3.9 {pr}`991` by {user}`FRidh`
|
||||
- Drop support for stencila {pr}`985` by {user}`minrk`
|
||||
- Add Julia 1.5.3 support {pr}`984` by {user}`tomyun`
|
||||
- Update to node 14 {pr}`983` by {user}`jtpio`
|
||||
- Mamba 0.6.1 {pr}`979` by {user}`minrk`
|
||||
- Ensure REPO_DIR owned by NB_USER {pr}`975` by {user}`tomyun`
|
||||
- Add Julia 1.5.2 support {pr}`965` by {user}`tomyun`
|
||||
- Mamba number three {pr}`962` by {user}`SylvainCorlay`
|
||||
- Add a Mercurial contentprovider {pr}`950` by {user}`paugier`
|
||||
- Add Julia 1.5.1 support {pr}`949` by {user}`tomyun`
|
||||
- Handle requirements.txt with `--pre` lines {pr}`943` by {user}`betatim`
|
||||
- Add Julia 1.5.0 support {pr}`938` by {user}`tomyun`
|
||||
- Update JupyterLab to 2.2.0 {pr}`933` by {user}`manics`
|
||||
- Bump nix version to 2.3 {pr}`915` by {user}`jboynyc`
|
||||
- Add nbresuse==0.3.3 (full freeze.py) {pr}`904` by {user}`manics`
|
||||
- Add Julia 1.4.2 support {pr}`899` by {user}`davidanthoff`
|
||||
- Bump version of irkernel for R 4.0 {pr}`892` by {user}`betatim`
|
||||
- chmod start script from repo2docker-entrypoint {pr}`886` by {user}`danlester`
|
||||
- pypi jupyter-offlinenotebook==0.1.0 {pr}`880` by {user}`manics`
|
||||
- Add support for Julia 1.4.1 {pr}`878` by {user}`davidanthoff`
|
||||
- Change --env option to work like docker's {pr}`874` by {user}`hwine`
|
||||
- Add support for Julia 1.4.0 {pr}`870` by {user}`davidanthoff`
|
||||
- Update server proxy and rsession proxy {pr}`869` by {user}`betatim`
|
||||
- Use miniforge instead of miniconda to get conda {pr}`859` by {user}`yuvipanda`
|
||||
- If looking for latest MRAN URL try earlier snapshots too {pr}`851` by {user}`manics`
|
||||
- Add jupyter-offlinenotebook extension {pr}`845` by {user}`betatim`
|
||||
|
||||
### API changes
|
||||
|
||||
- Bump Python requirement to 3.6 from 3.5 {pr}`951` by {user}`betatim`
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- buildpacks/nix: disable sandboxing (bugfix) {pr}`990` by {user}`FRidh`
|
||||
- avoid deprecated import of collections.abc {pr}`924` by {user}`minrk`
|
||||
- Add missing “:” for R code {pr}`900` by {user}`adamhsparks`
|
||||
- Fix RShiny proxy {pr}`893` by {user}`betatim`
|
||||
- Work around a Julia bug {pr}`879` by {user}`davidanthoff`
|
||||
- Fix typo {pr}`862` by {user}`jtpio`
|
||||
|
||||
### Other merged PRs
|
||||
|
||||
- Fix figshare test {pr}`1001` by {user}`manics`
|
||||
- Weekly test of master to check for external failures {pr}`998` by {user}`manics`
|
||||
- Remove reference to `master` branch from CLI doc {pr}`977` by {user}`betatim`
|
||||
- add chown to COPY commands to reduce layer count {pr}`969` by {user}`bollwyvl`
|
||||
- set TIMEFORMAT for timed bash conda commands {pr}`966` by {user}`manics`
|
||||
- Disable jupyterlab extension build minimize {pr}`963` by {user}`manics`
|
||||
- Bump Black version to 20.8b1 and use --target-version=py36 {pr}`955` by {user}`paugier`
|
||||
- Add workflow to build Docker image {pr}`954` by {user}`manics`
|
||||
- Crosslink 'Configuring your repository' with usage {pr}`952` by {user}`manics`
|
||||
- Add `www-frame-origin=same` to /etc/rstudio/rserver.conf {pr}`944` (\[@rkevin-arch\](<https://github.com/rkevin-arch>))
|
||||
- GitHub Actions {pr}`942` by {user}`minrk`
|
||||
- stop running tests on travis {pr}`940` by {user}`minrk`
|
||||
- update repo URLs for jupyterhub/repo2docker {pr}`939` by {user}`minrk`
|
||||
- Upgrade custom test infrastructure for pytest 6.0.0 {pr}`936` by {user}`betatim`
|
||||
- validate_image_name: mention lowercase, fix formatting {pr}`934` by {user}`manics`
|
||||
- Update snapshot date for simple R test {pr}`930` by {user}`betatim`
|
||||
- little improvement for testing binder_dir {pr}`928` by {user}`bitnik`
|
||||
- update docs for config dirs {pr}`927` by {user}`bitnik`
|
||||
- doc: runtime.txt installs python x.y (& concise rewording) {pr}`914` by {user}`mdeff`
|
||||
- doc: environment.yml installs a conda env, not only python {pr}`913` by {user}`mdeff`
|
||||
- Make the memory limit test simpler {pr}`912` by {user}`betatim`
|
||||
- Add gitpod.io config for docs {pr}`908` by {user}`betatim`
|
||||
- fix repo2docker logo in Sphinx docs {pr}`906` by {user}`trallard`
|
||||
- Update Dockerfile to add Docker {pr}`896` by {user}`hamelsmu`
|
||||
- Document test failure workarounds {pr}`890` by {user}`hwine`
|
||||
- Workaround Docker issue impacting some tests on macOS {pr}`882` by {user}`hwine`
|
||||
- \[docs\] fix grammatical error in section title {pr}`872` by {user}`jameslamb`
|
||||
- Fix long form args requirements {pr}`866` by {user}`betatim`
|
||||
- Adopt new Sphinx theme name {pr}`864` by {user}`xhochy`
|
||||
- Document loose conda export with --from-history {pr}`863` by {user}`xhochy`
|
||||
- utils.execute_cmd flush buffer if no EOL {pr}`850` by {user}`manics`
|
||||
- Update black 19.10b0, target Python 3.5 {pr}`849` by {user}`manics`
|
||||
- docs: postBuild warn about shell script errors being ignored {pr}`844` by {user}`manics`
|
||||
- Update changelog for 0.11.0 {pr}`842` by {user}`betatim`
|
||||
|
||||
## Version 0.11.0
|
||||
|
||||
Release date: 2020-02-05
|
||||
|
||||
### New features
|
||||
|
||||
- Add support for Figshare in {pr}`788` by {user}`nuest`.
|
||||
- Add support for Dataverse in {pr}`739` by {user}`Xarthisius`.
|
||||
- Add support for configuring the version of R installed in {pr}`772` by
|
||||
{user}`betatim`.
|
||||
- Add support for Julia 1.2.0 in {pr}`768` by {user}`davidanthoff`.
|
||||
- Add support for Julia 1.3.0 and 1.0.5 in {pr}`822` by {user}`davidanthoff`.
|
||||
- Add support for Julia 1.3.1 in {pr}`831` by {user}`davidanthoff`.
|
||||
- Update Miniconda to 4.7.10 in {pr}`769` by {user}`davidrpugh`.
|
||||
- Update IRKernel to 1.0.2 in {pr}`770` by {user}`GeorgianaElena`.
|
||||
- Update RStudio to 1.2 in {pr}`803` by {user}`pablobernabeu`.
|
||||
- Switch to "pandas" sphinx theme for documentation in {pr}`816` by {user}`choldgraf`.
|
||||
- Add content provider documentation in {pr}`824` by {user}`choldgraf`.
|
||||
- Remove legacy buildpack in {pr}`829` by {user}`betatim`.
|
||||
- Add support for automatic RStudio install when using R packages via conda
|
||||
in {pr}`838` by {user}`xhochy`.
|
||||
- Add support for Python 3.8 in {pr}`840` by {user}`minrk`.
|
||||
- Add Hydroshare as content provider in {pr}`800` by {user}`sblack-usu`.
|
||||
- Update to Jupyter Notebook 6 and Lab 1.2 in {pr}`839` by {user}`minrk`.
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Fix for submodule check out in {pr}`809` by {user}`davidbrochart`.
|
||||
- Handle `requirements.txt` files with different encodings in {pr}`771`
|
||||
by {user}`GeorgianaElena`.
|
||||
- Update to nteract-on-jupyter 2.1.3 in {pr}`2.1.3 by :user:`betatim`.
|
||||
- Use `useradd --no-log-init` to fix exhausting disk space in {pr}`804` by
|
||||
{user}`manics.`
|
||||
- Add help text for commandline arguments in {pr}`517` by {user}`yuvipanda`.
|
||||
- Fix submodule checkout in {pr}`809` by {user}`davidbrochart`.
|
||||
|
||||
## Version 0.10.0
|
||||
|
||||
Release date: 2019-08-07
|
||||
|
||||
### New features
|
||||
|
||||
- Increased minimum Python version supported for running `repo2docker` itself
|
||||
to Python 3.5 in {pr}`684` by {user}`betatim`.
|
||||
- Support for `Pipfile` and `Pipfile.lock` implemented in {pr}`649` by
|
||||
{user}`consideratio`.
|
||||
- Use only conda packages for our base environments in {pr}`728` by
|
||||
{user}`scottyhq`.
|
||||
- Fast rebuilds when repo dependencies haven't changed by {user}`minrk` and
|
||||
{user}`betatim` in {pr}`743`, {pr}`752`, {pr}`718` and {pr}`716`.
|
||||
- Add support for Zenodo in {pr}`693` by {user}`betatim`.
|
||||
- Add support for general Invenio repositories in {pr}`704` by {user}`tmorrell`.
|
||||
- Add support for julia 1.0.4 and 1.1.1 in {pr}`710` by {user}`davidanthoff`.
|
||||
- Bump Conda from 4.6.14 to 4.7.5 in {pr}`719` by {user}`davidrpugh`.
|
||||
|
||||
### API changes
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Prevent building the image as root if --user-id and --user-name are not specified
|
||||
in {pr}`676` by {user}`Xarthisius`.
|
||||
- Add bash to Dockerfile to fix usage of private repos with git-crendential-env in
|
||||
{pr}`738` by {user}`eexwhyzee`.
|
||||
- Fix memory limit enforcement in {pr}`677` by {user}`betatim`.
|
||||
|
||||
## Version 0.9.0
|
||||
|
||||
Release date: 2019-05-05
|
||||
|
||||
### New features
|
||||
|
||||
- Support for julia `Project.toml`, `JuliaProject.toml` and `Manifest.toml` files in {pr}`595` by
|
||||
{user}`davidanthoff`
|
||||
- Set JULIA_PROJECT globally, so that every julia instance starts with the
|
||||
julia environment activated in {pr}`612` by {user}`davidanthoff`.
|
||||
- Update Miniconda version to 4.6.14 and Conda version to 4.6.14 in {pr}`637` by
|
||||
{user}`jhamman`
|
||||
- Install notebook into `notebook` env instead of `root`.
|
||||
Activate conda environments and shell integration via ENTRYPOINT
|
||||
in {pr}`651` by {user}`minrk`
|
||||
- Support for `.binder` directory in addition to `binder` directory for location of
|
||||
configuration files, in {pr}`653` by {user}`jhamman`.
|
||||
- Updated contributor guide and issue templates for bugs, feature requests,
|
||||
and support questions in {pr}`654` and {pr}`655` by {user}`KirstieJane` and
|
||||
{user}`betatim`.
|
||||
- Create a page naming and describing the "Reproducible Execution
|
||||
Environment Specification" (the specification used by repo2docker)
|
||||
in {pr}`662` by {user}`choldgraf`.
|
||||
|
||||
### API changes
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Install IJulia kernel into \$\{NB_PYTHON_PREFIX}/share/jupyter in {pr}`622` by
|
||||
{user}`davidanthoff`.
|
||||
- Ensure git submodules are updated and initilized correctly in {pr}`639` by
|
||||
{user}`djhoese`.
|
||||
- Use archive.debian.org as source for the debian jessie based legacy
|
||||
buildpack in {pr}`633` by {user}`betatim`.
|
||||
- Update to version 5.7.6 of the `notebook` package used in all environments
|
||||
in {pr}`628` by {user}`betatim`.
|
||||
- Update to version 5.7.8 of the `notebook` package and version 2.0.12 of
|
||||
`nteract-on-jupyter` in {pr}`650` by {user}`betatim`.
|
||||
- Switch to newer version of jupyter-server-proxy to fix websocket handling
|
||||
in {pr}`646` by {user}`betatim`.
|
||||
- Update to pip version 19.0.3 in {pr}`647` by {user}`betatim`.
|
||||
- Ensure ENTRYPOINT is an absolute path in {pr}`657` by {user}`yuvipanda`.
|
||||
- Fix handling of `--build-memory-limit` values without a postfix in {pr}`652`
|
||||
by {user}`betatim`.
|
||||
|
||||
## Version 0.8.0
|
||||
|
||||
Release date: 2019-02-21
|
||||
|
||||
### New features
|
||||
|
||||
- Add additional metadata to docker images about how they were built {pr}`500` by
|
||||
{user}`jrbourbeau`.
|
||||
- Allow users to install global NPM packages: {pr}`573` by {user}`GladysNalvarte`.
|
||||
- Add documentation on switching the user interface presented by a
|
||||
container. {pr}`568` by user:`choldgraf`.
|
||||
- Increased test coverage to ~87% by {user}`betatim` and {user}`yuvipanda`.
|
||||
- Documentation improvements and additions by {user}`lheagy`, {user}`choldgraf`.
|
||||
- Remove f-strings from code base, repo2docker is compatible with Python 3.4+
|
||||
again by {user}`jrbourbeau` in {pr}`520`.
|
||||
- Local caching of previously built repostories to speed up launch times
|
||||
by {user}`betatim` in {pr}`511`.
|
||||
- Make destination of repository content in the container image configurable
|
||||
on the CLI via `--target-repo-dir`. By {user}`yuvipanda` in {pr}`507`.
|
||||
- Expose CPU limit settings for building and running containers. By
|
||||
{user}`GladysNalvarte` in {pr}`579`.
|
||||
- Make Python 3.7 the default version. By {user}`yuvipanda` and {user}`minrk` in
|
||||
{pr}`539`.
|
||||
|
||||
### API changes
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- In some cases the version of conda installed in images was not pinned and got
|
||||
upgraded by user actions. Fixed in {pr}`576` by {user}`minrk`.
|
||||
- Fix an error related to checking if debug output was enabled or not:
|
||||
{pr}`575` by {user}`yuvipanda`.
|
||||
- Update nteract frontend to version 2.0.0 by {user}`yuvipanda` in {pr}`571`.
|
||||
- Fix quoting issue in `GIT_CREDENTIAL_ENV` environment variable by
|
||||
{user}`minrk` in {pr}`572`.
|
||||
- Change to using the first 8 characters of each Git commit, not the last 8,
|
||||
to tag each built docker image of repo2docker itself. {user}`minrk` in {pr}`562`.
|
||||
- Allow users to select the Julia when using a `requirements.txt` by
|
||||
{user}`yuvipanda` in {pr}`557`.
|
||||
- Set `JULIA_DEPOT_PATH` to install packages outside the home directory by
|
||||
{user}`yuvipanda` in {pr}`555`.
|
||||
- Update to Jupyter notebook 5.7.4 {pr}`519` by {user}`minrk`.
|
||||
|
||||
## Version 0.7.0
|
||||
|
||||
Release date: 2018-12-12
|
||||
|
||||
### New features
|
||||
|
||||
- Build from sub-directory: build the image based on a sub-directory of a
|
||||
repository {pr}`413` by {user}`dsludwig`.
|
||||
- Editable mode: allows editing a local repository from a live container
|
||||
{pr}`421` by {user}`evertrol`.
|
||||
- Change log added {pr}`426` by {user}`evertrol`.
|
||||
- Documentation: improved the documentation for contributors {pr}`453` by
|
||||
{user}`choldgraf`.
|
||||
- Buildpack: added support for the nix package manager {pr}`407` by
|
||||
{user}`costrouc`.
|
||||
- Log a 'success' message when push is complete {pr}`482` by
|
||||
{user}`yuvipanda`.
|
||||
- Allow specifying images to reuse cache from {pr}`478` by
|
||||
{user}`yuvipanda`.
|
||||
- Add JupyterHub back to base environment {pr}`476` by {user}`yuvipanda`.
|
||||
- Repo2docker has a logo! by {user}`agahkarakuzu` and {user}`blairhudson`.
|
||||
- Improve support for Stencila, including identifying stencila runtime from
|
||||
document context {pr}`457` by {user}`nuest`.
|
||||
|
||||
### API changes
|
||||
|
||||
- Add content provider abstraction {pr}`421` by {user}`betatim`.
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Update to Jupyter notebook 5.7 {pr}`475` by {user}`betatim` and {user}`minrk`.
|
||||
|
||||
## Version 0.6
|
||||
|
||||
Released 2018-09-09
|
||||
|
||||
## Version 0.5
|
||||
|
||||
Released 2018-02-07
|
||||
|
||||
## Version 0.4.1
|
||||
|
||||
Released 2018-09-06
|
||||
|
||||
## Version 0.2
|
||||
|
||||
Released 2018-05-25
|
||||
|
||||
## Version 0.1.1
|
||||
|
||||
Released 2017-04-19
|
||||
|
||||
## Version 0.1
|
||||
|
||||
Released 2017-04-14
|
|
@ -1,245 +0,0 @@
|
|||
=========
|
||||
Changelog
|
||||
=========
|
||||
|
||||
|
||||
Version 0.11.0
|
||||
==============
|
||||
|
||||
Release date: 2020-02-05
|
||||
|
||||
New features
|
||||
------------
|
||||
- Add support for Figshare in :pr:`788` by :user:`nuest`.
|
||||
- Add support for Dataverse in :pr:`739` by :user:`Xarthisius`.
|
||||
- Add support for configuring the version of R installed in :pr:`772` by
|
||||
:user:`betatim`.
|
||||
- Add support for Julia 1.2.0 in :pr:`768` by :user:`davidanthoff`.
|
||||
- Add support for Julia 1.3.0 and 1.0.5 in :pr:`822` by :user:`davidanthoff`.
|
||||
- Add support for Julia 1.3.1 in :pr:`831` by :user:`davidanthoff`.
|
||||
- Update Miniconda to 4.7.10 in :pr:`769` by :user:`davidrpugh`.
|
||||
- Update IRKernel to 1.0.2 in :pr:`770` by :user:`GeorgianaElena`.
|
||||
- Update RStudio to 1.2 in :pr:`803` by :user:`pablobernabeu`.
|
||||
- Switch to "pandas" sphinx theme for documentation in :pr:`816` by :user:`choldgraf`.
|
||||
- Add content provider documentation in :pr:`824` by :user:`choldgraf`.
|
||||
- Remove legacy buildpack in :pr:`829` by :user:`betatim`.
|
||||
- Add support for automatic RStudio install when using R packages via conda
|
||||
in :pr:`838` by :user:`xhochy`.
|
||||
- Add support for Python 3.8 in :pr:`840` by :user:`minrk`.
|
||||
- Add Hydroshare as content provider in :pr:`800` by :user:`sblack-usu`.
|
||||
- Update to Jupyter Notebook 6 and Lab 1.2 in :pr:`839` by :user:`minrk`.
|
||||
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
- Fix for submodule check out in :pr:`809` by :user:`davidbrochart`.
|
||||
- Handle `requirements.txt` files with different encodings in :pr:`771`
|
||||
by :user:`GeorgianaElena`.
|
||||
- Update to nteract-on-jupyter 2.1.3 in :pr:`2.1.3 by :user:`betatim`.
|
||||
- Use `useradd --no-log-init` to fix exhausting disk space in :pr:`804` by
|
||||
:user:`manics.`
|
||||
- Add help text for commandline arguments in :pr:`517` by :user:`yuvipanda`.
|
||||
- Fix submodule checkout in :pr:`809` by :user:`davidbrochart`.
|
||||
|
||||
|
||||
Version 0.10.0
|
||||
==============
|
||||
|
||||
Release date: 2019-08-07
|
||||
|
||||
New features
|
||||
------------
|
||||
- Increased minimum Python version supported for running `repo2docker` itself
|
||||
to Python 3.5 in :pr:`684` by :user:`betatim`.
|
||||
- Support for `Pipfile` and `Pipfile.lock` implemented in :pr:`649` by
|
||||
:user:`consideratio`.
|
||||
- Use only conda packages for our base environments in :pr:`728` by
|
||||
:user:`scottyhq`.
|
||||
- Fast rebuilds when repo dependencies haven't changed by :user:`minrk` and
|
||||
:user:`betatim` in :pr:`743`, :pr:`752`, :pr:`718` and :pr:`716`.
|
||||
- Add support for Zenodo in :pr:`693` by :user:`betatim`.
|
||||
- Add support for general Invenio repositories in :pr:`704` by :user:`tmorrell`.
|
||||
- Add support for julia 1.0.4 and 1.1.1 in :pr:`710` by :user:`davidanthoff`.
|
||||
- Bump Conda from 4.6.14 to 4.7.5 in :pr:`719` by :user:`davidrpugh`.
|
||||
|
||||
|
||||
API changes
|
||||
-----------
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
- Prevent building the image as root if --user-id and --user-name are not specified
|
||||
in :pr:`676` by :user:`Xarthisius`.
|
||||
- Add bash to Dockerfile to fix usage of private repos with git-crendential-env in
|
||||
:pr:`738` by :user:`eexwhyzee`.
|
||||
- Fix memory limit enforcement in :pr:`677` by :user:`betatim`.
|
||||
|
||||
|
||||
Version 0.9.0
|
||||
=============
|
||||
|
||||
Release date: 2019-05-05
|
||||
|
||||
New features
|
||||
------------
|
||||
- Support for julia `Project.toml`, `JuliaProject.toml` and `Manifest.toml` files in :pr:`595` by
|
||||
:user:`davidanthoff`
|
||||
- Set JULIA_PROJECT globally, so that every julia instance starts with the
|
||||
julia environment activated in :pr:`612` by :user:`davidanthoff`.
|
||||
- Update Miniconda version to 4.6.14 and Conda version to 4.6.14 in :pr:`637` by
|
||||
:user:`jhamman`
|
||||
- Install notebook into `notebook` env instead of `root`.
|
||||
Activate conda environments and shell integration via ENTRYPOINT
|
||||
in :pr:`651` by :user:`minrk`
|
||||
- Support for `.binder` directory in addition to `binder` directory for location of
|
||||
configuration files, in :pr:`653` by :user:`jhamman`.
|
||||
- Updated contributor guide and issue templates for bugs, feature requests,
|
||||
and support questions in :pr:`654` and :pr:`655` by :user:`KirstieJane` and
|
||||
:user:`betatim`.
|
||||
- Create a page naming and describing the "Reproducible Execution
|
||||
Environment Specification" (the specification used by repo2docker)
|
||||
in :pr:`662` by :user:`choldgraf`.
|
||||
|
||||
API changes
|
||||
-----------
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
- Install IJulia kernel into ${NB_PYTHON_PREFIX}/share/jupyter in :pr:`622` by
|
||||
:user:`davidanthoff`.
|
||||
- Ensure git submodules are updated and initilized correctly in :pr:`639` by
|
||||
:user:`djhoese`.
|
||||
- Use archive.debian.org as source for the debian jessie based legacy
|
||||
buildpack in :pr:`633` by :user:`betatim`.
|
||||
- Update to version 5.7.6 of the `notebook` package used in all environments
|
||||
in :pr:`628` by :user:`betatim`.
|
||||
- Update to version 5.7.8 of the `notebook` package and version 2.0.12 of
|
||||
`nteract-on-jupyter` in :pr:`650` by :user:`betatim`.
|
||||
- Switch to newer version of jupyter-server-proxy to fix websocket handling
|
||||
in :pr:`646` by :user:`betatim`.
|
||||
- Update to pip version 19.0.3 in :pr:`647` by :user:`betatim`.
|
||||
- Ensure ENTRYPOINT is an absolute path in :pr:`657` by :user:`yuvipanda`.
|
||||
- Fix handling of `--build-memory-limit` values without a postfix in :pr:`652`
|
||||
by :user:`betatim`.
|
||||
|
||||
|
||||
Version 0.8.0
|
||||
=============
|
||||
|
||||
Release date: 2019-02-21
|
||||
|
||||
New features
|
||||
------------
|
||||
- Add additional metadata to docker images about how they were built :pr:`500` by
|
||||
:user:`jrbourbeau`.
|
||||
- Allow users to install global NPM packages: :pr:`573` by :user:`GladysNalvarte`.
|
||||
- Add documentation on switching the user interface presented by a
|
||||
container. :pr:`568` by user:`choldgraf`.
|
||||
- Increased test coverage to ~87% by :user:`betatim` and :user:`yuvipanda`.
|
||||
- Documentation improvements and additions by :user:`lheagy`, :user:`choldgraf`.
|
||||
- Remove f-strings from code base, repo2docker is compatible with Python 3.4+
|
||||
again by :user:`jrbourbeau` in :pr:`520`.
|
||||
- Local caching of previously built repostories to speed up launch times
|
||||
by :user:`betatim` in :pr:`511`.
|
||||
- Make destination of repository content in the container image configurable
|
||||
on the CLI via ``--target-repo-dir``. By :user:`yuvipanda` in :pr:`507`.
|
||||
- Expose CPU limit settings for building and running containers. By
|
||||
:user:`GladysNalvarte` in :pr:`579`.
|
||||
- Make Python 3.7 the default version. By :user:`yuvipanda` and :user:`minrk` in
|
||||
:pr:`539`.
|
||||
|
||||
API changes
|
||||
-----------
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
- In some cases the version of conda installed in images was not pinned and got
|
||||
upgraded by user actions. Fixed in :pr:`576` by :user:`minrk`.
|
||||
- Fix an error related to checking if debug output was enabled or not:
|
||||
:pr:`575` by :user:`yuvipanda`.
|
||||
- Update nteract frontend to version 2.0.0 by :user:`yuvipanda` in :pr:`571`.
|
||||
- Fix quoting issue in ``GIT_CREDENTIAL_ENV`` environment variable by
|
||||
:user:`minrk` in :pr:`572`.
|
||||
- Change to using the first 8 characters of each Git commit, not the last 8,
|
||||
to tag each built docker image of repo2docker itself. :user:`minrk` in :pr:`562`.
|
||||
- Allow users to select the Julia when using a ``requirements.txt`` by
|
||||
:user:`yuvipanda` in :pr:`557`.
|
||||
- Set ``JULIA_DEPOT_PATH`` to install packages outside the home directory by
|
||||
:user:`yuvipanda` in :pr:`555`.
|
||||
- Update to Jupyter notebook 5.7.4 :pr:`519` by :user:`minrk`.
|
||||
|
||||
|
||||
Version 0.7.0
|
||||
=============
|
||||
|
||||
Release date: 2018-12-12
|
||||
|
||||
New features
|
||||
------------
|
||||
|
||||
- Build from sub-directory: build the image based on a sub-directory of a
|
||||
repository :pr:`413` by :user:`dsludwig`.
|
||||
- Editable mode: allows editing a local repository from a live container
|
||||
:pr:`421` by :user:`evertrol`.
|
||||
- Change log added :pr:`426` by :user:`evertrol`.
|
||||
- Documentation: improved the documentation for contributors :pr:`453` by
|
||||
:user:`choldgraf`.
|
||||
- Buildpack: added support for the nix package manager :pr:`407` by
|
||||
:user:`costrouc`.
|
||||
- Log a 'success' message when push is complete :pr:`482` by
|
||||
:user:`yuvipanda`.
|
||||
- Allow specifying images to reuse cache from :pr:`478` by
|
||||
:user:`yuvipanda`.
|
||||
- Add JupyterHub back to base environment :pr:`476` by :user:`yuvipanda`.
|
||||
- Repo2docker has a logo! by :user:`agahkarakuzu` and :user:`blairhudson`.
|
||||
- Improve support for Stencila, including identifying stencila runtime from
|
||||
document context :pr:`457` by :user:`nuest`.
|
||||
|
||||
|
||||
API changes
|
||||
-----------
|
||||
|
||||
- Add content provider abstraction :pr:`421` by :user:`betatim`.
|
||||
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
|
||||
- Update to Jupyter notebook 5.7 :pr:`475` by :user:`betatim` and :user:`minrk`.
|
||||
|
||||
|
||||
|
||||
Version 0.6
|
||||
===========
|
||||
|
||||
Released 2018-09-09
|
||||
|
||||
|
||||
Version 0.5
|
||||
===========
|
||||
|
||||
Released 2018-02-07
|
||||
|
||||
|
||||
Version 0.4.1
|
||||
=============
|
||||
|
||||
Released 2018-09-06
|
||||
|
||||
|
||||
Version 0.2
|
||||
===========
|
||||
|
||||
Released 2018-05-25
|
||||
|
||||
|
||||
Version 0.1.1
|
||||
=============
|
||||
|
||||
Released 2017-04-19
|
||||
|
||||
|
||||
Version 0.1
|
||||
===========
|
||||
|
||||
Released 2017-04-14
|
|
@ -1,73 +1,50 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# Configuration file for Sphinx to build our documentation to HTML.
|
||||
#
|
||||
# repo2docker documentation build configuration file, created by
|
||||
# sphinx-quickstart on Fri Jun 2 13:00:51 2017.
|
||||
# Configuration reference: https://www.sphinx-doc.org/en/master/usage/configuration.html
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its
|
||||
# containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
import datetime
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
# -- Project information -----------------------------------------------------
|
||||
# ref: https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
|
||||
#
|
||||
# import os
|
||||
# import sys
|
||||
# sys.path.insert(0, os.path.abspath('.'))
|
||||
project = "repo2docker"
|
||||
copyright = f"{datetime.date.today().year}, Project Jupyter Contributors"
|
||||
author = "Project Jupyter Contributors"
|
||||
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
# -- General Sphinx configuration ---------------------------------------------------
|
||||
# ref: https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
||||
#
|
||||
# needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = ["sphinx.ext.extlinks", "sphinxcontrib.autoprogram", "recommonmark"]
|
||||
|
||||
extensions = [
|
||||
"myst_parser",
|
||||
"sphinx_copybutton",
|
||||
"sphinx.ext.extlinks",
|
||||
"sphinxcontrib.autoprogram",
|
||||
"sphinxext.opengraph",
|
||||
"sphinxext.rediraffe",
|
||||
]
|
||||
root_doc = "index"
|
||||
source_suffix = [".md", ".rst"]
|
||||
default_role = "literal"
|
||||
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
|
||||
templates_path = ["_templates"]
|
||||
extlinks = {
|
||||
"issue": ("https://github.com/jupyterhub/repo2docker/issues/%s", "Issue #"),
|
||||
"pr": ("https://github.com/jupyterhub/repo2docker/pull/%s", "PR #"),
|
||||
"user": ("https://github.com/%s", "@"),
|
||||
"issue": ("https://github.com/jupyterhub/repo2docker/issues/%s", "Issue #%s"),
|
||||
"pr": ("https://github.com/jupyterhub/repo2docker/pull/%s", "PR #%s"),
|
||||
"user": ("https://github.com/%s", "@%s"),
|
||||
}
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ["_templates"]
|
||||
|
||||
|
||||
from recommonmark.transform import AutoStructify
|
||||
|
||||
|
||||
def setup(app):
|
||||
app.add_stylesheet("custom.css") # may also be a URL
|
||||
app.add_config_value(
|
||||
"recommonmark_config", {"auto_toc_tree_section": "Contents"}, True
|
||||
)
|
||||
app.add_transform(AutoStructify)
|
||||
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
# -- General MyST configuration -----------------------------------------------------
|
||||
# ref: https://myst-parser.readthedocs.io/en/latest/configuration.html
|
||||
#
|
||||
# source_suffix = ['.rst', '.md']
|
||||
source_suffix = [".rst", ".md"]
|
||||
myst_enable_extensions = [
|
||||
"colon_fence",
|
||||
]
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = "index"
|
||||
|
||||
# General information about the project.
|
||||
project = "repo2docker"
|
||||
copyright = "2019, Project Jupyter"
|
||||
author = "Project Jupyter"
|
||||
|
||||
# -- Referenceable variables --------------------------------------------------
|
||||
#
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
|
@ -83,132 +60,69 @@ from repo2docker.buildpacks.conda import CondaBuildPack
|
|||
|
||||
default_python = CondaBuildPack.major_pythons["3"]
|
||||
|
||||
rst_prolog = """
|
||||
rst_prolog = f"""
|
||||
.. |default_python| replace:: **Python {default_python}**
|
||||
.. |default_python_version| replace:: {default_python}
|
||||
""".format(
|
||||
default_python=default_python
|
||||
)
|
||||
"""
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
||||
# -- Options for HTML output -------------------------------------------------
|
||||
# ref: https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This patterns also effect to html_static_path and html_extra_path
|
||||
exclude_patterns = []
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = "sphinx"
|
||||
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||
todo_include_todos = False
|
||||
|
||||
# repo2docker Logo
|
||||
html_logo = "_static/images/logo.png"
|
||||
html_favicon = "_static/images/favicon.ico"
|
||||
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
html_theme = "pydata_sphinx_theme"
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#
|
||||
# html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ["_static"]
|
||||
html_sidebars = {}
|
||||
html_css_files = ["custom.css"]
|
||||
|
||||
# -- Options for HTMLHelp output ------------------------------------------
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = "repo2dockerdoc"
|
||||
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#
|
||||
# 'papersize': 'letterpaper',
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#
|
||||
# 'pointsize': '10pt',
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#
|
||||
# 'preamble': '',
|
||||
# Latex figure (float) alignment
|
||||
#
|
||||
# 'figure_align': 'htbp',
|
||||
# pydata_sphinx_theme reference: https://pydata-sphinx-theme.readthedocs.io/en/latest/
|
||||
html_theme = "pydata_sphinx_theme"
|
||||
html_theme_options = {
|
||||
"use_edit_page_button": True,
|
||||
"github_url": "https://github.com/jupyterhub/repo2docker",
|
||||
}
|
||||
html_context = {
|
||||
"github_user": "jupyterhub",
|
||||
"github_repo": "repo2docker",
|
||||
"github_version": "main",
|
||||
"doc_path": "docs/source",
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(
|
||||
master_doc,
|
||||
"repo2docker.tex",
|
||||
"repo2docker Documentation",
|
||||
"Project Jupyter",
|
||||
"manual",
|
||||
)
|
||||
|
||||
# -- Options for linkcheck builder -------------------------------------------
|
||||
# ref: https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-the-linkcheck-builder
|
||||
#
|
||||
linkcheck_ignore = [
|
||||
r"(.*)github\.com(.*)#", # javascript based anchors
|
||||
r"(.*)/#%21(.*)/(.*)", # /#!forum/jupyter - encoded anchor edge case
|
||||
r"https://github.com/[^/]*$", # too many github usernames / searches in changelog
|
||||
"https://github.com/jupyterhub/repo2docker/pull/", # too many PRs in changelog
|
||||
"https://github.com/jupyterhub/repo2docker/compare/", # too many comparisons in changelog
|
||||
]
|
||||
linkcheck_anchors_ignore = [
|
||||
"/#!",
|
||||
"/#%21",
|
||||
]
|
||||
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [(master_doc, "repo2docker", "repo2docker Documentation", [author], 1)]
|
||||
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(
|
||||
master_doc,
|
||||
"repo2docker",
|
||||
"repo2docker Documentation",
|
||||
author,
|
||||
"repo2docker",
|
||||
"One line description of project.",
|
||||
"Miscellaneous",
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
# -- Options for Epub output ----------------------------------------------
|
||||
|
||||
# Bibliographic Dublin Core info.
|
||||
epub_title = project
|
||||
epub_author = author
|
||||
epub_publisher = author
|
||||
epub_copyright = copyright
|
||||
|
||||
# The unique identifier of the text. This can be a ISBN number
|
||||
# or the project homepage.
|
||||
# -- Options for the opengraph extension -------------------------------------
|
||||
# ref: https://github.com/wpilibsuite/sphinxext-opengraph#options
|
||||
#
|
||||
# epub_identifier = ''
|
||||
|
||||
# A unique identification for the text.
|
||||
# This extension help others provide better thumbnails and link descriptions
|
||||
# when they link to this documentation from other websites, such as
|
||||
# https://discourse.jupyter.org.
|
||||
#
|
||||
# epub_uid = ''
|
||||
# ogp_site_url is set automatically by RTD
|
||||
ogp_image = "_static/images/logo.png"
|
||||
ogp_use_first_image = True
|
||||
|
||||
# A list of files that should not be packed into the epub file.
|
||||
epub_exclude_files = ["search.html"]
|
||||
|
||||
# -- Options for the rediraffe extension -------------------------------------
|
||||
# ref: https://github.com/wpilibsuite/sphinxext-rediraffe#readme
|
||||
#
|
||||
# This extensions help us relocated content without breaking links. If a
|
||||
# document is moved internally, we should configure a redirect like below.
|
||||
#
|
||||
rediraffe_branch = "main"
|
||||
rediraffe_redirects = {
|
||||
# "old-file": "new-folder/new-file-name",
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ can be found on this page (and to the right).
|
|||
that lets you install any kind of package,
|
||||
including Python, R, and C/C++ packages.
|
||||
``repo2docker`` does not use your ``environment.yml`` to create and activate a new conda environment.
|
||||
Rather, it updates a base conda environment `defined here <https://github.com/jupyterhub/repo2docker/blob/master/repo2docker/buildpacks/conda/environment.yml>`_ with the packages listed in your ``environment.yml``.
|
||||
Rather, it updates a base conda environment `defined here <https://github.com/jupyterhub/repo2docker/blob/HEAD/repo2docker/buildpacks/conda/environment.yml>`_ with the packages listed in your ``environment.yml``.
|
||||
This means that the environment will always have the same default name, not the name
|
||||
specified in your ``environment.yml``.
|
||||
|
||||
|
@ -37,14 +37,14 @@ specified in your ``environment.yml``.
|
|||
|
||||
You can install files from pip in your ``environment.yml`` as well.
|
||||
For example, see the `binder-examples environment.yml
|
||||
<https://github.com/binder-examples/python-conda_pip/blob/master/environment.yml>`_
|
||||
<https://github.com/binder-examples/python-conda_pip/blob/HEAD/environment.yml>`_
|
||||
file.
|
||||
|
||||
You can also specify which Python version to install in your built environment
|
||||
with ``environment.yml``. By default, ``repo2docker`` installs
|
||||
|default_python| with your ``environment.yml`` unless you include the version of
|
||||
Python in this file. ``conda`` supports all versions of Python,
|
||||
though ``repo2docker`` support is best with Python 3.7, 3.6, 3.5 and 2.7.
|
||||
Python in this file. ``conda`` Should support all versions of Python,
|
||||
though ``repo2docker`` support is best with Python 3.7-3.11.
|
||||
|
||||
.. warning::
|
||||
If you include a Python version in a ``runtime.txt`` file in addition to your
|
||||
|
@ -73,7 +73,7 @@ both kinds.
|
|||
|
||||
This specifies a list of Python packages that should be installed in your
|
||||
environment. Our
|
||||
`requirements.txt example <https://github.com/binder-examples/requirements/blob/master/requirements.txt>`_
|
||||
`requirements.txt example <https://github.com/binder-examples/requirements/blob/HEAD/requirements.txt>`_
|
||||
on GitHub shows a typical requirements file.
|
||||
|
||||
|
||||
|
@ -118,9 +118,9 @@ with ``REQUIRE`` and ``environment.yml``, visit
|
|||
================================================
|
||||
|
||||
This is used to install R libraries pinned to a specific snapshot on
|
||||
`MRAN <https://mran.microsoft.com/documents/rro/reproducibility>`_.
|
||||
`Posit Package Manager <https://packagemanager.posit.co/>`_.
|
||||
To set the date of the snapshot add a runtime.txt_.
|
||||
For an example ``install.R`` file, visit our `example install.R file <https://github.com/binder-examples/r/blob/master/install.R>`_.
|
||||
For an example ``install.R`` file, visit our `example install.R file <https://github.com/binder-examples/r/blob/HEAD/install.R>`_.
|
||||
|
||||
|
||||
.. _apt.txt:
|
||||
|
@ -132,7 +132,7 @@ A list of Debian packages that should be installed. The base image used is usual
|
|||
version of Ubuntu.
|
||||
|
||||
We use ``apt.txt``, for example, to install LaTeX in our
|
||||
`example apt.txt for LaTeX <https://github.com/binder-examples/latex/blob/master/apt.txt>`_.
|
||||
`example apt.txt for LaTeX <https://github.com/binder-examples/latex/blob/HEAD/apt.txt>`_.
|
||||
|
||||
|
||||
.. _DESCRIPTION:
|
||||
|
@ -142,11 +142,12 @@ We use ``apt.txt``, for example, to install LaTeX in our
|
|||
|
||||
To install your repository like an R package, you may include a
|
||||
``DESCRIPTION`` file. repo2docker installs the package and dependencies
|
||||
from the ``DESCRIPTION`` by running ``devtools::install_git(".")``.
|
||||
from the ``DESCRIPTION`` by running ``devtools::install_local(getwd())``.
|
||||
|
||||
You also need to have a ``runtime.txt`` file that is formatted as
|
||||
``r-<YYYY>-<MM>-<DD>``, where YYYY-MM-DD is a snapshot of MRAN that will be
|
||||
used for your R installation.
|
||||
You can also have have a ``runtime.txt`` file that is formatted as
|
||||
``r-<YYYY>-<MM>-<DD>``, where YYYY-MM-DD is a snapshot of CRAN that will be used
|
||||
for your R installation. If ``runtime.txt`` isn't provided in this case, a
|
||||
recent date will be used.
|
||||
|
||||
|
||||
.. _postBuild:
|
||||
|
@ -161,8 +162,8 @@ Note that by default the build will not be stopped if an error occurs inside a s
|
|||
You should include ``set -e`` or the equivalent at the start of the script to avoid errors being silently ignored.
|
||||
|
||||
An example use-case of ``postBuild`` file is JupyterLab's demo on mybinder.org.
|
||||
It uses a ``postBuild`` file in a folder called ``binder`` to `prepare
|
||||
their demo for binder <https://github.com/jupyterlab/jupyterlab-demo/blob/master/binder/postBuild>`_.
|
||||
It uses a ``postBuild`` file in a folder called ``.binder`` to `prepare
|
||||
their demo for binder <https://github.com/jupyterlab/jupyterlab-demo/blob/HEAD/.binder/postBuild>`_.
|
||||
|
||||
|
||||
.. _start:
|
||||
|
@ -204,12 +205,12 @@ For these cases, we have a special file, ``runtime.txt``.
|
|||
``runtime.txt`` will be ignored).
|
||||
|
||||
Have ``python-x.y`` in ``runtime.txt`` to run the repository with Python version x.y.
|
||||
See our `Python2 example repository <https://github.com/binder-examples/python2_runtime/blob/master/runtime.txt>`_.
|
||||
See our `Python2 example repository <https://github.com/binder-examples/python2_runtime/blob/HEAD/runtime.txt>`_.
|
||||
|
||||
Have ``r-<RVERSION>-<YYYY>-<MM>-<DD>`` in ``runtime.txt`` to run the repository with R version RVERSION and libraries from a YYYY-MM-DD snapshot of `MRAN <https://mran.microsoft.com/documents/rro/reproducibility>`_.
|
||||
Have ``r-<RVERSION>-<YYYY>-<MM>-<DD>`` in ``runtime.txt`` to run the repository with R version RVERSION and libraries from a YYYY-MM-DD snapshot of `Posit Package Manager <https://packagemanager.posit.co/client/#/repos/2/overview>`__.
|
||||
RVERSION can be set to 3.4, 3.5, 3.6, or to patch releases for the 3.5 and 3.6 series.
|
||||
If you do not specify a version, the latest release will be used (currently R 3.6).
|
||||
See our `R example repository <https://github.com/binder-examples/r/blob/master/runtime.txt>`_.
|
||||
See our `R example repository <https://github.com/binder-examples/r/blob/HEAD/runtime.txt>`_.
|
||||
|
||||
.. _default.nix:
|
||||
|
||||
|
@ -232,6 +233,8 @@ To see an example repository visit
|
|||
`nix binder example <https://github.com/binder-examples/nix>`_.
|
||||
|
||||
|
||||
.. _dockerfile:
|
||||
|
||||
``Dockerfile`` - Advanced environments
|
||||
======================================
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Add a new buildpack
|
||||
|
||||
A new buildpack is needed when a new language or a new package manager should be
|
||||
supported. [Existing buildpacks](https://github.com/jupyterhub/repo2docker/tree/master/repo2docker/buildpacks)
|
||||
supported. [Existing buildpacks](https://github.com/jupyterhub/repo2docker/tree/HEAD/repo2docker/buildpacks)
|
||||
are a good model for how new buildpacks should be structured.
|
||||
See [the Buildpacks page](buildpacks) for more information about the
|
||||
structure of a buildpack.
|
||||
|
|
|
@ -5,7 +5,7 @@ Add a new content provider
|
|||
Adding a new content provider allows repo2docker to grab repositories from new
|
||||
locations on the internet. To do so, you should take the following steps:
|
||||
|
||||
#. Sub-class the `ContentProvider class <https://github.com/jupyterhub/repo2docker/blob/master/repo2docker/contentproviders/base.py#L17>`_.
|
||||
#. Sub-class the `ContentProvider class <https://github.com/jupyterhub/repo2docker/blob/HEAD/repo2docker/contentproviders/base.py#L17>`_.
|
||||
This will give you a skeleton class you can modify to support your new
|
||||
content provider.
|
||||
#. Implement a **detect()** method for the class. This takes an input
|
||||
|
|
|
@ -2,33 +2,33 @@
|
|||
|
||||
Thank you for thinking about contributing to repo2docker!
|
||||
This is an open source project that is developed and maintained entirely by volunteers.
|
||||
*Your contribution* is integral to the future of the project.
|
||||
_Your contribution_ is integral to the future of the project.
|
||||
THANK YOU!
|
||||
|
||||
## Types of contribution
|
||||
|
||||
There are many ways to contribute to repo2docker:
|
||||
|
||||
* **Update the documentation.**
|
||||
- **Update the documentation.**
|
||||
If you're reading a page or docstring and it doesn't make sense (or doesn't exist!), please let us know by opening a bug report.
|
||||
It's even more amazing if you can give us a suggested change.
|
||||
* **Fix bugs or add requested features.**
|
||||
- **Fix bugs or add requested features.**
|
||||
Have a look through the [issue tracker](https://github.com/jupyterhub/repo2docker/issues) and see if there are any tagged as ["help wanted"](https://github.com/jupyterhub/repo2docker/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22).
|
||||
As the label suggests, we'd love your help!
|
||||
* **Report a bug.**
|
||||
- **Report a bug.**
|
||||
If repo2docker isn't doing what you thought it would do then open a [bug report](https://github.com/jupyterhub/repo2docker/issues/new?template=bug_report.md).
|
||||
That issue template will ask you a few questions described in more detail below.
|
||||
* **Suggest a new feature.**
|
||||
- **Suggest a new feature.**
|
||||
We know that there are lots of ways to extend repo2docker!
|
||||
If you're interested in adding a feature then please open a [feature request](https://github.com/jupyterhub/repo2docker/issues/new?template=feature_request.md).
|
||||
That issue template will ask you a few questions described in detail below.
|
||||
* **Review someone's Pull Request.**
|
||||
- **Review someone's Pull Request.**
|
||||
Whenever somebody proposes changes to the repo2docker codebase, the community reviews
|
||||
the changes, and provides feedback, edits, and suggestions. Check out the
|
||||
[open pull requests](https://github.com/jupyterhub/repo2docker/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc)
|
||||
and provide feedback that helps improve the PR and get it merged. Please keep your
|
||||
feedback positive and constructive!
|
||||
* **Tell people about repo2docker.**
|
||||
- **Tell people about repo2docker.**
|
||||
As we said above, repo2docker is built by and for its community.
|
||||
If you know anyone who would like to use repo2docker, please tell them about the project!
|
||||
You could give a talk about it, or run a demonstration.
|
||||
|
@ -42,55 +42,59 @@ This outlines the process for getting changes to the repo2docker project merged.
|
|||
|
||||
1. Identify the correct issue template: [bug report](https://github.com/jupyterhub/repo2docker/issues/new?template=bug_report.md) or [feature request](https://github.com/jupyterhub/repo2docker/issues/new?template=feature_request.md).
|
||||
|
||||
**Bug reports** ([examples](https://github.com/jupyterhub/repo2docker/issues?q=is%3Aissue+is%3Aopen+label%3Abug), [new issue](https://github.com/jupyterhub/repo2docker/issues/new?template=bug_report.md)) will ask you for a description of the problem, the expected behaviour, the actual behaviour, how to reproduce the problem, and your personal set up.
|
||||
Bugs can include problems with the documentation, or code not running as expected.
|
||||
**Bug reports** ([examples](https://github.com/jupyterhub/repo2docker/issues?q=is%3Aissue+is%3Aopen+label%3Abug), [new issue](https://github.com/jupyterhub/repo2docker/issues/new?template=bug_report.md)) will ask you for a description of the problem, the expected behaviour, the actual behaviour, how to reproduce the problem, and your personal set up.
|
||||
Bugs can include problems with the documentation, or code not running as expected.
|
||||
|
||||
It is really important that you make it easy for the maintainers to reproduce the problem you're having.
|
||||
This guide on creating a [minimal, complete and verifiable example](https://stackoverflow.com/help/mcve) is a great place to start.
|
||||
It is really important that you make it easy for the maintainers to reproduce the problem you're having.
|
||||
This guide on creating a [minimal, complete and verifiable example](https://stackoverflow.com/help/mcve) is a great place to start.
|
||||
|
||||
**Feature requests** ([examples](https://github.com/jupyterhub/repo2docker/labels/needs%3A%20discussion), [new issue](https://github.com/jupyterhub/repo2docker/issues/new?template=feature_request.md)) will ask you for the proposed change, any alternatives that you have considered, a description of who would use this feature, and a best-guess of how much work it will take and what skills are required to accomplish.
|
||||
**Feature requests** ([examples](https://github.com/jupyterhub/repo2docker/labels/needs%3A%20discussion), [new issue](https://github.com/jupyterhub/repo2docker/issues/new?template=feature_request.md)) will ask you for the proposed change, any alternatives that you have considered, a description of who would use this feature, and a best-guess of how much work it will take and what skills are required to accomplish.
|
||||
|
||||
Very easy feature requests might be updates to the documentation to clarify steps for new users.
|
||||
Harder feature requests may be to add new functionality to the project and will need more in depth discussion about who can complete and maintain the work.
|
||||
Very easy feature requests might be updates to the documentation to clarify steps for new users.
|
||||
Harder feature requests may be to add new functionality to the project and will need more in depth discussion about who can complete and maintain the work.
|
||||
|
||||
Feature requests are a great opportunity for you to advocate for the use case you're suggesting.
|
||||
They help others understand how much effort it would be to integrate the work,and - if you're successful at convincing them that this effort is worth it - make it more likely that they to choose to work on it with you.
|
||||
Feature requests are a great opportunity for you to advocate for the use case you're suggesting.
|
||||
They help others understand how much effort it would be to integrate the work,and - if you're successful at convincing them that this effort is worth it - make it more likely that they to choose to work on it with you.
|
||||
|
||||
2. Open an issue.
|
||||
Getting consensus with the community is a great way to save time later.
|
||||
Getting consensus with the community is a great way to save time later.
|
||||
3. Make edits in [your fork](https://help.github.com/en/articles/fork-a-repo) of the [repo2docker repository](https://github.com/jupyterhub/repo2docker).
|
||||
4. Make a [pull request](https://help.github.com/en/articles/about-pull-requests).
|
||||
Read the [next section](#guidelines-to-getting-a-pull-request-merged) for guidelines for both reviewers and contributors on merging a PR.
|
||||
6. Wait for a community member to merge your changes.
|
||||
Remember that **someone else must merge your pull request**.
|
||||
That goes for new contributors and long term maintainers alike.
|
||||
Because `master` is continuously deployed to mybinder.org it is essential
|
||||
that `master` is always in a deployable state.
|
||||
7. (optional) Deploy a new version of repo2docker to mybinder.org by [following these steps](http://mybinder-sre.readthedocs.io/en/latest/deployment/how.html)
|
||||
Read the [next section](guidelines-to-getting-a-pull-request-merged) for guidelines for both reviewers and contributors on merging a PR.
|
||||
5. Wait for a community member to merge your changes.
|
||||
Remember that **someone else must merge your pull request**.
|
||||
That goes for new contributors and long term maintainers alike.
|
||||
Because `main` is continuously deployed to mybinder.org it is essential
|
||||
that `main` is always in a deployable state.
|
||||
6. (optional) Deploy a new version of repo2docker to mybinder.org by [following these steps](http://mybinder-sre.readthedocs.io/en/latest/deployment/how.html)
|
||||
|
||||
(guidelines-to-getting-a-pull-request-merged)=
|
||||
|
||||
## Guidelines to getting a Pull Request merged
|
||||
|
||||
These are not hard rules to be enforced by 🚓 but they are suggestions written by the repo2docker maintainers to help complete your contribution as smoothly as possible for both you and for them.
|
||||
|
||||
* **Create a PR as early as possible**, marking it with `[WIP]` while you work on it.
|
||||
- **Create a PR as early as possible**, marking it with `[WIP]` while you work on it.
|
||||
This avoids duplicated work, lets you get high level feedback on functionality or API changes, and/or helps find collaborators to work with you.
|
||||
* **Keep your PR focused.**
|
||||
- **Keep your PR focused.**
|
||||
The best PRs solve one problem.
|
||||
If you end up changing multiple things, please open separate PRs for the different conceptual changes.
|
||||
* **Add tests to your code.**
|
||||
- **Add tests to your code.**
|
||||
PRs will not be merged if Travis is failing.
|
||||
* **Apply [PEP8](https://www.python.org/dev/peps/pep-0008/)** as much as possible, but not too much.
|
||||
- **Apply [PEP8](https://www.python.org/dev/peps/pep-0008/)** as much as possible, but not too much.
|
||||
If in doubt, ask.
|
||||
* **Use merge commits** instead of merge-by-squashing/-rebasing.
|
||||
- **Use merge commits** instead of merge-by-squashing/-rebasing.
|
||||
This makes it easier to find all changes since the last deployment `git log --merges --pretty=format:"%h %<(10,trunc)%an %<(15)%ar %s" <deployed-revision>..` and your PR easier to review.
|
||||
* **Make it clear when your PR is ready for review.**
|
||||
- **Make it clear when your PR is ready for review.**
|
||||
Prefix the title of your pull request (PR) with `[MRG]` if the contribution is complete and should be subjected to a detailed review.
|
||||
* **Use commit messages to describe _why_ you are proposing the changes you are proposing.**
|
||||
* **Try to not rush changes** (the definition of rush depends on how big your changes are).
|
||||
- **Use commit messages to describe _why_ you are proposing the changes you are proposing.**
|
||||
- **Try to not rush changes** (the definition of rush depends on how big your changes are).
|
||||
Remember that everyone in the repo2docker team is a volunteer and we can not (nor would we want to) control their time or interests.
|
||||
Wait patiently for a reviewer to merge the PR.
|
||||
(Remember that **someone else** must merge your PR, even if you have the admin rights to do so.)
|
||||
|
||||
(contributing:local-dev)=
|
||||
|
||||
## Setting up for Local Development
|
||||
|
||||
To develop & test repo2docker locally, you need:
|
||||
|
@ -120,33 +124,17 @@ After cloning the repository, you should set up an
|
|||
isolated environment to install libraries required for running / developing
|
||||
repo2docker.
|
||||
|
||||
There are many ways to do this but here we present you with two approaches: `virtual environment` or `pipenv`.
|
||||
|
||||
- Using `virtual environment`
|
||||
|
||||
```bash
|
||||
python3 -m venv .
|
||||
source bin/activate
|
||||
pip3 install -e .
|
||||
pip3 install -r dev-requirements.txt
|
||||
pip3 install -r docs/doc-requirements.txt
|
||||
pip3 install -r docs/requirements.txt
|
||||
pip3 install black
|
||||
```
|
||||
|
||||
This should install all the libraries required for testing & running repo2docker!
|
||||
|
||||
- Using `pipenv`
|
||||
|
||||
Note that you will need to install pipenv first using `pip3 install pipenv`.
|
||||
Then from the root directory of this project you can use the following commands:
|
||||
|
||||
```bash
|
||||
pipenv install --dev
|
||||
```
|
||||
|
||||
This should install both the dev and docs requirements at once!
|
||||
|
||||
|
||||
### Code formatting
|
||||
|
||||
We use [`black`](https://black.readthedocs.io/en/stable/) as code formatter to
|
||||
|
@ -162,7 +150,6 @@ according to black's style guide. You can activate it with `pre-commit install`.
|
|||
As part of our continuous integration tests we will check that code is
|
||||
formatted properly and the tests will fail if this is not the case.
|
||||
|
||||
|
||||
### Verify that docker is installed and running
|
||||
|
||||
If you do not already have [Docker](https://www.docker.com/), you should be able
|
||||
|
@ -199,13 +186,12 @@ Then you are good to go!
|
|||
|
||||
## Building the documentation locally
|
||||
|
||||
If you only changed the documentation, you can also build the documentation locally using `sphinx` .
|
||||
You can build and inspect the result of documentation changes locally.
|
||||
|
||||
```bash
|
||||
pip install -r docs/doc-requirements.txt
|
||||
pip install -e .
|
||||
pip install -r docs/requirements.txt
|
||||
|
||||
cd docs/
|
||||
make html
|
||||
make devenv
|
||||
```
|
||||
|
||||
Then open the file `docs/build/html/index.html` in your browser.
|
||||
|
|
|
@ -7,6 +7,7 @@ The goal is to communicate priorities and upcoming release plans.
|
|||
It is not a aimed at limiting contributions to what is listed here.
|
||||
|
||||
## Using the roadmap
|
||||
|
||||
### Sharing Feedback on the Roadmap
|
||||
|
||||
All of the community is encouraged to provide feedback as well as share new
|
||||
|
@ -16,24 +17,22 @@ After submitting the issue, others from the community will probably
|
|||
respond with questions or comments they have to clarify the issue. The
|
||||
maintainers will help identify what a good next step is for the issue.
|
||||
|
||||
|
||||
### What do we mean by "next step"?
|
||||
|
||||
When submitting an issue, think about what "next step" category best describes
|
||||
your issue:
|
||||
|
||||
* **now**, concrete/actionable step that is ready for someone to start work on.
|
||||
These might be items that have a link to an issue or more abstract like
|
||||
"decrease typos and dead links in the documentation"
|
||||
* **soon**, less concrete/actionable step that is going to happen soon,
|
||||
discussions around the topic are coming close to an end at which point it can
|
||||
move into the "now" category
|
||||
* **later**, abstract ideas or tasks, need a lot of discussion or
|
||||
experimentation to shape the idea so that it can be executed. Can also
|
||||
contain concrete/actionable steps that have been postponed on purpose
|
||||
(these are steps that could be in "now" but the decision was taken to work on
|
||||
them later)
|
||||
|
||||
- **now**, concrete/actionable step that is ready for someone to start work on.
|
||||
These might be items that have a link to an issue or more abstract like
|
||||
"decrease typos and dead links in the documentation"
|
||||
- **soon**, less concrete/actionable step that is going to happen soon,
|
||||
discussions around the topic are coming close to an end at which point it can
|
||||
move into the "now" category
|
||||
- **later**, abstract ideas or tasks, need a lot of discussion or
|
||||
experimentation to shape the idea so that it can be executed. Can also
|
||||
contain concrete/actionable steps that have been postponed on purpose
|
||||
(these are steps that could be in "now" but the decision was taken to work on
|
||||
them later)
|
||||
|
||||
### Reviewing and Updating the Roadmap
|
||||
|
||||
|
@ -48,22 +47,21 @@ For those please create a
|
|||
The roadmap should give the reader an idea of what is happening next, what needs
|
||||
input and discussion before it can happen and what has been postponed.
|
||||
|
||||
|
||||
## The roadmap proper
|
||||
|
||||
### Project vision
|
||||
|
||||
Repo2docker is a dependable tool used by humans that reduces the complexity of
|
||||
creating the environment in which a piece of software can be executed.
|
||||
|
||||
|
||||
### Now
|
||||
|
||||
The "Now" items are being actively worked on by the project:
|
||||
* reduce documentation typos and syntax errors
|
||||
* increase test coverage to 80% (see https://codecov.io/gh/jupyterhub/repo2docker/tree/master/repo2docker for low coverage files)
|
||||
* mounting repository contents in locations that is not `/home/jovyan`
|
||||
* investigate options for pinning repo2docker versions ([#490](https://github.com/jupyterhub/repo2docker/issues/490))
|
||||
|
||||
- reduce documentation typos and syntax errors
|
||||
- increase test coverage to 80% (see https://codecov.io/gh/jupyterhub/repo2docker/tree/main/repo2docker for low coverage files)
|
||||
- mounting repository contents in locations that is not `/home/jovyan`
|
||||
- investigate options for pinning repo2docker versions ([#490](https://github.com/jupyterhub/repo2docker/issues/490))
|
||||
|
||||
### Soon
|
||||
|
||||
|
@ -71,15 +69,16 @@ The "Soon" items are being discussed/a plan of action is being made. Once an
|
|||
item reaches the point of an actionable plan and person who wants to work on
|
||||
it, the item will be moved to the "Now" section. Typically, these will be moved
|
||||
at a future review of the roadmap.
|
||||
* create the contributor highway, define the route from newcomer to project lead
|
||||
* add Julia Manifest support (https://docs.julialang.org/en/v1/stdlib/Pkg/index.html, [#486](https://github.com/jupyterhub/repo2docker/issues/486))
|
||||
* support different base images/build pack stacks ([#487](https://github.com/jupyterhub/repo2docker/issues/487))
|
||||
|
||||
- create the contributor highway, define the route from newcomer to project lead
|
||||
- add Julia Manifest support (https://docs.julialang.org/en/v1/stdlib/Pkg/index.html, [#486](https://github.com/jupyterhub/repo2docker/issues/486))
|
||||
- support different base images/build pack stacks ([#487](https://github.com/jupyterhub/repo2docker/issues/487))
|
||||
|
||||
### Later
|
||||
|
||||
The "Later" items are things that are at the back of the project's mind. At this
|
||||
time there is no active plan for an item. The project would like to find the
|
||||
resources and time to discuss and then execute these ideas.
|
||||
* support execution on a remote host (with more resources than available locally) via the command-line
|
||||
* add support for using ZIP files as the repo (`repo2docker https://example.com/an-archive.zip`)
|
||||
|
||||
- support execution on a remote host (with more resources than available locally) via the command-line
|
||||
- add support for using ZIP files as the repo (`repo2docker https://example.com/an-archive.zip`)
|
||||
|
|
|
@ -4,6 +4,13 @@ These are some common tasks to be done as a part of developing
|
|||
and maintaining repo2docker. If you'd like more guidance for how
|
||||
to do these things, reach out in the [JupyterHub Gitter channel](https://gitter.im/jupyterhub/jupyterhub).
|
||||
|
||||
:::{admonition} Set up your development environment first!
|
||||
:class: tip
|
||||
Before attempting most tasks, follow the directions to [set up your development environment](contributing:local-dev).
|
||||
|
||||
Though note that many of these tasks do **not** require Docker.
|
||||
:::
|
||||
|
||||
## Running tests
|
||||
|
||||
We have a lot of tests for various cases supported by repo2docker in the `tests/`
|
||||
|
@ -25,17 +32,18 @@ py.test -s tests/<path-to-test>
|
|||
|
||||
To skip the tests related to Mercurial repositories (to avoid to install
|
||||
Mercurial and hg-evolve), one can use the environment variable
|
||||
``REPO2DOCKER_SKIP_HG_TESTS``.
|
||||
`REPO2DOCKER_SKIP_HG_TESTS`.
|
||||
|
||||
### Troubleshooting Tests
|
||||
|
||||
Some of the tests have non-python requirements for your development machine. They are:
|
||||
|
||||
- `git-lfs` must be installed ([instructions](https://github.com/git-lfs/git-lfs)). It need not be activated -- there is no need to run the `git lfs install` command. It just needs to be available to the test suite.
|
||||
- If your test failure messages include "`git-lfs filter-process: git-lfs: command not found`", this step should address the problem.
|
||||
|
||||
- If your test failure messages include "`git-lfs filter-process: git-lfs: command not found`", this step should address the problem.
|
||||
|
||||
- Minimum Docker Image size of 128GB is required. If you are not running docker on a linux OS, you may need to expand the runtime image size for your installation. See Docker's instructions for [macOS](https://docs.docker.com/docker-for-mac/space/) or [Windows 10](https://docs.docker.com/docker-for-windows/#resources) for more information.
|
||||
- If your test failure messages include "`No space left on device: '/home/...`", this step should address the problem.
|
||||
- If your test failure messages include "`No space left on device: '/home/...`", this step should address the problem.
|
||||
|
||||
## Update and Freeze BuildPack Dependencies
|
||||
|
||||
|
@ -44,36 +52,36 @@ dependencies that are installed by default for several buildpacks.
|
|||
|
||||
For both the `conda` and `virtualenv` (`pip`) base environments in the **Conda BuildPack** and **Python BuildPack**,
|
||||
we install specific pinned versions of all dependencies. We explicitly list the dependencies
|
||||
we want, then *freeze* them at commit time to explicitly list all the
|
||||
we want, then _freeze_ them at commit time to explicitly list all the
|
||||
transitive dependencies at current versions. This way, we know that
|
||||
all dependencies will have the exact same version installed at all times.
|
||||
|
||||
To update one of the dependencies shared across all `repo2docker` builds, you
|
||||
must follow these steps (with more detailed information in the sections below):
|
||||
|
||||
1. Make sure you have [Docker](https://www.docker.com/) running on your computer
|
||||
2. Bump the version numbers of the dependencies you want to update in the `conda` environment ([link](https://github.com/jupyterhub/repo2docker/blob/master/CONTRIBUTING.md#conda-dependencies))
|
||||
3. Make a pull request with your changes ([link](https://github.com/jupyterhub/repo2docker/blob/master/CONTRIBUTING.md#make-a-pull-request))
|
||||
1. Bump the version numbers of the dependencies you want to update in the `conda` environment ([link](tasks:conda-dependencies))
|
||||
2. Make a pull request with your changes ([link](https://github.com/jupyterhub/repo2docker/blob/HEAD/CONTRIBUTING.md#make-a-pull-request))
|
||||
|
||||
See the subsections below for more detailed instructions.
|
||||
|
||||
(tasks:conda-dependencies)=
|
||||
|
||||
### Conda dependencies
|
||||
|
||||
1. There are two files related to conda dependencies. Edit as needed.
|
||||
|
||||
- `repo2docker/buildpacks/conda/environment.yml`
|
||||
- `repo2docker/buildpacks/conda/environment.yml`
|
||||
|
||||
Contains list of packages to install in Python3 conda environments,
|
||||
which are the default. **This is where all Notebook versions &
|
||||
notebook extensions (such as JupyterLab / nteract) go**.
|
||||
Contains list of packages to install in Python3 conda environments,
|
||||
which are the default. **This is where all Notebook versions &
|
||||
notebook extensions (such as JupyterLab) go**.
|
||||
|
||||
- `repo2docker/buildpacks/conda/environment.py-2.7.yml`
|
||||
- `repo2docker/buildpacks/conda/environment.py-2.7.yml`
|
||||
|
||||
Contains list of packages to install in Python2 conda environments, which
|
||||
can be specifically requested by users. **This only needs `IPyKernel`
|
||||
and kernel related libraries**. Notebook / Notebook Extension need
|
||||
not be installed here.
|
||||
Contains list of packages to install in Python2 conda environments, which
|
||||
can be specifically requested by users. **This only needs `IPyKernel`
|
||||
and kernel related libraries**. Notebook / Notebook Extension need
|
||||
not be installed here.
|
||||
|
||||
2. Once you edit either of these files to add a new package / bump version on
|
||||
an existing package, you should then run:
|
||||
|
@ -83,39 +91,30 @@ See the subsections below for more detailed instructions.
|
|||
python freeze.py
|
||||
```
|
||||
|
||||
This script will resolve dependencies and write them to the respective `.frozen.yml`
|
||||
files. You will need `docker` installed to run this script.
|
||||
This script will resolve dependencies and write them to the respective `.lock`
|
||||
files.
|
||||
|
||||
3. After the freeze script finishes, a number of files will have been created.
|
||||
Commit the following subset of files to git:
|
||||
3. After the freeze script finishes, a number of files will have been **modified**.
|
||||
They roughly follow this pattern:
|
||||
|
||||
```
|
||||
repo2docker/buildpacks/conda/environment.yml
|
||||
repo2docker/buildpacks/conda/environment.frozen.yml
|
||||
repo2docker/buildpacks/conda/environment.py-2.7.yml
|
||||
repo2docker/buildpacks/conda/environment.py-2.7.frozen.yml
|
||||
repo2docker/buildpacks/conda/environment.py-3.5.frozen.yml
|
||||
repo2docker/buildpacks/conda/environment.py-3.6.frozen.yml
|
||||
```
|
||||
```
|
||||
repo2docker/buildpacks/conda/environment*
|
||||
```
|
||||
|
||||
5. Make a pull request; see details below.
|
||||
You should **commit all modified files** to git.
|
||||
|
||||
6. Once the pull request is approved (but not yet merged), Update the
|
||||
4. Make a Pull Request to the `jupyterhub/repo2docker` repository, with a description
|
||||
of what versions were bumped / what new packages were added and why. If you fix a
|
||||
bug or add new functionality consider adding a new test to prevent the bug from
|
||||
coming back/the feature breaking in the future.
|
||||
|
||||
5. Once the pull request is approved (but not yet merged), Update the
|
||||
change log (details below) and commit the change log, then update
|
||||
the pull request.
|
||||
|
||||
|
||||
### Make a Pull Request
|
||||
|
||||
Once you've made the commit, please make a Pull Request to the `jupyterhub/repo2docker`
|
||||
repository, with a description of what versions were bumped / what new packages were
|
||||
added and why. If you fix a bug or add new functionality consider adding a new
|
||||
test to prevent the bug from coming back/the feature breaking in the future.
|
||||
|
||||
|
||||
## Creating a Release
|
||||
|
||||
We make a release of whatever is on `master` every month. We use "calendar versioning".
|
||||
We make a release of whatever is on `main` every month. We use "calendar versioning".
|
||||
Monthly releases give users a predictable pattern for when releases are going to
|
||||
happen and prevents locking up improvements for fixes for long periods of time.
|
||||
|
||||
|
@ -135,7 +134,7 @@ V=YYYY.MM.0; git tag -am "release $V" $V
|
|||
> If you need to make a second (or third) release in a month increment the
|
||||
> trailing 0 of the version to 1 (or 2).
|
||||
|
||||
Then push this change up to the master repository
|
||||
Then push this change up to the main repository
|
||||
|
||||
```
|
||||
git push origin --tags
|
||||
|
@ -150,26 +149,13 @@ Once this has completed, make sure that the new version has been updated.
|
|||
Once the new release has been pushed to PyPI, we need to create a new
|
||||
release on the [GitHub repository releases page](https://github.com/jupyterhub/repo2docker/releases). Once on that page, follow these steps:
|
||||
|
||||
* Click "Draft a new release"
|
||||
* Choose a tag version using the same tag you just created above
|
||||
* The release name is simply the tag version
|
||||
* Finally, click "Publish release"
|
||||
- Click "Draft a new release"
|
||||
- Choose a tag version using the same tag you just created above
|
||||
- The release name is simply the tag version
|
||||
- Finally, click "Publish release"
|
||||
|
||||
That's it!
|
||||
|
||||
|
||||
## Keeping the Pipfile and requirements files up to date
|
||||
|
||||
We now have both a `dev-requirements.txt` and a `Pifile` for repo2docker, as
|
||||
such it is important to keep these in sync/up-to-date.
|
||||
|
||||
Both files use `pip identifiers` so if you are updating for example the Sphinx version
|
||||
in the `doc-requirements.txt` (currently `Sphinx = ">=1.4,!=1.5.4"`) you can use the
|
||||
same syntax to update the Pipfile and viceversa.
|
||||
|
||||
At the moment this has to be done manually so please make sure to update both
|
||||
files accordingly.
|
||||
|
||||
# Uncommon tasks
|
||||
|
||||
## Compare generated Dockerfiles between repo2docker versions
|
||||
|
|
|
@ -7,8 +7,7 @@ The philosophy for the repo2docker buildpacks includes:
|
|||
- using common configuration files for familiar installation and packaging tools
|
||||
- allowing configuration files to be combined to compose more complex setups
|
||||
- specifying default locations for configuration files
|
||||
(in the repository's root, `binder` or `.binder` directory)
|
||||
|
||||
(in the repository's root, `binder` or `.binder` directory)
|
||||
|
||||
When designing `repo2docker` and adding to it in the future, the
|
||||
developers are influenced by two primary use cases.
|
||||
|
@ -50,7 +49,7 @@ Many ingredients go into making an image from a repository:
|
|||
|
||||
`repo2docker` controls the first two, the user controls the third one. The current
|
||||
policy for the version of the base image is that we will use the current LTS
|
||||
version Bionic Beaver (18.04) for the foreseeable future.
|
||||
version Jammy Jellyfish (22.04) for the foreseeable future.
|
||||
|
||||
The version of `repo2docker` used to build an image can influence which packages
|
||||
are installed by default and which features are supported during the build
|
||||
|
@ -79,7 +78,7 @@ is a highly recommended quick read.
|
|||
Although other projects, like
|
||||
[s2i](https://github.com/openshift/source-to-image), exist to convert source to
|
||||
Docker images, `repo2docker` provides the additional functionality to support
|
||||
*composable* environments. We want to easily have an image with
|
||||
_composable_ environments. We want to easily have an image with
|
||||
Python3+Julia+R-3.2 environments, rather than just one single language
|
||||
environment. While generally one language environment per container works well,
|
||||
in many scientific / datascience computing environments you need multiple
|
||||
|
|
|
@ -22,22 +22,35 @@ Repo2docker officially supports the following versions of Python
|
|||
(specified in your :ref:`environment.yml <environment.yml>` or
|
||||
:ref:`runtime.txt <runtime.txt>` file):
|
||||
|
||||
- 3.11 (added in 2023)
|
||||
- 3.10 (added in 2022, default in 2023)
|
||||
- 3.9 (added in 2021)
|
||||
- 3.8 (added in 0.11)
|
||||
- 3.7 (added in 0.7, default in 0.8)
|
||||
- 3.6 (default in 0.7 and earlier)
|
||||
- 3.5
|
||||
- 2.7
|
||||
|
||||
Additional versions may work, as long as the
|
||||
`base environment <https://github.com/jupyterhub/repo2docker/blob/master/repo2docker/buildpacks/conda/environment.yml>`_
|
||||
`base environment <https://github.com/jupyterhub/repo2docker/blob/HEAD/repo2docker/buildpacks/conda/environment.yml>`_
|
||||
can be installed for your version of Python.
|
||||
The most likely source of incompatibility is if one of the packages
|
||||
in the base environment is not packaged for your Python,
|
||||
either because the version of the package is too new and your chosen Python is too old,
|
||||
or vice versa.
|
||||
|
||||
I Python 2.7 is specified, a separate environment for the kernel will be
|
||||
installed with Python 2. The notebook server will run in the default Python 3.7
|
||||
environment.
|
||||
If an old version of Python is specified (3.6 or earlier in 2023), a separate environment for the kernel will be installed with your requested Python version.
|
||||
The notebook server will run in the default |default_python| environment.
|
||||
That is, your _notebooks_ will run with Python 3.6, while your notebook _server_ will run with |default_python|.
|
||||
|
||||
These two environments can be distinguished with ``$NB_PYTHON_PREFIX/bin/python`` for the server and ``$KERNEL_PYTHON_PREFIX/bin/python`` for the kernel.
|
||||
Both of these environment variables area always defined, even when they are the same.
|
||||
|
||||
Starting in 2023, the default version of Python used when Python version is unspecified will be updated more often.
|
||||
Python itself releases a new version every year now, and repo2docker will follow, with the default Python version generally trailing the latest stable version of Python itself by 1-2 versions.
|
||||
|
||||
If you choose not to specify a Python version, your repository is _guaranteed_ to stop working, eventually.
|
||||
We **strongly** recommend specifying a Python version (in environment.yml, runtime.txt, Pipfile, etc.)
|
||||
|
||||
Julia
|
||||
~~~~~
|
||||
|
@ -49,11 +62,11 @@ Julia versions 0.6.x and earlier are supported via a :ref:`REQUIRE <REQUIRE>` fi
|
|||
R
|
||||
~
|
||||
|
||||
The default version of R is currently R 3.6.1. You can select the version of
|
||||
The default version of R is currently R 4.2. You can select the version of
|
||||
R you want to use by specifying it in the :ref:`runtime.txt <runtime.txt>`
|
||||
file.
|
||||
|
||||
We support R versions 3.4, 3.5 and 3.6.
|
||||
We support R versions 3.4, 3.5, 3.6, 4.0, 4.1 and 4.2.
|
||||
|
||||
|
||||
Why is my repository failing to build with ``ResolvePackageNotFound`` ?
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
# Change the base image used by Docker
|
||||
|
||||
You may change the base image used in the `Dockerfile` that creates images by repo2docker.
|
||||
This is equivalent to changing the `FROM <base_image>` in the Dockerfile.
|
||||
|
||||
To do so, use the `base_image` traitlet when invoking `repo2docker` (ex: `repo2docker --Repo2Docker.base_image=image_name`).
|
||||
Note that this is not configurable by individual repositories, it is configured when you invoke the `repo2docker` command.
|
||||
|
||||
```{note}
|
||||
By default repo2docker builds on top of the `buildpack-deps:jammy` base image, an Ubuntu-based image.
|
||||
```
|
||||
|
||||
## Requirements for your base image
|
||||
|
||||
`repo2docker` will only work if a specific set of packages exists in the base image.
|
||||
Only images that match the following criteria are supported:
|
||||
|
||||
- Ubuntu based distributions (minimum `18.04`)
|
||||
- Contains a set of base packages installed with [the `buildpack-deps` image family](https://hub.docker.com/_/buildpack-deps).
|
||||
|
||||
Other images _may_ work, but are not officially supported.
|
||||
|
||||
## This will affect reproducibility 🚨
|
||||
|
||||
Changing the base image may have an impact on the reproducibility of repositories that are built.
|
||||
There are **no guarantees that repositories will behave the same way as other repo2docker builds if you change the base image**.
|
||||
For example these are two scenarios that would make your repositories non-reproducible:
|
||||
|
||||
- **Your base image is different from `Ubuntu:jammy`.**
|
||||
If you change the base image in a way that is different from repo2docker's default (the Ubuntu `jammy` image), then repositories that **you** build with repo2docker may be significantly different from those that **other** instances of repo2docker build (e.g., those from [`mybinder.org`](https://mybinder.org)).
|
||||
- **Your base image changes over time.**
|
||||
If you choose a base image that changes its composition over time (e.g., an image provided by some other community), then it may cause repositories build with your base image to change in unpredictable ways.
|
||||
We recommend choosing a base image that you know to be stable and trustworthy.
|
|
@ -0,0 +1,26 @@
|
|||
# Deal with breaking changes in repo2docker
|
||||
|
||||
Repo2docker occasionally has to make breaking changes in how repositories are built.
|
||||
|
||||
## Upgrade of base image from Ubuntu 18.04 to 22.04
|
||||
|
||||
The base image used by repo2docker was [upgraded from Ubuntu 18.04 to Ubuntu 22.04](https://github.com/jupyterhub/repo2docker/pull/1287) in version 2023.10.0 due to Ubuntu 18.04 going out of support.
|
||||
|
||||
This is unlikely to affect you unless you are using {ref}`apt.txt <apt.txt>`.
|
||||
|
||||
{ref}`apt.txt <apt.txt>` installs packages from the official Ubuntu package repositories, and is intrinsically tied to the Ubuntu version.
|
||||
Many packages will be available in both Ubuntu 18.04 and Ubuntu 22.04, however some may be renamed (for example if multiple incompatible versions are available).
|
||||
|
||||
Some packages may be removed, or may not be compatible with the previous version.
|
||||
In this case you should see if your packages can be installed using a {ref}`Conda environment.yml file <environment.yml>` using either the default [conda-forge channel](https://conda-forge.org/feedstock-outputs/) or in one of the many [third-party channels](https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/channels.html).
|
||||
|
||||
Alternatively you can try installing the packages from source, using a {ref}`postBuild <postBuild>` script.
|
||||
|
||||
As a last resort you can install an older version of repo2docker locally, build your image, push it to a public container registry such as [Docker Hub](https://hub.docker.com/), [GitHub Container Registry](https://docs.github.com/en/packages/guides/about-github-container-registry) or [quay.io](https://quay.io/), and replace your repository's repo2docker configuration with a minimal {ref}`Dockerfile <dockerfile>` containing just:
|
||||
|
||||
```dockerfile
|
||||
FROM <registry>/<username>/<image>:<tag>
|
||||
```
|
||||
|
||||
This image will contain a frozen version of your repository at the time the image was built.
|
||||
You will need to rebuild and push it everytime your repository is modified.
|
|
@ -13,5 +13,7 @@ Select from the pages listed below to get started.
|
|||
languages
|
||||
export_environment
|
||||
lab_workspaces
|
||||
breaking_changes
|
||||
jupyterhub_images
|
||||
deploy
|
||||
base_image
|
||||
|
|
|
@ -14,6 +14,6 @@ another JupyterLab installation in order to share a workspace with
|
|||
someone else.
|
||||
|
||||
In order to package your workspace with a repository, we recommend
|
||||
following the steps in this example repository:
|
||||
following the steps in the documentation:
|
||||
|
||||
https://github.com/ian-r-rose/binder-workspace-demo/
|
||||
https://jupyterlab.readthedocs.io/en/stable/user/binder.html#customize-the-layout
|
||||
|
|
|
@ -54,19 +54,26 @@ To specify a specific version of Python, you have two options:
|
|||
The R Language
|
||||
==============
|
||||
|
||||
To ensure that R is installed, you must specify a version of R in a ``runtime.txt``
|
||||
file. This takes the following form::
|
||||
repo2docker supports R, the open source `RStudio IDE <https://www.rstudio.com/>`_ as well
|
||||
as Jupyter support for R with the `IRKernel <https://irkernel.github.io/>`_. To set it up,
|
||||
you need to create a ``runtime.txt`` file with the following format:
|
||||
|
||||
r-YYYY-MM-DD
|
||||
r-<version>-<YYYY>-<MM>-<DD>
|
||||
|
||||
The date corresponds to the state of the MRAN repository at this day. Make sure
|
||||
that you choose a day with the desired version of your packages. For example,
|
||||
to use the MRAN repository on January 1st, 2018, add this line to ``runtime.txt``::
|
||||
This will provide you R of given version (such as 4.1, 3.6, etc), and a CRAN snapshot
|
||||
to install libraries from on the given date. You can install more R packages from CRAN
|
||||
by adding a :ref:`install.R<install.R>` file to your repo. RStudio and IRKernel are
|
||||
installed by default for all R versions.
|
||||
|
||||
r-2018-01-01
|
||||
`packagemanager.posit.co <https://packagemanager.posit.co/client/#/>`_
|
||||
will be used to provide much faster installations via `binary packages <https://www.rstudio.com/blog/package-manager-v1-1-no-interruptions/>`_.
|
||||
For *some* packages, this might require you install underlying system libraries
|
||||
using :ref:`apt.txt` - look at the page for the CRAN package you are interested in at
|
||||
`packagemanager.posit.co <https://packagemanager.posit.co/client/#/>`_ to find
|
||||
a list.
|
||||
|
||||
repo2docker stopped using the Microsoft mirror MRAN for older R versions after its shutdown in July, 2023.
|
||||
|
||||
Note that to install specific packages with the R environment, you should
|
||||
use the ``install.R`` configuration file.
|
||||
|
||||
Julia
|
||||
=====
|
||||
|
|
|
@ -11,26 +11,13 @@ This is controlled with various :ref:`configuration files <config-files>`.
|
|||
JupyterLab
|
||||
==========
|
||||
|
||||
You do not need any extra configuration in order to allow the use
|
||||
of the JupyterLab interface. You can launch JupyterLab from within a user
|
||||
session by opening the Jupyter Notebook and appending ``/lab`` to the end of the URL
|
||||
like so:
|
||||
JupyterLab is the default interface for repo2docker.
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
http(s)://<server:port>/lab
|
||||
|
||||
To switch back to the classic notebook, add ``/tree`` to the URL like so:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
http(s)://<server:port>/tree
|
||||
|
||||
For example, the following Binder URL will open the
|
||||
The following Binder URL will open the
|
||||
`pyTudes repository <https://github.com/norvig/pytudes>`_
|
||||
and begin a JupyterLab session in the ``ipynb`` folder:
|
||||
|
||||
https://mybinder.org/v2/gh/norvig/pytudes/master?urlpath=lab/tree/ipynb
|
||||
https://mybinder.org/v2/gh/norvig/pytudes/HEAD?urlpath=lab/tree/ipynb
|
||||
|
||||
The ``/tree/ipynb`` above is how JupyterLab directs you to a specific file
|
||||
or folder.
|
||||
|
@ -38,36 +25,26 @@ or folder.
|
|||
To learn more about URLs in JupyterLab and Jupyter Notebook, visit
|
||||
`starting JupyterLab <http://jupyterlab.readthedocs.io/en/latest/getting_started/starting.html>`_.
|
||||
|
||||
Classic Notebook Interface
|
||||
==========================
|
||||
|
||||
nteract
|
||||
=======
|
||||
|
||||
`nteract is a notebook interface <https://nteract.io/>`_ built with React.
|
||||
It is similar to a more feature-filled version of the traditional
|
||||
Jupyter Notebook interface.
|
||||
|
||||
nteract comes pre-installed in any session that has been built from
|
||||
a Python repository.
|
||||
|
||||
You can launch nteract from within a user
|
||||
session by replacing ``/tree`` with ``/nteract`` at the end of a notebook
|
||||
server's URL like so:
|
||||
The classic notebook is also available without any configuration.
|
||||
To switch to the classic notebook,
|
||||
You do not need any extra configuration in order to allow the use
|
||||
of the classic notebook interface.
|
||||
You can launch the classic notebook interface from within a user
|
||||
session by opening JupyterLab and replacing ``/lab/`` with ``/tree/`` in the default juptyerlab URL
|
||||
like so:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
http(s)://<server:port>/nteract
|
||||
http(s)://<server:port>/tree/
|
||||
|
||||
For example, the following Binder URL will open the
|
||||
`pyTudes repository <https://github.com/norvig/pytudes>`_
|
||||
and begin an nteract session in the ``ipynb`` folder:
|
||||
And you can switch back to JupyterLab by replacing ``/tree/`` with ``/lab/``:
|
||||
|
||||
https://mybinder.org/v2/gh/norvig/pytudes/master?urlpath=nteract/tree/ipynb
|
||||
|
||||
The ``/tree/ipynb`` above is how nteract directs you to a specific file
|
||||
or folder.
|
||||
|
||||
To learn more about nteract, visit `the nteract website <https://nteract.io/about>`_.
|
||||
.. code-block:: none
|
||||
|
||||
http(s)://<server:port>/lab/
|
||||
|
||||
RStudio
|
||||
=======
|
||||
|
@ -83,13 +60,13 @@ RStudio will be accessible by appending ``/rstudio`` to the URL, like so:
|
|||
For example, the following Binder link will open an RStudio session in
|
||||
the `R demo repository <https://github.com/binder-examples/r>`_.
|
||||
|
||||
http://mybinder.org/v2/gh/binder-examples/r/master?urlpath=rstudio
|
||||
http://mybinder.org/v2/gh/binder-examples/r/HEAD?urlpath=rstudio
|
||||
|
||||
|
||||
Shiny
|
||||
=====
|
||||
|
||||
`Shiny lets you create interactive visualizaions with R <https://shiny.rstudio.com/>`_.
|
||||
`Shiny lets you create interactive visualizations with R <https://shiny.rstudio.com/>`_.
|
||||
Shiny is automatically enabled if a configuration file for
|
||||
R is detected (i.e. an R version specified in ``runtime.txt``). If
|
||||
this is detected, Shiny will be accessible by appending
|
||||
|
@ -106,7 +83,7 @@ a Shiny app.
|
|||
For example, the following Binder link will open a Shiny session in
|
||||
the `R demo repository <https://github.com/binder-examples/r>`_.
|
||||
|
||||
http://mybinder.org/v2/gh/binder-examples/r/master?urlpath=shiny/bus-dashboard/
|
||||
http://mybinder.org/v2/gh/binder-examples/r/HEAD?urlpath=shiny/bus-dashboard/
|
||||
|
||||
|
||||
Stencila
|
||||
|
|
|
@ -19,7 +19,7 @@ to build images on demand.
|
|||
|
||||
Please report `Bugs <https://github.com/jupyterhub/repo2docker/issues>`_,
|
||||
`ask questions <https://gitter.im/jupyterhub/binder>`_ or
|
||||
`contribute to the project <https://github.com/jupyterhub/repo2docker/blob/master/CONTRIBUTING.md>`_.
|
||||
`contribute to the project <https://github.com/jupyterhub/repo2docker/blob/HEAD/CONTRIBUTING.md>`_.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
|
|
@ -19,7 +19,7 @@ The latest version of Docker, ``18.03``, successfully builds repositories from
|
|||
`binder-examples <https://github.com/binder-examples>`_.
|
||||
The `BinderHub <https://binderhub.readthedocs.io/>`_ helm chart uses version
|
||||
``17.11.0-ce-dind``. See the
|
||||
`helm chart <https://github.com/jupyterhub/binderhub/blob/master/helm-chart/binderhub/values.yaml#L167>`_
|
||||
`helm chart <https://github.com/jupyterhub/binderhub/blob/HEAD/helm-chart/binderhub/values.yaml#L167>`_
|
||||
for more details.
|
||||
|
||||
Optional: Mercurial
|
||||
|
@ -48,7 +48,7 @@ We recommend installing ``repo2docker`` with the ``pip`` tool::
|
|||
|
||||
for the latest release. To install the most recent code from the upstream repository, run::
|
||||
|
||||
python3 -m pip install https://github.com/jupyterhub/repo2docker/archive/master.zip
|
||||
python3 -m pip install https://github.com/jupyterhub/repo2docker/archive/main.zip
|
||||
|
||||
For information on using ``repo2docker``, see :ref:`usage`.
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ Pytudes_ repository::
|
|||
Building the image may take a few minutes.
|
||||
|
||||
Pytudes_
|
||||
uses a `requirements.txt file <https://github.com/norvig/pytudes/blob/master/requirements.txt>`_
|
||||
uses a `requirements.txt file <https://github.com/norvig/pytudes/blob/HEAD/requirements.txt>`_
|
||||
to specify its Python environment. Because of this, ``repo2docker`` will use
|
||||
``pip`` to install dependencies listed in this ``requirement.txt`` file, and
|
||||
these will be present in the generated Docker image. To learn more about
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
# Docker build hooks
|
||||
|
||||
These define our [custom hooks for docker automated builds](https://docs.docker.com/docker-hub/builds/advanced/#custom-build-phase-hooks)
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# when building jupyter/repo2docker:master
|
||||
# also push jupyter/repo2docker:1.2.3-3.abcd1234 (replace + with -)
|
||||
version=$(docker run $DOCKER_REPO:$DOCKER_TAG jupyter-repo2docker --version | sed s@+@-@)
|
||||
VERSION_IMAGE="$DOCKER_REPO:$version"
|
||||
docker tag $DOCKER_REPO:$DOCKER_TAG "$VERSION_IMAGE"
|
||||
docker push "$VERSION_IMAGE"
|
|
@ -1,6 +0,0 @@
|
|||
name: repo2docker
|
||||
type: sphinx
|
||||
python:
|
||||
version: 3
|
||||
setup_py_install: true
|
||||
requirements_file: docs/doc-requirements.txt
|
|
@ -3,4 +3,7 @@ from ._version import get_versions
|
|||
__version__ = get_versions()["version"]
|
||||
del get_versions
|
||||
|
||||
from . import _version
|
||||
from .app import Repo2Docker
|
||||
|
||||
__version__ = _version.get_versions()["version"]
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
import argparse
|
||||
import sys
|
||||
import os
|
||||
import logging
|
||||
import docker
|
||||
from .app import Repo2Docker
|
||||
import os
|
||||
import sys
|
||||
|
||||
from . import __version__
|
||||
from .utils import validate_and_generate_port_mapping, is_valid_docker_image_name
|
||||
from .app import Repo2Docker
|
||||
from .engine import BuildError, ImageLoadError
|
||||
from .utils import (
|
||||
R2dState,
|
||||
is_valid_docker_image_name,
|
||||
validate_and_generate_port_mapping,
|
||||
)
|
||||
|
||||
|
||||
def validate_image_name(image_name):
|
||||
|
@ -48,7 +53,7 @@ class MimicDockerEnvHandling(argparse.Action):
|
|||
# key pass using current value, or don't pass
|
||||
if "=" not in values:
|
||||
try:
|
||||
value_to_append = "{}={}".format(values, os.environ[values])
|
||||
value_to_append = f"{values}={os.environ[values]}"
|
||||
except KeyError:
|
||||
# no local def, so don't pass
|
||||
return
|
||||
|
@ -66,6 +71,20 @@ def get_argparser():
|
|||
description="Fetch a repository and build a container image"
|
||||
)
|
||||
|
||||
argparser.add_argument(
|
||||
"--help-all",
|
||||
dest="help_all",
|
||||
action="store_true",
|
||||
help="Display all configurable options and exit.",
|
||||
)
|
||||
|
||||
argparser.add_argument(
|
||||
"--version",
|
||||
dest="version",
|
||||
action="store_true",
|
||||
help="Print the repo2docker version and exit.",
|
||||
)
|
||||
|
||||
argparser.add_argument(
|
||||
"--config",
|
||||
default="repo2docker_config.py",
|
||||
|
@ -74,7 +93,7 @@ def get_argparser():
|
|||
|
||||
argparser.add_argument(
|
||||
"--json-logs",
|
||||
default=False,
|
||||
default=None,
|
||||
action="store_true",
|
||||
help="Emit JSON logs instead of human readable logs",
|
||||
)
|
||||
|
@ -89,12 +108,13 @@ def get_argparser():
|
|||
|
||||
argparser.add_argument(
|
||||
"--image-name",
|
||||
help=("Name of image to be built. If unspecified will be " "autogenerated"),
|
||||
help="Name of image to be built. If unspecified will be autogenerated",
|
||||
type=validate_image_name,
|
||||
)
|
||||
|
||||
argparser.add_argument(
|
||||
"--ref",
|
||||
default=None,
|
||||
help=(
|
||||
"Reference to build instead of default reference. For example"
|
||||
" branch name or commit for a Git repository."
|
||||
|
@ -107,11 +127,17 @@ def get_argparser():
|
|||
"--no-build",
|
||||
dest="build",
|
||||
action="store_false",
|
||||
help=(
|
||||
"Do not actually build the image. Useful in conjunction " "with --debug."
|
||||
),
|
||||
help="Do not actually build the image. Useful in conjunction with --debug.",
|
||||
)
|
||||
|
||||
argparser.add_argument(
|
||||
"--build",
|
||||
dest="build",
|
||||
action="store_true",
|
||||
help="Build the image (default)",
|
||||
)
|
||||
argparser.set_defaults(build=None)
|
||||
|
||||
argparser.add_argument(
|
||||
"--build-memory-limit",
|
||||
help="Total Memory that can be used by the docker build process",
|
||||
|
@ -130,6 +156,14 @@ def get_argparser():
|
|||
help="Do not run container after it has been built",
|
||||
)
|
||||
|
||||
argparser.add_argument(
|
||||
"--run",
|
||||
dest="run",
|
||||
action="store_true",
|
||||
help="Run container after it has been built (default).",
|
||||
)
|
||||
argparser.set_defaults(run=None)
|
||||
|
||||
argparser.add_argument(
|
||||
"--publish",
|
||||
"-p",
|
||||
|
@ -145,6 +179,7 @@ def get_argparser():
|
|||
"--publish-all",
|
||||
"-P",
|
||||
dest="all_ports",
|
||||
default=None,
|
||||
action="store_true",
|
||||
help="Publish all exposed ports to random host ports.",
|
||||
)
|
||||
|
@ -155,6 +190,13 @@ def get_argparser():
|
|||
action="store_false",
|
||||
help="Don't clean up remote checkouts after we are done",
|
||||
)
|
||||
argparser.add_argument(
|
||||
"--clean",
|
||||
dest="clean",
|
||||
action="store_true",
|
||||
help="Clean up remote checkouts after we are done (default).",
|
||||
)
|
||||
argparser.set_defaults(clean=None)
|
||||
|
||||
argparser.add_argument(
|
||||
"--push",
|
||||
|
@ -162,6 +204,13 @@ def get_argparser():
|
|||
action="store_true",
|
||||
help="Push docker image to repository",
|
||||
)
|
||||
argparser.add_argument(
|
||||
"--no-push",
|
||||
dest="push",
|
||||
action="store_false",
|
||||
help="Don't push docker image to repository (default).",
|
||||
)
|
||||
argparser.set_defaults(push=None)
|
||||
|
||||
argparser.add_argument(
|
||||
"--volume",
|
||||
|
@ -204,22 +253,39 @@ def get_argparser():
|
|||
|
||||
argparser.add_argument("--appendix", type=str, help=Repo2Docker.appendix.help)
|
||||
|
||||
argparser.add_argument("--subdir", type=str, help=Repo2Docker.subdir.help)
|
||||
argparser.add_argument(
|
||||
"--label",
|
||||
dest="labels",
|
||||
action="append",
|
||||
help="Extra label to set on the image, in form name=value",
|
||||
default=[],
|
||||
)
|
||||
|
||||
argparser.add_argument(
|
||||
"--version",
|
||||
dest="version",
|
||||
action="store_true",
|
||||
help="Print the repo2docker version and exit.",
|
||||
"--build-arg",
|
||||
dest="build_args",
|
||||
action="append",
|
||||
help="Extra build arg to pass to the build process, in form name=value",
|
||||
default=[],
|
||||
)
|
||||
|
||||
argparser.add_argument("--subdir", type=str, help=Repo2Docker.subdir.help)
|
||||
|
||||
argparser.add_argument(
|
||||
"--cache-from", action="append", default=[], help=Repo2Docker.cache_from.help
|
||||
)
|
||||
|
||||
argparser.add_argument(
|
||||
"--engine",
|
||||
type=str,
|
||||
default="docker",
|
||||
help=Repo2Docker.engine.help,
|
||||
)
|
||||
|
||||
return argparser
|
||||
|
||||
|
||||
# Note: only used by sphinx-autoprogram
|
||||
argparser = get_argparser()
|
||||
|
||||
|
||||
|
@ -227,25 +293,54 @@ def make_r2d(argv=None):
|
|||
if argv is None:
|
||||
argv = sys.argv[1:]
|
||||
|
||||
argparser = get_argparser()
|
||||
|
||||
# version must be checked before parse, as repo/cmd are required and
|
||||
# will spit out an error if allowed to be parsed first.
|
||||
if "--version" in argv:
|
||||
print(__version__)
|
||||
sys.exit(0)
|
||||
|
||||
args = get_argparser().parse_args(argv)
|
||||
if "--help-all" in argv:
|
||||
argparser.print_help()
|
||||
print("\nAll configurable options:\n")
|
||||
Repo2Docker().print_help(classes=True)
|
||||
sys.exit(0)
|
||||
|
||||
args, traitlet_args = argparser.parse_known_args(argv)
|
||||
|
||||
r2d = Repo2Docker()
|
||||
|
||||
if args.debug:
|
||||
r2d.log_level = logging.DEBUG
|
||||
|
||||
# load CLI after config file, for correct priority
|
||||
r2d.load_config_file(args.config)
|
||||
r2d.parse_command_line(traitlet_args)
|
||||
|
||||
if args.debug:
|
||||
# re-apply debug in case log_level was also set via config
|
||||
r2d.log_level = logging.DEBUG
|
||||
|
||||
if args.appendix:
|
||||
r2d.appendix = args.appendix
|
||||
|
||||
for l in args.labels:
|
||||
key, _, val = l.partition("=")
|
||||
r2d.labels[key] = val
|
||||
|
||||
for a in args.build_args:
|
||||
key, _, val = a.partition("=")
|
||||
r2d.extra_build_args[key] = val
|
||||
|
||||
# repo is a required arg, and should never come from config:
|
||||
if "repo" in r2d.config.Repo2Docker:
|
||||
r2d.log.warning(
|
||||
f"Ignoring Repo2Docker.repo={r2d.repo!r} configuration, using {args.repo!r} from CLI."
|
||||
)
|
||||
r2d.repo = args.repo
|
||||
r2d.ref = args.ref
|
||||
if args.ref is not None:
|
||||
r2d.ref = args.ref
|
||||
|
||||
# user wants to mount a local directory into the container for
|
||||
# editing
|
||||
|
@ -258,29 +353,30 @@ def make_r2d(argv=None):
|
|||
r2d.volumes[os.path.abspath(args.repo)] = "."
|
||||
else:
|
||||
r2d.log.error(
|
||||
'Cannot mount "{}" in editable mode '
|
||||
"as it is not a directory".format(args.repo),
|
||||
extra=dict(phase="failed"),
|
||||
f'Cannot mount "{args.repo}" in editable mode '
|
||||
"as it is not a directory",
|
||||
extra=dict(phase=R2dState.FAILED),
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
if args.image_name:
|
||||
r2d.output_image_spec = args.image_name
|
||||
else:
|
||||
# we will pick a name after fetching the repository
|
||||
r2d.output_image_spec = ""
|
||||
|
||||
r2d.json_logs = args.json_logs
|
||||
if args.json_logs is not None:
|
||||
r2d.json_logs = args.json_logs
|
||||
|
||||
r2d.dry_run = not args.build
|
||||
if args.build is not None:
|
||||
r2d.dry_run = not args.build
|
||||
|
||||
if r2d.dry_run:
|
||||
# Can't push nor run if we aren't building
|
||||
args.run = False
|
||||
args.push = False
|
||||
|
||||
r2d.run = args.run
|
||||
r2d.push = args.push
|
||||
if args.run is not None:
|
||||
r2d.run = args.run
|
||||
if args.push is not None:
|
||||
r2d.push = args.push
|
||||
|
||||
# check against r2d.run and not args.run as r2d.run is false on
|
||||
# --no-build. Also r2d.volumes and not args.volumes since --editable
|
||||
|
@ -294,29 +390,33 @@ def make_r2d(argv=None):
|
|||
src, dest = v.split(":")
|
||||
r2d.volumes[src] = dest
|
||||
|
||||
r2d.run_cmd = args.cmd
|
||||
if args.cmd:
|
||||
r2d.run_cmd = args.cmd
|
||||
|
||||
if args.all_ports and not r2d.run:
|
||||
print(
|
||||
"To publish user defined port mappings, the container must " "also be run"
|
||||
)
|
||||
print("To publish user-defined port mappings, the container must also be run")
|
||||
sys.exit(1)
|
||||
|
||||
if args.ports and not r2d.run:
|
||||
print("To publish user-defined port mappings, the container must also be run")
|
||||
sys.exit(1)
|
||||
|
||||
if args.ports and len(args.ports) > 1 and not r2d.run_cmd:
|
||||
print(
|
||||
"To publish user defined port mappings, the container must " "also be run"
|
||||
"To publish user-defined port mapping, "
|
||||
"you must specify the command to run in the container"
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
if args.ports and not r2d.run_cmd:
|
||||
print(
|
||||
"To publish user defined port mapping, user must specify "
|
||||
"the command to run in the container"
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
r2d.ports = validate_and_generate_port_mapping(args.ports)
|
||||
r2d.all_ports = args.all_ports
|
||||
if args.ports:
|
||||
# override or update, if also defined in config file?
|
||||
if r2d.ports:
|
||||
r2d.log.warning(
|
||||
f"Ignoring port configuration from config (ports={r2d.ports}), overridden by CLI"
|
||||
)
|
||||
r2d.ports = validate_and_generate_port_mapping(args.ports)
|
||||
if args.all_ports is not None:
|
||||
r2d.all_ports = args.all_ports
|
||||
|
||||
if args.user_id:
|
||||
r2d.user_id = args.user_id
|
||||
|
@ -351,13 +451,14 @@ def make_r2d(argv=None):
|
|||
if args.cache_from:
|
||||
r2d.cache_from = args.cache_from
|
||||
|
||||
r2d.environment = args.environment
|
||||
if args.engine:
|
||||
r2d.engine = args.engine
|
||||
|
||||
# if the source exists locally we don't want to delete it at the end
|
||||
# FIXME: Find a better way to figure out if repo is 'local'. Push this into ContentProvider?
|
||||
if os.path.exists(args.repo):
|
||||
r2d.cleanup_checkout = False
|
||||
else:
|
||||
if args.environment:
|
||||
# extend any environment config from a config file
|
||||
r2d.environment.extend(args.environment)
|
||||
|
||||
elif args.clean is not None:
|
||||
r2d.cleanup_checkout = args.clean
|
||||
|
||||
if args.target_repo_dir:
|
||||
|
@ -371,12 +472,12 @@ def main():
|
|||
r2d.initialize()
|
||||
try:
|
||||
r2d.start()
|
||||
except docker.errors.BuildError as e:
|
||||
except BuildError as e:
|
||||
# This is only raised by us
|
||||
if r2d.log_level == logging.DEBUG:
|
||||
r2d.log.exception(e)
|
||||
sys.exit(1)
|
||||
except docker.errors.ImageLoadError as e:
|
||||
except ImageLoadError as e:
|
||||
# This is only raised by us
|
||||
if r2d.log_level == logging.DEBUG:
|
||||
r2d.log.exception(e)
|
||||
|
|
|
@ -4,19 +4,22 @@
|
|||
# directories (produced by setup.py build) will contain a much shorter file
|
||||
# that just contains the computed version number.
|
||||
|
||||
# This file is released into the public domain. Generated by
|
||||
# versioneer-0.18 (https://github.com/warner/python-versioneer)
|
||||
# This file is released into the public domain.
|
||||
# Generated by versioneer-0.29
|
||||
# https://github.com/python-versioneer/python-versioneer
|
||||
|
||||
"""Git implementation of _version.py."""
|
||||
|
||||
import errno
|
||||
import functools
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
from typing import Any, Callable, Dict, List, Optional, Tuple
|
||||
|
||||
|
||||
def get_keywords():
|
||||
def get_keywords() -> Dict[str, str]:
|
||||
"""Get the keywords needed to look up the version information."""
|
||||
# these strings will be replaced by git during git-archive.
|
||||
# setup.py/versioneer.py will grep for the variable names, so they must
|
||||
|
@ -32,8 +35,15 @@ def get_keywords():
|
|||
class VersioneerConfig:
|
||||
"""Container for Versioneer configuration parameters."""
|
||||
|
||||
VCS: str
|
||||
style: str
|
||||
tag_prefix: str
|
||||
parentdir_prefix: str
|
||||
versionfile_source: str
|
||||
verbose: bool
|
||||
|
||||
def get_config():
|
||||
|
||||
def get_config() -> VersioneerConfig:
|
||||
"""Create, populate and return the VersioneerConfig() object."""
|
||||
# these strings are filled in when 'setup.py versioneer' creates
|
||||
# _version.py
|
||||
|
@ -51,14 +61,14 @@ class NotThisMethod(Exception):
|
|||
"""Exception raised if a method is not valid for the current scenario."""
|
||||
|
||||
|
||||
LONG_VERSION_PY = {}
|
||||
HANDLERS = {}
|
||||
LONG_VERSION_PY: Dict[str, str] = {}
|
||||
HANDLERS: Dict[str, Dict[str, Callable]] = {}
|
||||
|
||||
|
||||
def register_vcs_handler(vcs, method): # decorator
|
||||
"""Decorator to mark a method as the handler for a particular VCS."""
|
||||
def register_vcs_handler(vcs: str, method: str) -> Callable: # decorator
|
||||
"""Create decorator to mark a method as the handler of a VCS."""
|
||||
|
||||
def decorate(f):
|
||||
def decorate(f: Callable) -> Callable:
|
||||
"""Store f in HANDLERS[vcs][method]."""
|
||||
if vcs not in HANDLERS:
|
||||
HANDLERS[vcs] = {}
|
||||
|
@ -68,24 +78,39 @@ def register_vcs_handler(vcs, method): # decorator
|
|||
return decorate
|
||||
|
||||
|
||||
def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=None):
|
||||
def run_command(
|
||||
commands: List[str],
|
||||
args: List[str],
|
||||
cwd: Optional[str] = None,
|
||||
verbose: bool = False,
|
||||
hide_stderr: bool = False,
|
||||
env: Optional[Dict[str, str]] = None,
|
||||
) -> Tuple[Optional[str], Optional[int]]:
|
||||
"""Call the given command(s)."""
|
||||
assert isinstance(commands, list)
|
||||
p = None
|
||||
for c in commands:
|
||||
process = None
|
||||
|
||||
popen_kwargs: Dict[str, Any] = {}
|
||||
if sys.platform == "win32":
|
||||
# This hides the console window if pythonw.exe is used
|
||||
startupinfo = subprocess.STARTUPINFO()
|
||||
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||
popen_kwargs["startupinfo"] = startupinfo
|
||||
|
||||
for command in commands:
|
||||
try:
|
||||
dispcmd = str([c] + args)
|
||||
dispcmd = str([command] + args)
|
||||
# remember shell=False, so use git.cmd on windows, not just git
|
||||
p = subprocess.Popen(
|
||||
[c] + args,
|
||||
process = subprocess.Popen(
|
||||
[command] + args,
|
||||
cwd=cwd,
|
||||
env=env,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=(subprocess.PIPE if hide_stderr else None),
|
||||
**popen_kwargs,
|
||||
)
|
||||
break
|
||||
except EnvironmentError:
|
||||
e = sys.exc_info()[1]
|
||||
except OSError as e:
|
||||
if e.errno == errno.ENOENT:
|
||||
continue
|
||||
if verbose:
|
||||
|
@ -94,20 +119,22 @@ def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False, env=
|
|||
return None, None
|
||||
else:
|
||||
if verbose:
|
||||
print("unable to find command, tried %s" % (commands,))
|
||||
print(f"unable to find command, tried {commands}")
|
||||
return None, None
|
||||
stdout = p.communicate()[0].strip()
|
||||
if sys.version_info[0] >= 3:
|
||||
stdout = stdout.decode()
|
||||
if p.returncode != 0:
|
||||
stdout = process.communicate()[0].strip().decode()
|
||||
if process.returncode != 0:
|
||||
if verbose:
|
||||
print("unable to run %s (error)" % dispcmd)
|
||||
print("stdout was %s" % stdout)
|
||||
return None, p.returncode
|
||||
return stdout, p.returncode
|
||||
return None, process.returncode
|
||||
return stdout, process.returncode
|
||||
|
||||
|
||||
def versions_from_parentdir(parentdir_prefix, root, verbose):
|
||||
def versions_from_parentdir(
|
||||
parentdir_prefix: str,
|
||||
root: str,
|
||||
verbose: bool,
|
||||
) -> Dict[str, Any]:
|
||||
"""Try to determine the version from the parent directory name.
|
||||
|
||||
Source tarballs conventionally unpack into a directory that includes both
|
||||
|
@ -116,7 +143,7 @@ def versions_from_parentdir(parentdir_prefix, root, verbose):
|
|||
"""
|
||||
rootdirs = []
|
||||
|
||||
for i in range(3):
|
||||
for _ in range(3):
|
||||
dirname = os.path.basename(root)
|
||||
if dirname.startswith(parentdir_prefix):
|
||||
return {
|
||||
|
@ -126,9 +153,8 @@ def versions_from_parentdir(parentdir_prefix, root, verbose):
|
|||
"error": None,
|
||||
"date": None,
|
||||
}
|
||||
else:
|
||||
rootdirs.append(root)
|
||||
root = os.path.dirname(root) # up a level
|
||||
rootdirs.append(root)
|
||||
root = os.path.dirname(root) # up a level
|
||||
|
||||
if verbose:
|
||||
print(
|
||||
|
@ -139,41 +165,48 @@ def versions_from_parentdir(parentdir_prefix, root, verbose):
|
|||
|
||||
|
||||
@register_vcs_handler("git", "get_keywords")
|
||||
def git_get_keywords(versionfile_abs):
|
||||
def git_get_keywords(versionfile_abs: str) -> Dict[str, str]:
|
||||
"""Extract version information from the given file."""
|
||||
# the code embedded in _version.py can just fetch the value of these
|
||||
# keywords. When used from setup.py, we don't want to import _version.py,
|
||||
# so we do it with a regexp instead. This function is not used from
|
||||
# _version.py.
|
||||
keywords = {}
|
||||
keywords: Dict[str, str] = {}
|
||||
try:
|
||||
f = open(versionfile_abs, "r")
|
||||
for line in f.readlines():
|
||||
if line.strip().startswith("git_refnames ="):
|
||||
mo = re.search(r'=\s*"(.*)"', line)
|
||||
if mo:
|
||||
keywords["refnames"] = mo.group(1)
|
||||
if line.strip().startswith("git_full ="):
|
||||
mo = re.search(r'=\s*"(.*)"', line)
|
||||
if mo:
|
||||
keywords["full"] = mo.group(1)
|
||||
if line.strip().startswith("git_date ="):
|
||||
mo = re.search(r'=\s*"(.*)"', line)
|
||||
if mo:
|
||||
keywords["date"] = mo.group(1)
|
||||
f.close()
|
||||
except EnvironmentError:
|
||||
with open(versionfile_abs) as fobj:
|
||||
for line in fobj:
|
||||
if line.strip().startswith("git_refnames ="):
|
||||
mo = re.search(r'=\s*"(.*)"', line)
|
||||
if mo:
|
||||
keywords["refnames"] = mo.group(1)
|
||||
if line.strip().startswith("git_full ="):
|
||||
mo = re.search(r'=\s*"(.*)"', line)
|
||||
if mo:
|
||||
keywords["full"] = mo.group(1)
|
||||
if line.strip().startswith("git_date ="):
|
||||
mo = re.search(r'=\s*"(.*)"', line)
|
||||
if mo:
|
||||
keywords["date"] = mo.group(1)
|
||||
except OSError:
|
||||
pass
|
||||
return keywords
|
||||
|
||||
|
||||
@register_vcs_handler("git", "keywords")
|
||||
def git_versions_from_keywords(keywords, tag_prefix, verbose):
|
||||
def git_versions_from_keywords(
|
||||
keywords: Dict[str, str],
|
||||
tag_prefix: str,
|
||||
verbose: bool,
|
||||
) -> Dict[str, Any]:
|
||||
"""Get version information from git keywords."""
|
||||
if not keywords:
|
||||
raise NotThisMethod("no keywords at all, weird")
|
||||
if "refnames" not in keywords:
|
||||
raise NotThisMethod("Short version file found")
|
||||
date = keywords.get("date")
|
||||
if date is not None:
|
||||
# Use only the last line. Previous lines may contain GPG signature
|
||||
# information.
|
||||
date = date.splitlines()[-1]
|
||||
|
||||
# git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant
|
||||
# datestamp. However we prefer "%ci" (which expands to an "ISO-8601
|
||||
# -like" string, which we must then edit to make compliant), because
|
||||
|
@ -186,11 +219,11 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose):
|
|||
if verbose:
|
||||
print("keywords are unexpanded, not using")
|
||||
raise NotThisMethod("unexpanded keywords, not a git-archive tarball")
|
||||
refs = set([r.strip() for r in refnames.strip("()").split(",")])
|
||||
refs = {r.strip() for r in refnames.strip("()").split(",")}
|
||||
# starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
|
||||
# just "foo-1.0". If we see a "tag: " prefix, prefer those.
|
||||
TAG = "tag: "
|
||||
tags = set([r[len(TAG) :] for r in refs if r.startswith(TAG)])
|
||||
tags = {r[len(TAG) :] for r in refs if r.startswith(TAG)}
|
||||
if not tags:
|
||||
# Either we're using git < 1.8.3, or there really are no tags. We use
|
||||
# a heuristic: assume all version tags have a digit. The old git %d
|
||||
|
@ -199,7 +232,7 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose):
|
|||
# between branches and tags. By ignoring refnames without digits, we
|
||||
# filter out many common branch names like "release" and
|
||||
# "stabilization", as well as "HEAD" and "master".
|
||||
tags = set([r for r in refs if re.search(r"\d", r)])
|
||||
tags = {r for r in refs if re.search(r"\d", r)}
|
||||
if verbose:
|
||||
print("discarding '%s', no digits" % ",".join(refs - tags))
|
||||
if verbose:
|
||||
|
@ -208,6 +241,11 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose):
|
|||
# sorting will prefer e.g. "2.0" over "2.0rc1"
|
||||
if ref.startswith(tag_prefix):
|
||||
r = ref[len(tag_prefix) :]
|
||||
# Filter out refs that exactly match prefix or that don't start
|
||||
# with a number once the prefix is stripped (mostly a concern
|
||||
# when prefix is '')
|
||||
if not re.match(r"\d", r):
|
||||
continue
|
||||
if verbose:
|
||||
print("picking %s" % r)
|
||||
return {
|
||||
|
@ -230,7 +268,9 @@ def git_versions_from_keywords(keywords, tag_prefix, verbose):
|
|||
|
||||
|
||||
@register_vcs_handler("git", "pieces_from_vcs")
|
||||
def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
|
||||
def git_pieces_from_vcs(
|
||||
tag_prefix: str, root: str, verbose: bool, runner: Callable = run_command
|
||||
) -> Dict[str, Any]:
|
||||
"""Get version from 'git describe' in the root of the source tree.
|
||||
|
||||
This only gets called if the git-archive 'subst' keywords were *not*
|
||||
|
@ -241,7 +281,14 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
|
|||
if sys.platform == "win32":
|
||||
GITS = ["git.cmd", "git.exe"]
|
||||
|
||||
out, rc = run_command(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=True)
|
||||
# GIT_DIR can interfere with correct operation of Versioneer.
|
||||
# It may be intended to be passed to the Versioneer-versioned project,
|
||||
# but that should not change where we get our version from.
|
||||
env = os.environ.copy()
|
||||
env.pop("GIT_DIR", None)
|
||||
runner = functools.partial(runner, env=env)
|
||||
|
||||
_, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=not verbose)
|
||||
if rc != 0:
|
||||
if verbose:
|
||||
print("Directory %s not under git control" % root)
|
||||
|
@ -249,7 +296,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
|
|||
|
||||
# if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty]
|
||||
# if there isn't one, this yields HEX[-dirty] (no NUM)
|
||||
describe_out, rc = run_command(
|
||||
describe_out, rc = runner(
|
||||
GITS,
|
||||
[
|
||||
"describe",
|
||||
|
@ -258,7 +305,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
|
|||
"--always",
|
||||
"--long",
|
||||
"--match",
|
||||
"%s*" % tag_prefix,
|
||||
f"{tag_prefix}[[:digit:]]*",
|
||||
],
|
||||
cwd=root,
|
||||
)
|
||||
|
@ -266,16 +313,48 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
|
|||
if describe_out is None:
|
||||
raise NotThisMethod("'git describe' failed")
|
||||
describe_out = describe_out.strip()
|
||||
full_out, rc = run_command(GITS, ["rev-parse", "HEAD"], cwd=root)
|
||||
full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root)
|
||||
if full_out is None:
|
||||
raise NotThisMethod("'git rev-parse' failed")
|
||||
full_out = full_out.strip()
|
||||
|
||||
pieces = {}
|
||||
pieces: Dict[str, Any] = {}
|
||||
pieces["long"] = full_out
|
||||
pieces["short"] = full_out[:7] # maybe improved later
|
||||
pieces["error"] = None
|
||||
|
||||
branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], cwd=root)
|
||||
# --abbrev-ref was added in git-1.6.3
|
||||
if rc != 0 or branch_name is None:
|
||||
raise NotThisMethod("'git rev-parse --abbrev-ref' returned error")
|
||||
branch_name = branch_name.strip()
|
||||
|
||||
if branch_name == "HEAD":
|
||||
# If we aren't exactly on a branch, pick a branch which represents
|
||||
# the current commit. If all else fails, we are on a branchless
|
||||
# commit.
|
||||
branches, rc = runner(GITS, ["branch", "--contains"], cwd=root)
|
||||
# --contains was added in git-1.5.4
|
||||
if rc != 0 or branches is None:
|
||||
raise NotThisMethod("'git branch --contains' returned error")
|
||||
branches = branches.split("\n")
|
||||
|
||||
# Remove the first line if we're running detached
|
||||
if "(" in branches[0]:
|
||||
branches.pop(0)
|
||||
|
||||
# Strip off the leading "* " from the list of branches.
|
||||
branches = [branch[2:] for branch in branches]
|
||||
if "master" in branches:
|
||||
branch_name = "master"
|
||||
elif not branches:
|
||||
branch_name = None
|
||||
else:
|
||||
# Pick the first branch that is returned. Good or bad.
|
||||
branch_name = branches[0]
|
||||
|
||||
pieces["branch"] = branch_name
|
||||
|
||||
# parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty]
|
||||
# TAG might have hyphens.
|
||||
git_describe = describe_out
|
||||
|
@ -292,7 +371,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
|
|||
# TAG-NUM-gHEX
|
||||
mo = re.search(r"^(.+)-(\d+)-g([0-9a-f]+)$", git_describe)
|
||||
if not mo:
|
||||
# unparseable. Maybe git-describe is misbehaving?
|
||||
# unparsable. Maybe git-describe is misbehaving?
|
||||
pieces["error"] = "unable to parse git-describe output: '%s'" % describe_out
|
||||
return pieces
|
||||
|
||||
|
@ -302,7 +381,7 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
|
|||
if verbose:
|
||||
fmt = "tag '%s' doesn't start with prefix '%s'"
|
||||
print(fmt % (full_tag, tag_prefix))
|
||||
pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % (
|
||||
pieces["error"] = "tag '{}' doesn't start with prefix '{}'".format(
|
||||
full_tag,
|
||||
tag_prefix,
|
||||
)
|
||||
|
@ -318,26 +397,27 @@ def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
|
|||
else:
|
||||
# HEX: no tags
|
||||
pieces["closest-tag"] = None
|
||||
count_out, rc = run_command(GITS, ["rev-list", "HEAD", "--count"], cwd=root)
|
||||
pieces["distance"] = int(count_out) # total number of commits
|
||||
out, rc = runner(GITS, ["rev-list", "HEAD", "--left-right"], cwd=root)
|
||||
pieces["distance"] = len(out.split()) # total number of commits
|
||||
|
||||
# commit date: see ISO-8601 comment in git_versions_from_keywords()
|
||||
date = run_command(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[
|
||||
0
|
||||
].strip()
|
||||
date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip()
|
||||
# Use only the last line. Previous lines may contain GPG signature
|
||||
# information.
|
||||
date = date.splitlines()[-1]
|
||||
pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1)
|
||||
|
||||
return pieces
|
||||
|
||||
|
||||
def plus_or_dot(pieces):
|
||||
def plus_or_dot(pieces: Dict[str, Any]) -> str:
|
||||
"""Return a + if we don't already have one, else return a ."""
|
||||
if "+" in pieces.get("closest-tag", ""):
|
||||
return "."
|
||||
return "+"
|
||||
|
||||
|
||||
def render_pep440(pieces):
|
||||
def render_pep440(pieces: Dict[str, Any]) -> str:
|
||||
"""Build up version string, with post-release "local version identifier".
|
||||
|
||||
Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you
|
||||
|
@ -361,23 +441,70 @@ def render_pep440(pieces):
|
|||
return rendered
|
||||
|
||||
|
||||
def render_pep440_pre(pieces):
|
||||
"""TAG[.post.devDISTANCE] -- No -dirty.
|
||||
def render_pep440_branch(pieces: Dict[str, Any]) -> str:
|
||||
"""TAG[[.dev0]+DISTANCE.gHEX[.dirty]] .
|
||||
|
||||
The ".dev0" means not master branch. Note that .dev0 sorts backwards
|
||||
(a feature branch will appear "older" than the master branch).
|
||||
|
||||
Exceptions:
|
||||
1: no tags. 0.post.devDISTANCE
|
||||
1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty]
|
||||
"""
|
||||
if pieces["closest-tag"]:
|
||||
rendered = pieces["closest-tag"]
|
||||
if pieces["distance"]:
|
||||
rendered += ".post.dev%d" % pieces["distance"]
|
||||
if pieces["distance"] or pieces["dirty"]:
|
||||
if pieces["branch"] != "master":
|
||||
rendered += ".dev0"
|
||||
rendered += plus_or_dot(pieces)
|
||||
rendered += "%d.g%s" % (pieces["distance"], pieces["short"])
|
||||
if pieces["dirty"]:
|
||||
rendered += ".dirty"
|
||||
else:
|
||||
# exception #1
|
||||
rendered = "0.post.dev%d" % pieces["distance"]
|
||||
rendered = "0"
|
||||
if pieces["branch"] != "master":
|
||||
rendered += ".dev0"
|
||||
rendered += "+untagged.%d.g%s" % (pieces["distance"], pieces["short"])
|
||||
if pieces["dirty"]:
|
||||
rendered += ".dirty"
|
||||
return rendered
|
||||
|
||||
|
||||
def render_pep440_post(pieces):
|
||||
def pep440_split_post(ver: str) -> Tuple[str, Optional[int]]:
|
||||
"""Split pep440 version string at the post-release segment.
|
||||
|
||||
Returns the release segments before the post-release and the
|
||||
post-release version number (or -1 if no post-release segment is present).
|
||||
"""
|
||||
vc = str.split(ver, ".post")
|
||||
return vc[0], int(vc[1] or 0) if len(vc) == 2 else None
|
||||
|
||||
|
||||
def render_pep440_pre(pieces: Dict[str, Any]) -> str:
|
||||
"""TAG[.postN.devDISTANCE] -- No -dirty.
|
||||
|
||||
Exceptions:
|
||||
1: no tags. 0.post0.devDISTANCE
|
||||
"""
|
||||
if pieces["closest-tag"]:
|
||||
if pieces["distance"]:
|
||||
# update the post release segment
|
||||
tag_version, post_version = pep440_split_post(pieces["closest-tag"])
|
||||
rendered = tag_version
|
||||
if post_version is not None:
|
||||
rendered += ".post%d.dev%d" % (post_version + 1, pieces["distance"])
|
||||
else:
|
||||
rendered += ".post0.dev%d" % (pieces["distance"])
|
||||
else:
|
||||
# no commits, use the tag as the version
|
||||
rendered = pieces["closest-tag"]
|
||||
else:
|
||||
# exception #1
|
||||
rendered = "0.post0.dev%d" % pieces["distance"]
|
||||
return rendered
|
||||
|
||||
|
||||
def render_pep440_post(pieces: Dict[str, Any]) -> str:
|
||||
"""TAG[.postDISTANCE[.dev0]+gHEX] .
|
||||
|
||||
The ".dev0" means dirty. Note that .dev0 sorts backwards
|
||||
|
@ -404,12 +531,41 @@ def render_pep440_post(pieces):
|
|||
return rendered
|
||||
|
||||
|
||||
def render_pep440_old(pieces):
|
||||
def render_pep440_post_branch(pieces: Dict[str, Any]) -> str:
|
||||
"""TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] .
|
||||
|
||||
The ".dev0" means not master branch.
|
||||
|
||||
Exceptions:
|
||||
1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty]
|
||||
"""
|
||||
if pieces["closest-tag"]:
|
||||
rendered = pieces["closest-tag"]
|
||||
if pieces["distance"] or pieces["dirty"]:
|
||||
rendered += ".post%d" % pieces["distance"]
|
||||
if pieces["branch"] != "master":
|
||||
rendered += ".dev0"
|
||||
rendered += plus_or_dot(pieces)
|
||||
rendered += "g%s" % pieces["short"]
|
||||
if pieces["dirty"]:
|
||||
rendered += ".dirty"
|
||||
else:
|
||||
# exception #1
|
||||
rendered = "0.post%d" % pieces["distance"]
|
||||
if pieces["branch"] != "master":
|
||||
rendered += ".dev0"
|
||||
rendered += "+g%s" % pieces["short"]
|
||||
if pieces["dirty"]:
|
||||
rendered += ".dirty"
|
||||
return rendered
|
||||
|
||||
|
||||
def render_pep440_old(pieces: Dict[str, Any]) -> str:
|
||||
"""TAG[.postDISTANCE[.dev0]] .
|
||||
|
||||
The ".dev0" means dirty.
|
||||
|
||||
Eexceptions:
|
||||
Exceptions:
|
||||
1: no tags. 0.postDISTANCE[.dev0]
|
||||
"""
|
||||
if pieces["closest-tag"]:
|
||||
|
@ -426,7 +582,7 @@ def render_pep440_old(pieces):
|
|||
return rendered
|
||||
|
||||
|
||||
def render_git_describe(pieces):
|
||||
def render_git_describe(pieces: Dict[str, Any]) -> str:
|
||||
"""TAG[-DISTANCE-gHEX][-dirty].
|
||||
|
||||
Like 'git describe --tags --dirty --always'.
|
||||
|
@ -446,7 +602,7 @@ def render_git_describe(pieces):
|
|||
return rendered
|
||||
|
||||
|
||||
def render_git_describe_long(pieces):
|
||||
def render_git_describe_long(pieces: Dict[str, Any]) -> str:
|
||||
"""TAG-DISTANCE-gHEX[-dirty].
|
||||
|
||||
Like 'git describe --tags --dirty --always -long'.
|
||||
|
@ -466,7 +622,7 @@ def render_git_describe_long(pieces):
|
|||
return rendered
|
||||
|
||||
|
||||
def render(pieces, style):
|
||||
def render(pieces: Dict[str, Any], style: str) -> Dict[str, Any]:
|
||||
"""Render the given version pieces into the requested style."""
|
||||
if pieces["error"]:
|
||||
return {
|
||||
|
@ -482,10 +638,14 @@ def render(pieces, style):
|
|||
|
||||
if style == "pep440":
|
||||
rendered = render_pep440(pieces)
|
||||
elif style == "pep440-branch":
|
||||
rendered = render_pep440_branch(pieces)
|
||||
elif style == "pep440-pre":
|
||||
rendered = render_pep440_pre(pieces)
|
||||
elif style == "pep440-post":
|
||||
rendered = render_pep440_post(pieces)
|
||||
elif style == "pep440-post-branch":
|
||||
rendered = render_pep440_post_branch(pieces)
|
||||
elif style == "pep440-old":
|
||||
rendered = render_pep440_old(pieces)
|
||||
elif style == "git-describe":
|
||||
|
@ -504,7 +664,7 @@ def render(pieces, style):
|
|||
}
|
||||
|
||||
|
||||
def get_versions():
|
||||
def get_versions() -> Dict[str, Any]:
|
||||
"""Get version information or return default if unable to do so."""
|
||||
# I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have
|
||||
# __file__, we can work backwards from there to the root. Some
|
||||
|
@ -524,7 +684,7 @@ def get_versions():
|
|||
# versionfile_source is the relative path from the top of the source
|
||||
# tree (where the .git directory might live) to this file. Invert
|
||||
# this to find the root from __file__.
|
||||
for i in cfg.versionfile_source.split("/"):
|
||||
for _ in cfg.versionfile_source.split("/"):
|
||||
root = os.path.dirname(root)
|
||||
except NameError:
|
||||
return {
|
||||
|
|
|
@ -7,26 +7,25 @@ Usage:
|
|||
|
||||
python -m repo2docker https://github.com/you/your-repo
|
||||
"""
|
||||
|
||||
import getpass
|
||||
import json
|
||||
import sys
|
||||
import logging
|
||||
import os
|
||||
import getpass
|
||||
import shutil
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
|
||||
import docker
|
||||
import warnings
|
||||
from urllib.parse import urlparse
|
||||
from docker.utils import kwargs_from_env
|
||||
from docker.errors import DockerException
|
||||
|
||||
import entrypoints
|
||||
import escapism
|
||||
from pythonjsonlogger import jsonlogger
|
||||
|
||||
from traitlets import Any, Dict, Int, List, Unicode, Bool, default
|
||||
from traitlets import Any, Bool, Dict, Int, List, Unicode, default, observe
|
||||
from traitlets.config import Application
|
||||
|
||||
from . import __version__
|
||||
from . import __version__, contentproviders
|
||||
from .buildpacks import (
|
||||
CondaBuildPack,
|
||||
DockerBuildPack,
|
||||
|
@ -38,8 +37,8 @@ from .buildpacks import (
|
|||
PythonBuildPack,
|
||||
RBuildPack,
|
||||
)
|
||||
from . import contentproviders
|
||||
from .utils import ByteSpecification, chdir
|
||||
from .engine import BuildError, ContainerEngineException, ImageLoadError
|
||||
from .utils import ByteSpecification, R2dState, chdir, get_platform
|
||||
|
||||
|
||||
class Repo2Docker(Application):
|
||||
|
@ -48,6 +47,10 @@ class Repo2Docker(Application):
|
|||
name = "jupyter-repo2docker"
|
||||
version = __version__
|
||||
description = __doc__
|
||||
# disable aliases/flags because we don't use the traitlets for CLI parsing
|
||||
# other than --Class.trait=value
|
||||
aliases = {}
|
||||
flags = {}
|
||||
|
||||
@default("log_level")
|
||||
def _default_log_level(self):
|
||||
|
@ -238,6 +241,47 @@ class Repo2Docker(Application):
|
|||
""",
|
||||
)
|
||||
|
||||
labels = Dict(
|
||||
{},
|
||||
help="""
|
||||
Extra labels to set on the final image.
|
||||
|
||||
Each Label is a key-value pair, with the key being the name of the label
|
||||
and the value its value.
|
||||
""",
|
||||
config=True,
|
||||
)
|
||||
|
||||
platform = Unicode(
|
||||
config=True,
|
||||
help="""
|
||||
Platform to build for, linux/amd64 (recommended) or linux/arm64 (experimental).
|
||||
""",
|
||||
)
|
||||
|
||||
@default("platform")
|
||||
def _platform_default(self):
|
||||
"""
|
||||
Default platform
|
||||
"""
|
||||
p = get_platform()
|
||||
if p == "linux/arm64":
|
||||
warnings.warn(
|
||||
"Building for linux/arm64 is experimental. "
|
||||
"To use the recommended platform set --Repo2Docker.platform=linux/amd64. "
|
||||
"To silence this warning set --Repo2Docker.platform=linux/arm64."
|
||||
)
|
||||
return p
|
||||
|
||||
extra_build_args = Dict(
|
||||
{},
|
||||
help="""
|
||||
Extra build args to pass to the image build process.
|
||||
This is pretty much only useful for custom Dockerfile based builds.
|
||||
""",
|
||||
config=True,
|
||||
)
|
||||
|
||||
json_logs = Bool(
|
||||
False,
|
||||
help="""
|
||||
|
@ -283,7 +327,7 @@ class Repo2Docker(Application):
|
|||
)
|
||||
|
||||
cleanup_checkout = Bool(
|
||||
False,
|
||||
True,
|
||||
help="""
|
||||
Delete source repository after building is done.
|
||||
|
||||
|
@ -292,6 +336,12 @@ class Repo2Docker(Application):
|
|||
config=True,
|
||||
)
|
||||
|
||||
@default("cleanup_checkout")
|
||||
def _defaut_cleanup_checkout(self):
|
||||
# if the source exists locally we don't want to delete it at the end
|
||||
# FIXME: Find a better way to figure out if repo is 'local'. Push this into ContentProvider?
|
||||
return not os.path.exists(self.repo)
|
||||
|
||||
output_image_spec = Unicode(
|
||||
"",
|
||||
help="""
|
||||
|
@ -311,7 +361,7 @@ class Repo2Docker(Application):
|
|||
)
|
||||
|
||||
run = Bool(
|
||||
False,
|
||||
True,
|
||||
help="""
|
||||
Run docker image after building
|
||||
""",
|
||||
|
@ -328,6 +378,12 @@ class Repo2Docker(Application):
|
|||
config=True,
|
||||
)
|
||||
|
||||
@observe("dry_run")
|
||||
def _dry_run_changed(self, change):
|
||||
if change.new:
|
||||
# dry_run forces run and push to be False
|
||||
self.push = self.run = False
|
||||
|
||||
# FIXME: Refactor classes to separate build & run steps
|
||||
run_cmd = List(
|
||||
[],
|
||||
|
@ -382,6 +438,46 @@ class Repo2Docker(Application):
|
|||
config=True,
|
||||
)
|
||||
|
||||
engine = Unicode(
|
||||
"docker",
|
||||
config=True,
|
||||
help="""
|
||||
Name of the container engine.
|
||||
|
||||
Defaults to 'docker'.
|
||||
""",
|
||||
)
|
||||
|
||||
base_image = Unicode(
|
||||
"docker.io/library/buildpack-deps:jammy",
|
||||
config=True,
|
||||
help="""
|
||||
Base image to use when building docker images.
|
||||
|
||||
Only images that match the following criteria are supported:
|
||||
- Ubuntu based distributions, minimum 18.04
|
||||
- Contains set of base packages installed with the buildpack-deps
|
||||
image family: https://hub.docker.com/_/buildpack-deps
|
||||
|
||||
Other images *may* work, but are not officially supported.
|
||||
""",
|
||||
)
|
||||
|
||||
def get_engine(self):
|
||||
"""Return an instance of the container engine.
|
||||
|
||||
Currently no arguments are passed to the engine constructor.
|
||||
"""
|
||||
engines = entrypoints.get_group_named("repo2docker.engines")
|
||||
try:
|
||||
entry = engines[self.engine]
|
||||
except KeyError:
|
||||
raise ContainerEngineException(
|
||||
f"Container engine '{self.engine}' not found. Available engines: {','.join(engines.keys())}"
|
||||
)
|
||||
engine_class = entry.load()
|
||||
return engine_class(parent=self)
|
||||
|
||||
def fetch(self, url, ref, checkout_path):
|
||||
"""Fetch the contents of `url` and place it in `checkout_path`.
|
||||
|
||||
|
@ -397,16 +493,11 @@ class Repo2Docker(Application):
|
|||
spec = cp.detect(url, ref=ref)
|
||||
if spec is not None:
|
||||
picked_content_provider = cp
|
||||
self.log.info(
|
||||
"Picked {cp} content "
|
||||
"provider.\n".format(cp=cp.__class__.__name__)
|
||||
)
|
||||
self.log.info(f"Picked {cp.__class__.__name__} content provider.\n")
|
||||
break
|
||||
|
||||
if picked_content_provider is None:
|
||||
self.log.error(
|
||||
"No matching content provider found for " "{url}.".format(url=url)
|
||||
)
|
||||
self.log.error(f"No matching content provider found for {url}.")
|
||||
|
||||
swh_token = self.config.get("swh_token", self.swh_token)
|
||||
if swh_token and isinstance(picked_content_provider, contentproviders.Swhid):
|
||||
|
@ -415,7 +506,7 @@ class Repo2Docker(Application):
|
|||
for log_line in picked_content_provider.fetch(
|
||||
spec, checkout_path, yield_output=self.json_logs
|
||||
):
|
||||
self.log.info(log_line, extra=dict(phase="fetching"))
|
||||
self.log.info(log_line, extra=dict(phase=R2dState.FETCHING))
|
||||
|
||||
if not self.output_image_spec:
|
||||
image_spec = "r2d" + self.repo
|
||||
|
@ -438,26 +529,25 @@ class Repo2Docker(Application):
|
|||
Avoids non-JSON output on errors when using --json-logs
|
||||
"""
|
||||
self.log.error(
|
||||
"Error during build: %s",
|
||||
evalue,
|
||||
f"Error during build: {evalue}",
|
||||
exc_info=(etype, evalue, traceback),
|
||||
extra=dict(phase="failed"),
|
||||
extra=dict(phase=R2dState.FAILED),
|
||||
)
|
||||
|
||||
def initialize(self):
|
||||
def initialize(self, *args, **kwargs):
|
||||
"""Init repo2docker configuration before start"""
|
||||
# FIXME: Remove this function, move it to setters / traitlet reactors
|
||||
self.log = logging.getLogger("repo2docker")
|
||||
self.log.setLevel(self.log_level)
|
||||
logHandler = logging.StreamHandler()
|
||||
self.log.handlers = []
|
||||
self.log.addHandler(logHandler)
|
||||
if self.json_logs:
|
||||
# register JSON excepthook to avoid non-JSON output on errors
|
||||
sys.excepthook = self.json_excepthook
|
||||
# Need to reset existing handlers, or we repeat messages
|
||||
logHandler = logging.StreamHandler()
|
||||
formatter = jsonlogger.JsonFormatter()
|
||||
logHandler.setFormatter(formatter)
|
||||
self.log = logging.getLogger("repo2docker")
|
||||
self.log.handlers = []
|
||||
self.log.addHandler(logHandler)
|
||||
self.log.setLevel(self.log_level)
|
||||
else:
|
||||
# due to json logger stuff above,
|
||||
# our log messages include carriage returns, newlines, etc.
|
||||
|
@ -474,13 +564,18 @@ class Repo2Docker(Application):
|
|||
|
||||
def push_image(self):
|
||||
"""Push docker image to registry"""
|
||||
client = docker.APIClient(version="auto", **kwargs_from_env())
|
||||
client = self.get_engine()
|
||||
# Build a progress setup for each layer, and only emit per-layer
|
||||
# info every 1.5s
|
||||
progress_layers = {}
|
||||
layers = {}
|
||||
last_emit_time = time.time()
|
||||
for chunk in client.push(self.output_image_spec, stream=True):
|
||||
for chunk in client.push(self.output_image_spec):
|
||||
if client.string_output:
|
||||
self.log.info(chunk, extra=dict(phase=R2dState.PUSHING))
|
||||
continue
|
||||
# else this is Docker output
|
||||
|
||||
# each chunk can be one or more lines of json events
|
||||
# split lines here in case multiple are delivered at once
|
||||
for line in chunk.splitlines():
|
||||
|
@ -491,8 +586,8 @@ class Repo2Docker(Application):
|
|||
self.log.warning("Not a JSON progress line: %r", line)
|
||||
continue
|
||||
if "error" in progress:
|
||||
self.log.error(progress["error"], extra=dict(phase="failed"))
|
||||
raise docker.errors.ImageLoadError(progress["error"])
|
||||
self.log.error(progress["error"], extra=dict(phase=R2dState.FAILED))
|
||||
raise ImageLoadError(progress["error"])
|
||||
if "id" not in progress:
|
||||
continue
|
||||
# deprecated truncated-progress data
|
||||
|
@ -506,13 +601,15 @@ class Repo2Docker(Application):
|
|||
self.log.info(
|
||||
"Pushing image\n",
|
||||
extra=dict(
|
||||
progress=progress_layers, layers=layers, phase="pushing"
|
||||
progress=progress_layers,
|
||||
layers=layers,
|
||||
phase=R2dState.PUSHING,
|
||||
),
|
||||
)
|
||||
last_emit_time = time.time()
|
||||
self.log.info(
|
||||
"Successfully pushed {}".format(self.output_image_spec),
|
||||
extra=dict(phase="pushing"),
|
||||
f"Successfully pushed {self.output_image_spec}",
|
||||
extra=dict(phase=R2dState.PUSHING),
|
||||
)
|
||||
|
||||
def run_image(self):
|
||||
|
@ -528,7 +625,7 @@ class Repo2Docker(Application):
|
|||
|
||||
Returns running container
|
||||
"""
|
||||
client = docker.from_env(version="auto")
|
||||
client = self.get_engine()
|
||||
|
||||
docker_host = os.environ.get("DOCKER_HOST")
|
||||
if docker_host:
|
||||
|
@ -538,38 +635,43 @@ class Repo2Docker(Application):
|
|||
self.hostname = host_name
|
||||
|
||||
if not self.run_cmd:
|
||||
port = str(self._get_free_port())
|
||||
self.port = port
|
||||
if len(self.ports) == 1:
|
||||
# single port mapping specified
|
||||
# retrieve container and host port from dict
|
||||
# {'8888/tcp': ('hostname', 'port')}
|
||||
# or
|
||||
# {'8888/tcp': 'port'}
|
||||
container_port_proto, host_port = next(iter(self.ports.items()))
|
||||
if isinstance(host_port, tuple):
|
||||
# (hostname, port) tuple or string port
|
||||
host_name, host_port = host_port
|
||||
self.hostname = host_name
|
||||
host_port = int(host_port)
|
||||
container_port = int(container_port_proto.split("/", 1)[0])
|
||||
else:
|
||||
# no port specified, pick a random one
|
||||
container_port = host_port = str(self._get_free_port())
|
||||
self.ports = {f"{container_port}/tcp": host_port}
|
||||
self.port = host_port
|
||||
# To use the option --NotebookApp.custom_display_url
|
||||
# make sure the base-notebook image is updated:
|
||||
# docker pull jupyter/base-notebook
|
||||
run_cmd = [
|
||||
"jupyter",
|
||||
"notebook",
|
||||
"--ip",
|
||||
"0.0.0.0",
|
||||
"--port",
|
||||
port,
|
||||
"--NotebookApp.custom_display_url=http://{}:{}".format(host_name, port),
|
||||
"--ip=0.0.0.0",
|
||||
f"--port={container_port}",
|
||||
f"--NotebookApp.custom_display_url=http://{host_name}:{host_port}",
|
||||
"--NotebookApp.default_url=/lab",
|
||||
]
|
||||
ports = {"%s/tcp" % port: port}
|
||||
else:
|
||||
# run_cmd given by user, if port is also given then pass it on
|
||||
run_cmd = self.run_cmd
|
||||
if self.ports:
|
||||
ports = self.ports
|
||||
else:
|
||||
ports = {}
|
||||
# store ports on self so they can be retrieved in tests
|
||||
self.ports = ports
|
||||
|
||||
container_volumes = {}
|
||||
if self.volumes:
|
||||
api_client = docker.APIClient(
|
||||
version="auto", **docker.utils.kwargs_from_env()
|
||||
)
|
||||
image = api_client.inspect_image(self.output_image_spec)
|
||||
image_workdir = image["ContainerConfig"]["WorkingDir"]
|
||||
image = client.inspect_image(self.output_image_spec)
|
||||
image_workdir = image.config["WorkingDir"]
|
||||
|
||||
for k, v in self.volumes.items():
|
||||
container_volumes[os.path.abspath(k)] = {
|
||||
|
@ -579,8 +681,7 @@ class Repo2Docker(Application):
|
|||
|
||||
run_kwargs = dict(
|
||||
publish_all_ports=self.all_ports,
|
||||
ports=ports,
|
||||
detach=True,
|
||||
ports=self.ports,
|
||||
command=run_cmd,
|
||||
volumes=container_volumes,
|
||||
environment=self.environment,
|
||||
|
@ -588,7 +689,7 @@ class Repo2Docker(Application):
|
|||
|
||||
run_kwargs.update(self.extra_run_kwargs)
|
||||
|
||||
container = client.containers.run(self.output_image_spec, **run_kwargs)
|
||||
container = client.run(self.output_image_spec, **run_kwargs)
|
||||
|
||||
while container.status == "created":
|
||||
time.sleep(0.5)
|
||||
|
@ -602,26 +703,32 @@ class Repo2Docker(Application):
|
|||
Displaying logs while it's running
|
||||
"""
|
||||
|
||||
last_timestamp = None
|
||||
try:
|
||||
for line in container.logs(stream=True):
|
||||
self.log.info(line.decode("utf-8"), extra=dict(phase="running"))
|
||||
for line in container.logs(stream=True, timestamps=True):
|
||||
line = line.decode("utf-8")
|
||||
last_timestamp, line = line.split(" ", maxsplit=1)
|
||||
self.log.info(line, extra=dict(phase=R2dState.RUNNING))
|
||||
|
||||
finally:
|
||||
container.reload()
|
||||
if container.status == "running":
|
||||
self.log.info("Stopping container...\n", extra=dict(phase="running"))
|
||||
self.log.info(
|
||||
"Stopping container...\n", extra=dict(phase=R2dState.RUNNING)
|
||||
)
|
||||
container.kill()
|
||||
exit_code = container.attrs["State"]["ExitCode"]
|
||||
exit_code = container.exitcode
|
||||
|
||||
container.wait()
|
||||
|
||||
self.log.info(
|
||||
"Container finished running.\n".upper(), extra=dict(phase="running")
|
||||
"Container finished running.\n".upper(),
|
||||
extra=dict(phase=R2dState.RUNNING),
|
||||
)
|
||||
# are there more logs? Let's send them back too
|
||||
late_logs = container.logs().decode("utf-8")
|
||||
late_logs = container.logs(since=last_timestamp).decode("utf-8")
|
||||
for line in late_logs.split("\n"):
|
||||
self.log.info(line + "\n", extra=dict(phase="running"))
|
||||
self.log.debug(line + "\n", extra=dict(phase=R2dState.RUNNING))
|
||||
|
||||
container.remove()
|
||||
if exit_code:
|
||||
|
@ -645,12 +752,11 @@ class Repo2Docker(Application):
|
|||
if self.dry_run:
|
||||
return False
|
||||
# check if we already have an image for this content
|
||||
client = docker.APIClient(version="auto", **kwargs_from_env())
|
||||
client = self.get_engine()
|
||||
for image in client.images():
|
||||
if image["RepoTags"] is not None:
|
||||
for tag in image["RepoTags"]:
|
||||
if tag == self.output_image_spec + ":latest":
|
||||
return True
|
||||
for tag in image.tags:
|
||||
if tag == self.output_image_spec + ":latest":
|
||||
return True
|
||||
return False
|
||||
|
||||
def build(self):
|
||||
|
@ -660,12 +766,9 @@ class Repo2Docker(Application):
|
|||
# Check if r2d can connect to docker daemon
|
||||
if not self.dry_run:
|
||||
try:
|
||||
docker_client = docker.APIClient(version="auto", **kwargs_from_env())
|
||||
except DockerException as e:
|
||||
self.log.error(
|
||||
"\nDocker client initialization error: %s.\nCheck if docker is running on the host.\n",
|
||||
e,
|
||||
)
|
||||
docker_client = self.get_engine()
|
||||
except ContainerEngineException as e:
|
||||
self.log.error(f"\nContainer engine initialization error: {e}\n")
|
||||
self.exit(1)
|
||||
|
||||
# If the source to be executed is a directory, continue using the
|
||||
|
@ -674,6 +777,8 @@ class Repo2Docker(Application):
|
|||
# making a copy of it as it might contain large files that would be
|
||||
# expensive to copy.
|
||||
if os.path.isdir(self.repo):
|
||||
# never cleanup when we are working in a local repo
|
||||
self.cleanup_checkout = False
|
||||
checkout_path = self.repo
|
||||
else:
|
||||
if self.git_workdir is None:
|
||||
|
@ -686,8 +791,7 @@ class Repo2Docker(Application):
|
|||
|
||||
if self.find_image():
|
||||
self.log.info(
|
||||
"Reusing existing image ({}), not "
|
||||
"building.".format(self.output_image_spec)
|
||||
f"Reusing existing image ({self.output_image_spec}), not building."
|
||||
)
|
||||
# no need to build, so skip to the end by `return`ing here
|
||||
# this will still execute the finally clause and let's us
|
||||
|
@ -698,21 +802,23 @@ class Repo2Docker(Application):
|
|||
checkout_path = os.path.join(checkout_path, self.subdir)
|
||||
if not os.path.isdir(checkout_path):
|
||||
self.log.error(
|
||||
"Subdirectory %s does not exist",
|
||||
self.subdir,
|
||||
extra=dict(phase="failure"),
|
||||
f"Subdirectory {self.subdir} does not exist",
|
||||
extra=dict(phase=R2dState.FAILED),
|
||||
)
|
||||
raise FileNotFoundError("Could not find {}".format(checkout_path))
|
||||
raise FileNotFoundError(f"Could not find {checkout_path}")
|
||||
|
||||
with chdir(checkout_path):
|
||||
for BP in self.buildpacks:
|
||||
bp = BP()
|
||||
bp = BP(base_image=self.base_image)
|
||||
if bp.detect():
|
||||
picked_buildpack = bp
|
||||
break
|
||||
else:
|
||||
picked_buildpack = self.default_buildpack()
|
||||
picked_buildpack = self.default_buildpack(
|
||||
base_image=self.base_image
|
||||
)
|
||||
|
||||
picked_buildpack.platform = self.platform
|
||||
picked_buildpack.appendix = self.appendix
|
||||
# Add metadata labels
|
||||
picked_buildpack.labels["repo2docker.version"] = self.version
|
||||
|
@ -720,27 +826,31 @@ class Repo2Docker(Application):
|
|||
picked_buildpack.labels["repo2docker.repo"] = repo_label
|
||||
picked_buildpack.labels["repo2docker.ref"] = self.ref
|
||||
|
||||
picked_buildpack.labels.update(self.labels)
|
||||
|
||||
build_args = {
|
||||
"NB_USER": self.user_name,
|
||||
"NB_UID": str(self.user_id),
|
||||
}
|
||||
if self.target_repo_dir:
|
||||
build_args["REPO_DIR"] = self.target_repo_dir
|
||||
build_args.update(self.extra_build_args)
|
||||
|
||||
if self.dry_run:
|
||||
print(picked_buildpack.render())
|
||||
print(picked_buildpack.render(build_args))
|
||||
else:
|
||||
self.log.debug(
|
||||
picked_buildpack.render(), extra=dict(phase="building")
|
||||
picked_buildpack.render(build_args),
|
||||
extra=dict(phase=R2dState.BUILDING),
|
||||
)
|
||||
if self.user_id == 0:
|
||||
raise ValueError(
|
||||
"Root as the primary user in the image is not permitted."
|
||||
)
|
||||
|
||||
build_args = {
|
||||
"NB_USER": self.user_name,
|
||||
"NB_UID": str(self.user_id),
|
||||
}
|
||||
if self.target_repo_dir:
|
||||
build_args["REPO_DIR"] = self.target_repo_dir
|
||||
self.log.info(
|
||||
"Using %s builder\n",
|
||||
bp.__class__.__name__,
|
||||
extra=dict(phase="building"),
|
||||
f"Using {bp.__class__.__name__} builder\n",
|
||||
extra=dict(phase=R2dState.BUILDING),
|
||||
)
|
||||
|
||||
for l in picked_buildpack.build(
|
||||
|
@ -750,21 +860,31 @@ class Repo2Docker(Application):
|
|||
build_args,
|
||||
self.cache_from,
|
||||
self.extra_build_kwargs,
|
||||
platform=self.platform,
|
||||
):
|
||||
if "stream" in l:
|
||||
self.log.info(l["stream"], extra=dict(phase="building"))
|
||||
if docker_client.string_output:
|
||||
self.log.info(l, extra=dict(phase=R2dState.BUILDING))
|
||||
# else this is Docker output
|
||||
elif "stream" in l:
|
||||
self.log.info(
|
||||
l["stream"], extra=dict(phase=R2dState.BUILDING)
|
||||
)
|
||||
elif "error" in l:
|
||||
self.log.info(l["error"], extra=dict(phase="failure"))
|
||||
raise docker.errors.BuildError(l["error"], build_log="")
|
||||
self.log.info(l["error"], extra=dict(phase=R2dState.FAILED))
|
||||
raise BuildError(l["error"])
|
||||
elif "status" in l:
|
||||
self.log.info(
|
||||
"Fetching base image...\r", extra=dict(phase="building")
|
||||
"Fetching base image...\r",
|
||||
extra=dict(phase=R2dState.BUILDING),
|
||||
)
|
||||
else:
|
||||
self.log.info(json.dumps(l), extra=dict(phase="building"))
|
||||
self.log.info(
|
||||
json.dumps(l), extra=dict(phase=R2dState.BUILDING)
|
||||
)
|
||||
|
||||
finally:
|
||||
# Cleanup checkout if necessary
|
||||
# never cleanup when checking out a local repo
|
||||
if self.cleanup_checkout:
|
||||
shutil.rmtree(checkout_path, ignore_errors=True)
|
||||
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
from .base import BuildPack, BaseImage
|
||||
from .python import PythonBuildPack
|
||||
from .pipfile import PipfileBuildPack
|
||||
from .base import BaseImage, BuildPack
|
||||
from .conda import CondaBuildPack
|
||||
from .julia import JuliaProjectTomlBuildPack
|
||||
from .julia import JuliaRequireBuildPack
|
||||
from .docker import DockerBuildPack
|
||||
from .julia import JuliaProjectTomlBuildPack, JuliaRequireBuildPack
|
||||
from .legacy import LegacyBinderDockerBuildPack
|
||||
from .r import RBuildPack
|
||||
from .nix import NixBuildPack
|
||||
from .pipfile import PipfileBuildPack
|
||||
from .python import PythonBuildPack
|
||||
from .r import RBuildPack
|
||||
|
|
|
@ -4,63 +4,66 @@ Base information for using R in BuildPacks.
|
|||
Keeping this in r.py would lead to cyclic imports.
|
||||
"""
|
||||
|
||||
# Via https://rstudio.com/products/rstudio/download-server/debian-ubuntu/
|
||||
RSTUDIO_URL = "https://download2.rstudio.org/server/bionic/amd64/rstudio-server-1.2.5001-amd64.deb"
|
||||
# This is MD5, because that is what RStudio download page provides!
|
||||
RSTUDIO_CHECKSUM = "d33881b9ab786c09556c410e7dc477de"
|
||||
|
||||
# Via https://www.rstudio.com/products/shiny/download-server/
|
||||
SHINY_URL = "https://download3.rstudio.org/ubuntu-14.04/x86_64/shiny-server-1.5.12.933-amd64.deb"
|
||||
SHINY_CHECKSUM = "9aeef6613e7f58f21c97a4600921340e"
|
||||
|
||||
# Version of MRAN to pull devtools from.
|
||||
DEVTOOLS_VERSION = "2018-02-01"
|
||||
|
||||
# IRKernel version - specified as a tag in the IRKernel repository
|
||||
IRKERNEL_VERSION = "1.1"
|
||||
from ..semver import parse_version as V
|
||||
|
||||
|
||||
def rstudio_base_scripts():
|
||||
def rstudio_base_scripts(r_version):
|
||||
"""Base steps to install RStudio and shiny-server."""
|
||||
|
||||
# Shiny server (not the package!) seems to be the same version for all R versions
|
||||
shiny_server_url = "https://download3.rstudio.org/ubuntu-14.04/x86_64/shiny-server-1.5.17.973-amd64.deb"
|
||||
shiny_proxy_version = "1.1"
|
||||
shiny_sha256sum = "80f1e48f6c824be7ef9c843bb7911d4981ac7e8a963e0eff823936a8b28476ee"
|
||||
|
||||
# RStudio server has different builds based on wether OpenSSL 3 or 1.1 is available in the base
|
||||
# image. 3 is present Jammy+, 1.1 until then. Instead of hardcoding URLs based on distro, we actually
|
||||
# check for the dependency itself directly in the code below. You can find these URLs in
|
||||
# https://posit.co/download/rstudio-server/, toggling between Ubuntu 22 (for openssl3) vs earlier versions (openssl 1.1)
|
||||
# you may forget about openssl, but openssl never forgets you.
|
||||
rstudio_openssl3_url = "https://download2.rstudio.org/server/jammy/amd64/rstudio-server-2022.12.0-353-amd64.deb"
|
||||
rstudio_openssl3_sha256sum = (
|
||||
"a5aa2202786f9017a6de368a410488ea2e4fc6c739f78998977af214df0d6288"
|
||||
)
|
||||
|
||||
rstudio_openssl1_url = "https://download2.rstudio.org/server/bionic/amd64/rstudio-server-2022.12.0-353-amd64.deb"
|
||||
rstudio_openssl1_sha256sum = (
|
||||
"bb88e37328c304881e60d6205d7dac145525a5c2aaaf9da26f1cb625b7d47e6e"
|
||||
)
|
||||
rsession_proxy_version = "2.2.0"
|
||||
|
||||
return [
|
||||
(
|
||||
"root",
|
||||
# Install RStudio!
|
||||
r"""
|
||||
curl --silent --location --fail {rstudio_url} > /tmp/rstudio.deb && \
|
||||
echo '{rstudio_checksum} /tmp/rstudio.deb' | md5sum -c - && \
|
||||
apt-get update && \
|
||||
apt install -y /tmp/rstudio.deb && \
|
||||
rm /tmp/rstudio.deb && \
|
||||
apt-get -qq purge && \
|
||||
apt-get -qq clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
""".format(
|
||||
rstudio_url=RSTUDIO_URL, rstudio_checksum=RSTUDIO_CHECKSUM
|
||||
),
|
||||
),
|
||||
(
|
||||
"root",
|
||||
# Install Shiny Server!
|
||||
r"""
|
||||
curl --silent --location --fail {url} > {deb} && \
|
||||
echo '{checksum} {deb}' | md5sum -c - && \
|
||||
dpkg -i {deb} && \
|
||||
rm {deb}
|
||||
""".format(
|
||||
url=SHINY_URL, checksum=SHINY_CHECKSUM, deb="/tmp/shiny.deb"
|
||||
),
|
||||
# we should have --no-install-recommends on all our apt-get install commands,
|
||||
# but here it's important because these recommend r-base,
|
||||
# which will upgrade the installed version of R, undoing our pinned version
|
||||
rf"""
|
||||
apt-get update > /dev/null && \
|
||||
if apt-cache search libssl3 | grep -q libssl3; then \
|
||||
RSTUDIO_URL="{rstudio_openssl3_url}" ;\
|
||||
RSTUDIO_HASH="{rstudio_openssl3_sha256sum}" ;\
|
||||
else \
|
||||
RSTUDIO_URL="{rstudio_openssl1_url}" ;\
|
||||
RSTUDIO_HASH="{rstudio_openssl1_sha256sum}" ;\
|
||||
fi && \
|
||||
curl --silent --location --fail ${{RSTUDIO_URL}} > /tmp/rstudio.deb && \
|
||||
curl --silent --location --fail {shiny_server_url} > /tmp/shiny.deb && \
|
||||
echo "${{RSTUDIO_HASH}} /tmp/rstudio.deb" | sha256sum -c - && \
|
||||
echo '{shiny_sha256sum} /tmp/shiny.deb' | sha256sum -c - && \
|
||||
apt install -y --no-install-recommends /tmp/rstudio.deb /tmp/shiny.deb && \
|
||||
rm /tmp/*.deb && \
|
||||
apt-get -qq purge && \
|
||||
apt-get -qq clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
""",
|
||||
),
|
||||
(
|
||||
"${NB_USER}",
|
||||
# Install nbrsessionproxy
|
||||
r"""
|
||||
pip install --no-cache-dir jupyter-server-proxy==1.4.0 && \
|
||||
pip install --no-cache-dir https://github.com/jupyterhub/jupyter-rsession-proxy/archive/d5efed5455870556fc414f30871d0feca675a4b4.zip && \
|
||||
pip install --no-cache-dir https://github.com/ryanlovett/jupyter-shiny-proxy/archive/47557dc47e2aeeab490eb5f3eeae414cdde4a6a9.zip && \
|
||||
jupyter serverextension enable jupyter_server_proxy --sys-prefix && \
|
||||
jupyter nbextension install --py jupyter_server_proxy --sys-prefix && \
|
||||
jupyter nbextension enable --py jupyter_server_proxy --sys-prefix
|
||||
# Install jupyter-rsession-proxy
|
||||
rf"""
|
||||
pip install --no-cache \
|
||||
jupyter-rsession-proxy=={rsession_proxy_version} \
|
||||
jupyter-shiny-proxy=={shiny_proxy_version}
|
||||
""",
|
||||
),
|
||||
(
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
import textwrap
|
||||
import jinja2
|
||||
import tarfile
|
||||
import hashlib
|
||||
import io
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import logging
|
||||
import string
|
||||
import sys
|
||||
import hashlib
|
||||
import escapism
|
||||
import xml.etree.ElementTree as ET
|
||||
import tarfile
|
||||
import textwrap
|
||||
from functools import lru_cache
|
||||
|
||||
from traitlets import Dict
|
||||
import escapism
|
||||
import jinja2
|
||||
from docker.utils.build import exclude_paths
|
||||
|
||||
# Only use syntax features supported by Docker 17.09
|
||||
TEMPLATE = r"""
|
||||
FROM buildpack-deps:bionic
|
||||
FROM {{base_image}}
|
||||
|
||||
# Avoid prompts from apt
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
@ -30,18 +30,18 @@ RUN apt-get -qq update && \
|
|||
RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \
|
||||
locale-gen
|
||||
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US.UTF-8
|
||||
ENV LC_ALL=en_US.UTF-8 \
|
||||
LANG=en_US.UTF-8 \
|
||||
LANGUAGE=en_US.UTF-8
|
||||
|
||||
# Use bash as default shell, rather than sh
|
||||
ENV SHELL /bin/bash
|
||||
ENV SHELL=/bin/bash
|
||||
|
||||
# Set up user
|
||||
ARG NB_USER
|
||||
ARG NB_UID
|
||||
ENV USER ${NB_USER}
|
||||
ENV HOME /home/${NB_USER}
|
||||
ENV USER=${NB_USER} \
|
||||
HOME=/home/${NB_USER}
|
||||
|
||||
RUN groupadd \
|
||||
--gid ${NB_UID} \
|
||||
|
@ -55,11 +55,6 @@ RUN groupadd \
|
|||
--uid ${NB_UID} \
|
||||
${NB_USER}
|
||||
|
||||
RUN wget --quiet -O - https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \
|
||||
DISTRO="bionic" && \
|
||||
echo "deb https://deb.nodesource.com/node_14.x $DISTRO main" >> /etc/apt/sources.list.d/nodesource.list && \
|
||||
echo "deb-src https://deb.nodesource.com/node_14.x $DISTRO main" >> /etc/apt/sources.list.d/nodesource.list
|
||||
|
||||
# Base package installs are not super interesting to users, so hide their outputs
|
||||
# If install fails for some reason, errors will still be printed
|
||||
RUN apt-get -qq update && \
|
||||
|
@ -89,13 +84,13 @@ EXPOSE 8888
|
|||
{% if build_env -%}
|
||||
# Environment variables required for build
|
||||
{% for item in build_env -%}
|
||||
ENV {{item[0]}} {{item[1]}}
|
||||
ENV {{item[0]}}={{item[1]}}
|
||||
{% endfor -%}
|
||||
{% endif -%}
|
||||
|
||||
{% if path -%}
|
||||
# Special case PATH
|
||||
ENV PATH {{ ':'.join(path) }}:${PATH}
|
||||
ENV PATH={{ ':'.join(path) }}:${PATH}
|
||||
{% endif -%}
|
||||
|
||||
{% if build_script_files -%}
|
||||
|
@ -108,10 +103,17 @@ COPY --chown={{ user }}:{{ user }} {{ src }} {{ dst }}
|
|||
{% for sd in build_script_directives -%}
|
||||
{{ sd }}
|
||||
{% endfor %}
|
||||
# ensure root user after build scripts
|
||||
USER root
|
||||
|
||||
# Allow target path repo is cloned to be configurable
|
||||
ARG REPO_DIR=${HOME}
|
||||
ENV REPO_DIR ${REPO_DIR}
|
||||
ENV REPO_DIR=${REPO_DIR}
|
||||
# Create a folder and grant the user permissions if it doesn't exist
|
||||
RUN if [ ! -d "${REPO_DIR}" ]; then \
|
||||
/usr/bin/install -o ${NB_USER} -g ${NB_USER} -d "${REPO_DIR}"; \
|
||||
fi
|
||||
|
||||
WORKDIR ${REPO_DIR}
|
||||
RUN chown ${NB_USER}:${NB_USER} ${REPO_DIR}
|
||||
|
||||
|
@ -123,12 +125,12 @@ RUN chown ${NB_USER}:${NB_USER} ${REPO_DIR}
|
|||
#
|
||||
# The XDG standard suggests ~/.local/bin as the path for local user-specific
|
||||
# installs. See https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||||
ENV PATH ${HOME}/.local/bin:${REPO_DIR}/.local/bin:${PATH}
|
||||
ENV PATH=${HOME}/.local/bin:${REPO_DIR}/.local/bin:${PATH}
|
||||
|
||||
{% if env -%}
|
||||
# The rest of the environment
|
||||
{% for item in env -%}
|
||||
ENV {{item[0]}} {{item[1]}}
|
||||
ENV {{item[0]}}={{item[1]}}
|
||||
{% endfor -%}
|
||||
{% endif -%}
|
||||
|
||||
|
@ -146,9 +148,11 @@ COPY --chown={{ user }}:{{ user }} src/{{ src }} ${REPO_DIR}/{{ dst }}
|
|||
{% for sd in preassemble_script_directives -%}
|
||||
{{ sd }}
|
||||
{% endfor %}
|
||||
# ensure root user after preassemble scripts
|
||||
USER root
|
||||
|
||||
# Copy stuff.
|
||||
COPY --chown={{ user }}:{{ user }} src/ ${REPO_DIR}
|
||||
COPY --chown={{ user }}:{{ user }} src/ ${REPO_DIR}/
|
||||
|
||||
# Run assemble scripts! These will actually turn the specification
|
||||
# in the repository into an image.
|
||||
|
@ -177,10 +181,12 @@ RUN ./{{ s }}
|
|||
# Add start script
|
||||
{% if start_script is not none -%}
|
||||
RUN chmod +x "{{ start_script }}"
|
||||
ENV R2D_ENTRYPOINT "{{ start_script }}"
|
||||
ENV R2D_ENTRYPOINT="{{ start_script }}"
|
||||
{% endif -%}
|
||||
|
||||
# Add entrypoint
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
COPY /python3-login /usr/local/bin/python3-login
|
||||
COPY /repo2docker-entrypoint /usr/local/bin/repo2docker-entrypoint
|
||||
ENTRYPOINT ["/usr/local/bin/repo2docker-entrypoint"]
|
||||
|
||||
|
@ -193,9 +199,7 @@ CMD ["jupyter", "notebook", "--ip", "0.0.0.0"]
|
|||
{% endif %}
|
||||
"""
|
||||
|
||||
ENTRYPOINT_FILE = os.path.join(
|
||||
os.path.dirname(os.path.abspath(__file__)), "repo2docker-entrypoint"
|
||||
)
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
# Also used for the group
|
||||
DEFAULT_NB_UID = 1000
|
||||
|
@ -208,7 +212,6 @@ class BuildPack:
|
|||
Specifically used for creating Dockerfiles for use with repo2docker only.
|
||||
|
||||
Things that are kept constant:
|
||||
- base image
|
||||
- some environment variables (such as locale)
|
||||
- user creation & ownership of home directory
|
||||
- working directory
|
||||
|
@ -218,16 +221,22 @@ class BuildPack:
|
|||
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, base_image):
|
||||
"""
|
||||
base_image specifies the base image to use when building docker images
|
||||
"""
|
||||
self.log = logging.getLogger("repo2docker")
|
||||
self.appendix = ""
|
||||
self.base_image = base_image
|
||||
self.labels = {}
|
||||
if sys.platform.startswith("win"):
|
||||
self.log.warning(
|
||||
"Windows environment detected. Note that Windows "
|
||||
"support is experimental in repo2docker."
|
||||
)
|
||||
self.platform = ""
|
||||
|
||||
@lru_cache()
|
||||
def get_packages(self):
|
||||
"""
|
||||
List of packages that are installed in this BuildPack.
|
||||
|
@ -237,6 +246,7 @@ class BuildPack:
|
|||
"""
|
||||
return set()
|
||||
|
||||
@lru_cache()
|
||||
def get_base_packages(self):
|
||||
"""
|
||||
Base set of apt packages that are installed for all images.
|
||||
|
@ -250,10 +260,12 @@ class BuildPack:
|
|||
return {
|
||||
# Utils!
|
||||
"less",
|
||||
"nodejs",
|
||||
"unzip",
|
||||
# Gives us envsubst
|
||||
"gettext-base",
|
||||
}
|
||||
|
||||
@lru_cache()
|
||||
def get_build_env(self):
|
||||
"""
|
||||
Ordered list of environment variables to be set for this image.
|
||||
|
@ -269,6 +281,7 @@ class BuildPack:
|
|||
"""
|
||||
return []
|
||||
|
||||
@lru_cache()
|
||||
def get_env(self):
|
||||
"""
|
||||
Ordered list of environment variables to be set for this image.
|
||||
|
@ -283,6 +296,7 @@ class BuildPack:
|
|||
"""
|
||||
return []
|
||||
|
||||
@lru_cache()
|
||||
def get_path(self):
|
||||
"""
|
||||
Ordered list of file system paths to look for executables in.
|
||||
|
@ -292,12 +306,14 @@ class BuildPack:
|
|||
"""
|
||||
return []
|
||||
|
||||
@lru_cache()
|
||||
def get_labels(self):
|
||||
"""
|
||||
Docker labels to set on the built image.
|
||||
"""
|
||||
return self.labels
|
||||
|
||||
@lru_cache()
|
||||
def get_build_script_files(self):
|
||||
"""
|
||||
Dict of files to be copied to the container image for use in building.
|
||||
|
@ -322,6 +338,7 @@ class BuildPack:
|
|||
f"Found a stencila manifest.xml at {root}. Stencila is no longer supported."
|
||||
)
|
||||
|
||||
@lru_cache()
|
||||
def get_build_scripts(self):
|
||||
"""
|
||||
Ordered list of shell script snippets to build the base image.
|
||||
|
@ -343,6 +360,7 @@ class BuildPack:
|
|||
|
||||
return []
|
||||
|
||||
@lru_cache()
|
||||
def get_preassemble_script_files(self):
|
||||
"""
|
||||
Dict of files to be copied to the container image for use in preassembly.
|
||||
|
@ -356,6 +374,7 @@ class BuildPack:
|
|||
"""
|
||||
return {}
|
||||
|
||||
@lru_cache()
|
||||
def get_preassemble_scripts(self):
|
||||
"""
|
||||
Ordered list of shell snippets to build an image for this repository.
|
||||
|
@ -372,6 +391,7 @@ class BuildPack:
|
|||
"""
|
||||
return []
|
||||
|
||||
@lru_cache()
|
||||
def get_assemble_scripts(self):
|
||||
"""
|
||||
Ordered list of shell script snippets to build the repo into the image.
|
||||
|
@ -398,6 +418,7 @@ class BuildPack:
|
|||
"""
|
||||
return []
|
||||
|
||||
@lru_cache()
|
||||
def get_post_build_scripts(self):
|
||||
"""
|
||||
An ordered list of executable scripts to execute after build.
|
||||
|
@ -410,6 +431,7 @@ class BuildPack:
|
|||
"""
|
||||
return []
|
||||
|
||||
@lru_cache()
|
||||
def get_start_script(self):
|
||||
"""
|
||||
The path to a script to be executed at container start up.
|
||||
|
@ -462,7 +484,7 @@ class BuildPack:
|
|||
last_user = "root"
|
||||
for user, script in self.get_build_scripts():
|
||||
if last_user != user:
|
||||
build_script_directives.append("USER {}".format(user))
|
||||
build_script_directives.append(f"USER {user}")
|
||||
last_user = user
|
||||
build_script_directives.append(
|
||||
"RUN {}".format(textwrap.dedent(script.strip("\n")))
|
||||
|
@ -472,7 +494,7 @@ class BuildPack:
|
|||
last_user = "root"
|
||||
for user, script in self.get_assemble_scripts():
|
||||
if last_user != user:
|
||||
assemble_script_directives.append("USER {}".format(user))
|
||||
assemble_script_directives.append(f"USER {user}")
|
||||
last_user = user
|
||||
assemble_script_directives.append(
|
||||
"RUN {}".format(textwrap.dedent(script.strip("\n")))
|
||||
|
@ -482,7 +504,7 @@ class BuildPack:
|
|||
last_user = "root"
|
||||
for user, script in self.get_preassemble_scripts():
|
||||
if last_user != user:
|
||||
preassemble_script_directives.append("USER {}".format(user))
|
||||
preassemble_script_directives.append(f"USER {user}")
|
||||
last_user = user
|
||||
preassemble_script_directives.append(
|
||||
"RUN {}".format(textwrap.dedent(script.strip("\n")))
|
||||
|
@ -519,6 +541,7 @@ class BuildPack:
|
|||
appendix=self.appendix,
|
||||
# For docker 17.09 `COPY --chown`, 19.03 would allow using $NBUSER
|
||||
user=build_args.get("NB_UID", DEFAULT_NB_UID),
|
||||
base_image=self.base_image,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
|
@ -558,6 +581,7 @@ class BuildPack:
|
|||
build_args,
|
||||
cache_from,
|
||||
extra_build_kwargs,
|
||||
platform=None,
|
||||
):
|
||||
tarf = io.BytesIO()
|
||||
tar = tarfile.open(fileobj=tarf, mode="w")
|
||||
|
@ -567,24 +591,52 @@ class BuildPack:
|
|||
|
||||
tar.addfile(dockerfile_tarinfo, io.BytesIO(dockerfile))
|
||||
|
||||
def _filter_tar(tar):
|
||||
def _filter_tar(tarinfo):
|
||||
# We need to unset these for build_script_files we copy into tar
|
||||
# Otherwise they seem to vary each time, preventing effective use
|
||||
# of the cache!
|
||||
# https://github.com/docker/docker-py/pull/1582 is related
|
||||
tar.uname = ""
|
||||
tar.gname = ""
|
||||
tar.uid = int(build_args.get("NB_UID", DEFAULT_NB_UID))
|
||||
tar.gid = int(build_args.get("NB_UID", DEFAULT_NB_UID))
|
||||
return tar
|
||||
tarinfo.uname = ""
|
||||
tarinfo.gname = ""
|
||||
tarinfo.uid = int(build_args.get("NB_UID", DEFAULT_NB_UID))
|
||||
tarinfo.gid = int(build_args.get("NB_UID", DEFAULT_NB_UID))
|
||||
return tarinfo
|
||||
|
||||
for src in sorted(self.get_build_script_files()):
|
||||
dest_path, src_path = self.generate_build_context_filename(src)
|
||||
tar.add(src_path, dest_path, filter=_filter_tar)
|
||||
|
||||
tar.add(ENTRYPOINT_FILE, "repo2docker-entrypoint", filter=_filter_tar)
|
||||
for fname in ("repo2docker-entrypoint", "python3-login"):
|
||||
tar.add(os.path.join(HERE, fname), fname, filter=_filter_tar)
|
||||
|
||||
tar.add(".", "src/", filter=_filter_tar)
|
||||
exclude = []
|
||||
|
||||
for ignore_file_name in [".dockerignore", ".containerignore"]:
|
||||
ignore_file_name = self.binder_path(ignore_file_name)
|
||||
if os.path.exists(ignore_file_name):
|
||||
with open(ignore_file_name) as ignore_file:
|
||||
cleaned_lines = [
|
||||
line.strip() for line in ignore_file.read().splitlines()
|
||||
]
|
||||
exclude.extend(
|
||||
[
|
||||
line
|
||||
for line in cleaned_lines
|
||||
if line != "" and line[0] != "#"
|
||||
]
|
||||
)
|
||||
|
||||
files_to_add = exclude_paths(".", exclude)
|
||||
|
||||
if files_to_add:
|
||||
for item in files_to_add:
|
||||
tar.add(item, f"src/{item}", filter=_filter_tar)
|
||||
else:
|
||||
# Either the source was empty or everything was filtered out.
|
||||
# In any case, create an src dir so the build can proceed.
|
||||
src = tarfile.TarInfo("src")
|
||||
src.type = tarfile.DIRTYPE
|
||||
tar.addfile(src)
|
||||
|
||||
tar.close()
|
||||
tarf.seek(0)
|
||||
|
@ -593,8 +645,8 @@ class BuildPack:
|
|||
# buildpacks/docker.py where it is duplicated
|
||||
if not isinstance(memory_limit, int):
|
||||
raise ValueError(
|
||||
"The memory limit has to be specified as an"
|
||||
"integer but is '{}'".format(type(memory_limit))
|
||||
"The memory limit has to be specified as an "
|
||||
f"integer but is '{type(memory_limit)}'"
|
||||
)
|
||||
limits = {}
|
||||
if memory_limit:
|
||||
|
@ -609,50 +661,25 @@ class BuildPack:
|
|||
tag=image_spec,
|
||||
custom_context=True,
|
||||
buildargs=build_args,
|
||||
decode=True,
|
||||
forcerm=True,
|
||||
rm=True,
|
||||
container_limits=limits,
|
||||
cache_from=cache_from,
|
||||
platform=platform,
|
||||
)
|
||||
|
||||
build_kwargs.update(extra_build_kwargs)
|
||||
|
||||
for line in client.build(**build_kwargs):
|
||||
yield line
|
||||
yield from client.build(**build_kwargs)
|
||||
|
||||
|
||||
class BaseImage(BuildPack):
|
||||
@lru_cache()
|
||||
def get_build_env(self):
|
||||
"""Return env directives required for build"""
|
||||
return [
|
||||
("APP_BASE", "/srv"),
|
||||
("NPM_DIR", "${APP_BASE}/npm"),
|
||||
("NPM_CONFIG_GLOBALCONFIG", "${NPM_DIR}/npmrc"),
|
||||
]
|
||||
|
||||
def get_path(self):
|
||||
return super().get_path() + ["${NPM_DIR}/bin"]
|
||||
|
||||
def get_build_scripts(self):
|
||||
scripts = [
|
||||
(
|
||||
"root",
|
||||
r"""
|
||||
mkdir -p ${NPM_DIR} && \
|
||||
chown -R ${NB_USER}:${NB_USER} ${NPM_DIR}
|
||||
""",
|
||||
),
|
||||
(
|
||||
"${NB_USER}",
|
||||
r"""
|
||||
npm config --global set prefix ${NPM_DIR}
|
||||
""",
|
||||
),
|
||||
]
|
||||
|
||||
return super().get_build_scripts() + scripts
|
||||
|
||||
@lru_cache()
|
||||
def get_env(self):
|
||||
"""Return env directives to be set after build"""
|
||||
return []
|
||||
|
@ -660,6 +687,7 @@ class BaseImage(BuildPack):
|
|||
def detect(self):
|
||||
return True
|
||||
|
||||
@lru_cache()
|
||||
def get_preassemble_scripts(self):
|
||||
scripts = []
|
||||
try:
|
||||
|
@ -674,8 +702,7 @@ class BaseImage(BuildPack):
|
|||
# FIXME: Add support for specifying version numbers
|
||||
if not re.match(r"^[a-z0-9.+-]+", package):
|
||||
raise ValueError(
|
||||
"Found invalid package name {} in "
|
||||
"apt.txt".format(package)
|
||||
f"Found invalid package name {package} in apt.txt"
|
||||
)
|
||||
extra_apt_packages.append(package)
|
||||
|
||||
|
@ -700,16 +727,19 @@ class BaseImage(BuildPack):
|
|||
|
||||
return scripts
|
||||
|
||||
@lru_cache()
|
||||
def get_assemble_scripts(self):
|
||||
"""Return directives to run after the entire repository has been added to the image"""
|
||||
return []
|
||||
|
||||
@lru_cache()
|
||||
def get_post_build_scripts(self):
|
||||
post_build = self.binder_path("postBuild")
|
||||
if os.path.exists(post_build):
|
||||
return [post_build]
|
||||
return []
|
||||
|
||||
@lru_cache()
|
||||
def get_start_script(self):
|
||||
start = self.binder_path("start")
|
||||
if os.path.exists(start):
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
"""BuildPack for conda environments"""
|
||||
|
||||
import os
|
||||
import re
|
||||
import warnings
|
||||
from collections.abc import Mapping
|
||||
from functools import lru_cache
|
||||
|
||||
from ruamel.yaml import YAML
|
||||
|
||||
from ..base import BaseImage
|
||||
from .._r_base import rstudio_base_scripts, IRKERNEL_VERSION
|
||||
from ...semver import parse_version as V
|
||||
from ...utils import is_local_pip_requirement
|
||||
from .._r_base import rstudio_base_scripts
|
||||
from ..base import BaseImage
|
||||
|
||||
# pattern for parsing conda dependency line
|
||||
PYTHON_REGEX = re.compile(r"python\s*=+\s*([\d\.]*)")
|
||||
|
@ -23,6 +27,27 @@ class CondaBuildPack(BaseImage):
|
|||
|
||||
"""
|
||||
|
||||
# The kernel conda environment file, if any.
|
||||
# As an absolute path within the container.
|
||||
_kernel_environment_file = ""
|
||||
# extra pip requirements.txt for the kernel
|
||||
_kernel_requirements_file = ""
|
||||
|
||||
# The notebook server environment file.
|
||||
# As an absolute path within the container.
|
||||
_nb_environment_file = ""
|
||||
# extra pip requirements.txt for the notebook env
|
||||
_nb_requirements_file = ""
|
||||
|
||||
def _conda_platform(self):
|
||||
"""Return the conda platform name for the current platform"""
|
||||
if self.platform == "linux/amd64":
|
||||
return "linux-64"
|
||||
if self.platform == "linux/arm64":
|
||||
return "linux-aarch64"
|
||||
raise ValueError(f"Unknown platform {self.platform}")
|
||||
|
||||
@lru_cache()
|
||||
def get_build_env(self):
|
||||
"""Return environment variables to be set.
|
||||
|
||||
|
@ -30,21 +55,49 @@ class CondaBuildPack(BaseImage):
|
|||
the `NB_PYTHON_PREFIX` to the location of the jupyter binary.
|
||||
|
||||
"""
|
||||
if not self._nb_environment_file:
|
||||
# get_build_script_files locates requirements/environment files,
|
||||
# populating the _nb_environment_file attribute and others.
|
||||
# FIXME: move file detection and initialization of those attributes to its own step?
|
||||
self.get_build_script_files()
|
||||
|
||||
env = super().get_build_env() + [
|
||||
("CONDA_DIR", "${APP_BASE}/conda"),
|
||||
("NB_PYTHON_PREFIX", "${CONDA_DIR}/envs/notebook"),
|
||||
# We install npm / node from conda-forge
|
||||
("NPM_DIR", "${APP_BASE}/npm"),
|
||||
("NPM_CONFIG_GLOBALCONFIG", "${NPM_DIR}/npmrc"),
|
||||
("NB_ENVIRONMENT_FILE", self._nb_environment_file),
|
||||
("MAMBA_ROOT_PREFIX", "${CONDA_DIR}"),
|
||||
# this exe should be used for installs after bootstrap with micromamba
|
||||
# switch this to /usr/local/bin/micromamba to use it for all installs
|
||||
("MAMBA_EXE", "${CONDA_DIR}/bin/mamba"),
|
||||
("CONDA_PLATFORM", self._conda_platform()),
|
||||
]
|
||||
if self.py2:
|
||||
env.append(("KERNEL_PYTHON_PREFIX", "${CONDA_DIR}/envs/kernel"))
|
||||
if self._nb_requirements_file:
|
||||
env.append(("NB_REQUIREMENTS_FILE", self._nb_requirements_file))
|
||||
|
||||
if self._kernel_environment_file:
|
||||
# if kernel environment file is separate
|
||||
env.extend(
|
||||
[
|
||||
("KERNEL_PYTHON_PREFIX", "${CONDA_DIR}/envs/kernel"),
|
||||
("KERNEL_ENVIRONMENT_FILE", self._kernel_environment_file),
|
||||
]
|
||||
)
|
||||
if self._kernel_requirements_file:
|
||||
env.append(("KERNEL_REQUIREMENTS_FILE", self._kernel_requirements_file))
|
||||
else:
|
||||
env.append(("KERNEL_PYTHON_PREFIX", "${NB_PYTHON_PREFIX}"))
|
||||
return env
|
||||
|
||||
@lru_cache()
|
||||
def get_env(self):
|
||||
"""Make kernel env the default for `conda install`"""
|
||||
env = super().get_env() + [("CONDA_DEFAULT_ENV", "${KERNEL_PYTHON_PREFIX}")]
|
||||
return env
|
||||
|
||||
@lru_cache()
|
||||
def get_path(self):
|
||||
"""Return paths (including conda environment path) to be added to
|
||||
the PATH environment variable.
|
||||
|
@ -52,18 +105,21 @@ class CondaBuildPack(BaseImage):
|
|||
"""
|
||||
path = super().get_path()
|
||||
path.insert(0, "${CONDA_DIR}/bin")
|
||||
if self.py2:
|
||||
if self.separate_kernel_env:
|
||||
path.insert(0, "${KERNEL_PYTHON_PREFIX}/bin")
|
||||
path.insert(0, "${NB_PYTHON_PREFIX}/bin")
|
||||
# This is at the end of $PATH, for backwards compat reasons
|
||||
path.append("${NPM_DIR}/bin")
|
||||
return path
|
||||
|
||||
@lru_cache()
|
||||
def get_build_scripts(self):
|
||||
"""
|
||||
Return series of build-steps common to all Python 3 repositories.
|
||||
|
||||
All scripts here should be independent of contents of the repository.
|
||||
|
||||
This sets up through `install-miniforge.bash` (found in this directory):
|
||||
This sets up through `install-base-env.bash` (found in this directory):
|
||||
|
||||
- a directory for the conda environment and its ownership by the
|
||||
notebook user
|
||||
|
@ -72,7 +128,6 @@ class CondaBuildPack(BaseImage):
|
|||
- a frozen base set of requirements, including:
|
||||
- support for Jupyter widgets
|
||||
- support for JupyterLab
|
||||
- support for nteract
|
||||
|
||||
"""
|
||||
return super().get_build_scripts() + [
|
||||
|
@ -80,14 +135,22 @@ class CondaBuildPack(BaseImage):
|
|||
"root",
|
||||
r"""
|
||||
TIMEFORMAT='time: %3R' \
|
||||
bash -c 'time /tmp/install-miniforge.bash' && \
|
||||
rm /tmp/install-miniforge.bash /tmp/environment.yml
|
||||
bash -c 'time /tmp/install-base-env.bash' && \
|
||||
rm -rf /tmp/install-base-env.bash /tmp/env
|
||||
""",
|
||||
)
|
||||
),
|
||||
(
|
||||
"root",
|
||||
r"""
|
||||
mkdir -p ${NPM_DIR} && \
|
||||
chown -R ${NB_USER}:${NB_USER} ${NPM_DIR}
|
||||
""",
|
||||
),
|
||||
]
|
||||
|
||||
major_pythons = {"2": "2.7", "3": "3.7"}
|
||||
major_pythons = {"2": "2.7", "3": "3.10"}
|
||||
|
||||
@lru_cache()
|
||||
def get_build_script_files(self):
|
||||
"""
|
||||
Dict of files to be copied to the container image for use in building.
|
||||
|
@ -104,30 +167,66 @@ class CondaBuildPack(BaseImage):
|
|||
|
||||
"""
|
||||
files = {
|
||||
"conda/install-miniforge.bash": "/tmp/install-miniforge.bash",
|
||||
"conda/install-base-env.bash": "/tmp/install-base-env.bash",
|
||||
"conda/activate-conda.sh": "/etc/profile.d/activate-conda.sh",
|
||||
}
|
||||
py_version = self.python_version
|
||||
self.log.info("Building conda environment for python=%s" % py_version)
|
||||
if not py_version or len(py_version.split(".")) != 2:
|
||||
raise ValueError(
|
||||
f"{self.__class__.__name__}.python_version must always be specified as 'x.y', e.g. '3.10', got {py_version}."
|
||||
)
|
||||
self.log.info(f"Building conda environment for python={py_version}\n")
|
||||
# Select the frozen base environment based on Python version.
|
||||
# avoids expensive and possibly conflicting upgrades when changing
|
||||
# major Python versions during upgrade.
|
||||
# If no version is specified or no matching X.Y version is found,
|
||||
# the default base environment is used.
|
||||
frozen_name = "environment.frozen.yml"
|
||||
if py_version:
|
||||
if self.py2:
|
||||
# python 2 goes in a different env
|
||||
files[
|
||||
"conda/environment.py-2.7.frozen.yml"
|
||||
] = "/tmp/kernel-environment.yml"
|
||||
else:
|
||||
py_frozen_name = "environment.py-{py}.frozen.yml".format(py=py_version)
|
||||
if os.path.exists(os.path.join(HERE, py_frozen_name)):
|
||||
frozen_name = py_frozen_name
|
||||
else:
|
||||
self.log.warning("No frozen env: %s", py_frozen_name)
|
||||
files["conda/" + frozen_name] = "/tmp/environment.yml"
|
||||
conda_platform = self._conda_platform()
|
||||
|
||||
if self.separate_kernel_env:
|
||||
# setup kernel environment (separate from server)
|
||||
# server runs with default env
|
||||
server_py_version = self.major_pythons["3"]
|
||||
self.log.warning(
|
||||
f"User-requested packages for legacy Python version {py_version} will be installed in a separate kernel environment in $KERNEL_PYTHON_PREFIX.\n"
|
||||
f"Jupyter Server will run with {server_py_version} in $NB_PYTHON_PREFIX.\n"
|
||||
)
|
||||
lockfile_name = f"environment.py-{py_version}-{conda_platform}.lock"
|
||||
if not os.path.exists(os.path.join(HERE, lockfile_name)):
|
||||
raise ValueError(
|
||||
f"Python version {py_version} on {conda_platform} is not supported!"
|
||||
)
|
||||
files[f"conda/{lockfile_name}"] = self._kernel_environment_file = (
|
||||
"/tmp/env/kernel-environment.lock"
|
||||
)
|
||||
|
||||
requirements_file_name = f"requirements.py-{py_version}.pip"
|
||||
if os.path.exists(os.path.join(HERE, requirements_file_name)):
|
||||
files[f"conda/{requirements_file_name}"] = (
|
||||
self._kernel_requirements_file
|
||||
) = "/tmp/env/kernel-requirements.txt"
|
||||
else:
|
||||
# server and kernel are the same
|
||||
server_py_version = py_version
|
||||
|
||||
# setup the server Python environment
|
||||
conda_frozen_name = f"environment.py-{server_py_version}-{conda_platform}.lock"
|
||||
pip_frozen_name = f"requirements.py-{server_py_version}.pip"
|
||||
|
||||
if not os.path.exists(os.path.join(HERE, conda_frozen_name)):
|
||||
# no env, not supported
|
||||
raise ValueError(
|
||||
f"Python version {server_py_version} on {conda_platform} is not supported!"
|
||||
)
|
||||
|
||||
files["conda/" + conda_frozen_name] = self._nb_environment_file = (
|
||||
"/tmp/env/environment.lock"
|
||||
)
|
||||
|
||||
# add requirements.txt, if present
|
||||
if os.path.exists(os.path.join(HERE, pip_frozen_name)):
|
||||
files["conda/" + pip_frozen_name] = self._nb_requirements_file = (
|
||||
"/tmp/env/requirements.txt"
|
||||
)
|
||||
|
||||
files.update(super().get_build_script_files())
|
||||
return files
|
||||
|
||||
|
@ -179,8 +278,9 @@ class CondaBuildPack(BaseImage):
|
|||
def python_version(self):
|
||||
"""Detect the Python version for a given `environment.yml`
|
||||
|
||||
Will return 'x.y' if version is found (e.g '3.6'),
|
||||
or a Falsy empty string '' if not found.
|
||||
Will always return an `x.y` version.
|
||||
If no version is found, the default Python version is used,
|
||||
via self.major_pythons['3'].
|
||||
|
||||
Version information below the minor level is dropped.
|
||||
"""
|
||||
|
@ -198,21 +298,25 @@ class CondaBuildPack(BaseImage):
|
|||
|
||||
# extract major.minor
|
||||
if py_version:
|
||||
if len(py_version) == 1:
|
||||
self._python_version = self.major_pythons.get(py_version[0])
|
||||
py_version_info = py_version.split(".")
|
||||
if len(py_version_info) == 1:
|
||||
self._python_version = self.major_pythons[py_version_info[0]]
|
||||
else:
|
||||
# return major.minor
|
||||
self._python_version = ".".join(py_version.split(".")[:2])
|
||||
self._python_version = ".".join(py_version_info[:2])
|
||||
else:
|
||||
self._python_version = ""
|
||||
self._python_version = self.major_pythons["3"]
|
||||
self.log.warning(
|
||||
f"Python version unspecified, using current default Python version {self._python_version}. This will change in the future."
|
||||
)
|
||||
|
||||
return self._python_version
|
||||
|
||||
@property
|
||||
def r_version(self):
|
||||
"""Detect the Python version for a given `environment.yml`
|
||||
"""Detect the R version for a given `environment.yml`
|
||||
|
||||
Will return 'x.y' if version is found (e.g '3.6'),
|
||||
Will return 'x.y.z' if version is found (e.g '4.1.1'),
|
||||
or a Falsy empty string '' if not found.
|
||||
|
||||
"""
|
||||
|
@ -251,8 +355,27 @@ class CondaBuildPack(BaseImage):
|
|||
@property
|
||||
def py2(self):
|
||||
"""Am I building a Python 2 kernel environment?"""
|
||||
warnings.warn(
|
||||
"CondaBuildPack.py2 is deprecated in 2023.2. Use CondaBuildPack.separate_kernel_env.",
|
||||
DeprecationWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
return self.python_version and self.python_version.split(".")[0] == "2"
|
||||
|
||||
# Python versions _older_ than this get a separate kernel env
|
||||
kernel_env_cutoff_version = "3.7"
|
||||
|
||||
@property
|
||||
def separate_kernel_env(self):
|
||||
"""Whether the kernel should be installed into a separate env from the server
|
||||
|
||||
Applies to older versions of Python that aren't kept up-to-date
|
||||
"""
|
||||
return self.python_version and V(self.python_version) < V(
|
||||
self.kernel_env_cutoff_version
|
||||
)
|
||||
|
||||
@lru_cache()
|
||||
def get_preassemble_script_files(self):
|
||||
"""preassembly only requires environment.yml
|
||||
|
||||
|
@ -266,24 +389,29 @@ class CondaBuildPack(BaseImage):
|
|||
assemble_files[environment_yml] = environment_yml
|
||||
return assemble_files
|
||||
|
||||
@lru_cache()
|
||||
def get_env_scripts(self):
|
||||
"""Return series of build-steps specific to this source repository."""
|
||||
scripts = []
|
||||
environment_yml = self.binder_path("environment.yml")
|
||||
env_prefix = "${KERNEL_PYTHON_PREFIX}" if self.py2 else "${NB_PYTHON_PREFIX}"
|
||||
env_prefix = (
|
||||
"${KERNEL_PYTHON_PREFIX}"
|
||||
if self.separate_kernel_env
|
||||
else "${NB_PYTHON_PREFIX}"
|
||||
)
|
||||
if os.path.exists(environment_yml):
|
||||
# TODO: when using micromamba, we call $MAMBA_EXE install -p ...
|
||||
# whereas mamba/conda need `env update -p ...` when it's an env.yaml file
|
||||
scripts.append(
|
||||
(
|
||||
"${NB_USER}",
|
||||
r"""
|
||||
rf"""
|
||||
TIMEFORMAT='time: %3R' \
|
||||
bash -c 'time mamba env update -p {0} -f "{1}" && \
|
||||
time mamba clean --all -f -y && \
|
||||
mamba list -p {0} \
|
||||
bash -c 'time ${{MAMBA_EXE}} env update -p {env_prefix} --file "{environment_yml}" && \
|
||||
time ${{MAMBA_EXE}} clean --all -f -y && \
|
||||
${{MAMBA_EXE}} list -p {env_prefix} \
|
||||
'
|
||||
""".format(
|
||||
env_prefix, environment_yml
|
||||
),
|
||||
""",
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -295,46 +423,47 @@ class CondaBuildPack(BaseImage):
|
|||
scripts.append(
|
||||
(
|
||||
"${NB_USER}",
|
||||
r"""
|
||||
mamba install -p {0} r-base{1} r-irkernel={2} r-devtools -y && \
|
||||
mamba clean --all -f -y && \
|
||||
mamba list -p {0}
|
||||
""".format(
|
||||
env_prefix, r_pin, IRKERNEL_VERSION
|
||||
),
|
||||
rf"""
|
||||
${{MAMBA_EXE}} install -p {env_prefix} r-base{r_pin} r-irkernel r-devtools -y && \
|
||||
${{MAMBA_EXE}} clean --all -f -y && \
|
||||
${{MAMBA_EXE}} list -p {env_prefix}
|
||||
""",
|
||||
)
|
||||
)
|
||||
scripts += rstudio_base_scripts()
|
||||
if self.platform != "linux/amd64":
|
||||
raise RuntimeError(
|
||||
f"RStudio is only available for linux/amd64 ({self.platform})"
|
||||
)
|
||||
scripts += rstudio_base_scripts(self.r_version)
|
||||
scripts += [
|
||||
(
|
||||
"root",
|
||||
r"""
|
||||
rf"""
|
||||
echo auth-none=1 >> /etc/rstudio/rserver.conf && \
|
||||
echo auth-minimum-user-id=0 >> /etc/rstudio/rserver.conf && \
|
||||
echo "rsession-which-r={0}/bin/R" >> /etc/rstudio/rserver.conf && \
|
||||
echo "rsession-which-r={env_prefix}/bin/R" >> /etc/rstudio/rserver.conf && \
|
||||
echo "rsession-ld-library-path={env_prefix}/lib" >> /etc/rstudio/rserver.conf && \
|
||||
echo www-frame-origin=same >> /etc/rstudio/rserver.conf
|
||||
""".format(
|
||||
env_prefix
|
||||
),
|
||||
""",
|
||||
),
|
||||
(
|
||||
"${NB_USER}",
|
||||
# Install a pinned version of IRKernel and set it up for use!
|
||||
r"""
|
||||
R --quiet -e "IRkernel::installspec(prefix='{0}')"
|
||||
""".format(
|
||||
env_prefix
|
||||
),
|
||||
# Register the jupyter kernel
|
||||
rf"""
|
||||
R --quiet -e "IRkernel::installspec(prefix='{env_prefix}')"
|
||||
""",
|
||||
),
|
||||
]
|
||||
return scripts
|
||||
|
||||
@lru_cache()
|
||||
def get_preassemble_scripts(self):
|
||||
scripts = super().get_preassemble_scripts()
|
||||
if self._should_preassemble_env:
|
||||
scripts.extend(self.get_env_scripts())
|
||||
return scripts
|
||||
|
||||
@lru_cache()
|
||||
def get_assemble_scripts(self):
|
||||
scripts = super().get_assemble_scripts()
|
||||
if not self._should_preassemble_env:
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
# enable conda and activate the notebook environment
|
||||
CONDA_PROFILE="${CONDA_DIR}/etc/profile.d/conda.sh"
|
||||
test -f $CONDA_PROFILE && . $CONDA_PROFILE
|
||||
eval $(micromamba shell hook -s posix -p ${CONDA_DIR})
|
||||
for name in conda mamba; do
|
||||
CONDA_PROFILE="${CONDA_DIR}/etc/profile.d/${name}.sh"
|
||||
test -f $CONDA_PROFILE && . $CONDA_PROFILE
|
||||
done
|
||||
if [[ "${KERNEL_PYTHON_PREFIX}" != "${NB_PYTHON_PREFIX}" ]]; then
|
||||
# if the kernel is a separate env, stack them
|
||||
# so both are on PATH, notebook first
|
||||
conda activate ${KERNEL_PYTHON_PREFIX}
|
||||
conda activate --stack ${NB_PYTHON_PREFIX}
|
||||
mamba activate ${KERNEL_PYTHON_PREFIX}
|
||||
mamba activate --stack ${NB_PYTHON_PREFIX}
|
||||
|
||||
# even though it's second on $PATH
|
||||
# make sure CONDA_DEFAULT_ENV is the *kernel* env
|
||||
|
@ -14,5 +17,5 @@ if [[ "${KERNEL_PYTHON_PREFIX}" != "${NB_PYTHON_PREFIX}" ]]; then
|
|||
# which only contains UI when the two are different
|
||||
export CONDA_DEFAULT_ENV="${KERNEL_PYTHON_PREFIX}"
|
||||
else
|
||||
conda activate ${NB_PYTHON_PREFIX}
|
||||
mamba activate ${NB_PYTHON_PREFIX}
|
||||
fi
|
||||
|
|
|
@ -1,133 +0,0 @@
|
|||
# AUTO GENERATED FROM environment.py-3.7.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2021-02-22 12:26:46 UTC
|
||||
name: r2d
|
||||
channels:
|
||||
- conda-forge
|
||||
- defaults
|
||||
- conda-forge/label/broken
|
||||
dependencies:
|
||||
- _libgcc_mutex=0.1=conda_forge
|
||||
- _openmp_mutex=4.5=1_gnu
|
||||
- alembic=1.5.5=pyhd8ed1ab_0
|
||||
- anyio=2.1.0=py37h89c1867_0
|
||||
- argon2-cffi=20.1.0=py37h8f50634_2
|
||||
- async_generator=1.10=py_0
|
||||
- attrs=20.3.0=pyhd3deb0d_0
|
||||
- babel=2.9.0=pyhd3deb0d_0
|
||||
- backcall=0.2.0=pyh9f0ad1d_0
|
||||
- backports=1.0=py_2
|
||||
- backports.functools_lru_cache=1.6.1=py_0
|
||||
- bleach=3.3.0=pyh44b312d_0
|
||||
- blinker=1.4=py_1
|
||||
- brotlipy=0.7.0=py37hb5d75c8_1001
|
||||
- c-ares=1.17.1=h36c2ea0_0
|
||||
- ca-certificates=2020.12.5=ha878542_0
|
||||
- certifi=2020.12.5=py37h89c1867_1
|
||||
- certipy=0.1.3=py_0
|
||||
- cffi=1.14.5=py37hc58025e_0
|
||||
- chardet=4.0.0=py37h89c1867_1
|
||||
- cryptography=3.4.4=py37hf1a17b8_0
|
||||
- decorator=4.4.2=py_0
|
||||
- defusedxml=0.6.0=py_0
|
||||
- entrypoints=0.3=py37hc8dfbb8_1002
|
||||
- idna=2.10=pyh9f0ad1d_0
|
||||
- importlib-metadata=3.4.0=py37h89c1867_0
|
||||
- importlib_metadata=3.4.0=hd8ed1ab_0
|
||||
- ipykernel=5.5.0=py37h888b3d9_1
|
||||
- ipython=7.20.0=py37h888b3d9_2
|
||||
- ipython_genutils=0.2.0=py_1
|
||||
- ipywidgets=7.6.3=pyhd3deb0d_0
|
||||
- jedi=0.18.0=py37h89c1867_2
|
||||
- jinja2=2.11.3=pyh44b312d_0
|
||||
- json5=0.9.5=pyh9f0ad1d_0
|
||||
- jsonschema=3.2.0=py37hc8dfbb8_1
|
||||
- jupyter-offlinenotebook=0.2.1=pyhd8ed1ab_0
|
||||
- jupyter-resource-usage=0.5.1=pyhd8ed1ab_0
|
||||
- jupyter_client=6.1.11=pyhd8ed1ab_1
|
||||
- jupyter_core=4.7.1=py37h89c1867_0
|
||||
- jupyter_server=1.4.0=py37h89c1867_0
|
||||
- jupyter_telemetry=0.1.0=pyhd8ed1ab_1
|
||||
- jupyterhub-base=1.3.0=py37h89c1867_0
|
||||
- jupyterhub-singleuser=1.3.0=py37h89c1867_0
|
||||
- jupyterlab=3.0.7=pyhd8ed1ab_0
|
||||
- jupyterlab_pygments=0.1.2=pyh9f0ad1d_0
|
||||
- jupyterlab_server=2.3.0=pyhd8ed1ab_0
|
||||
- jupyterlab_widgets=1.0.0=pyhd8ed1ab_1
|
||||
- krb5=1.17.2=h926e7f8_0
|
||||
- ld_impl_linux-64=2.35.1=hea4e1c9_2
|
||||
- libcurl=7.71.1=hcdd3856_8
|
||||
- libedit=3.1.20191231=he28a2e2_2
|
||||
- libev=4.33=h516909a_1
|
||||
- libffi=3.3=h58526e2_2
|
||||
- libgcc-ng=9.3.0=h2828fa1_18
|
||||
- libgomp=9.3.0=h2828fa1_18
|
||||
- libnghttp2=1.43.0=h812cca2_0
|
||||
- libsodium=1.0.18=h516909a_1
|
||||
- libssh2=1.9.0=hab1572f_5
|
||||
- libstdcxx-ng=9.3.0=h6de172a_18
|
||||
- mako=1.1.4=pyh44b312d_0
|
||||
- markupsafe=1.1.1=py37h5e8e339_3
|
||||
- mistune=0.8.4=py37h5e8e339_1003
|
||||
- nbclassic=0.2.6=pyhd8ed1ab_0
|
||||
- nbclient=0.5.2=pyhd8ed1ab_0
|
||||
- nbconvert=6.0.7=py37h89c1867_3
|
||||
- nbformat=5.1.2=pyhd8ed1ab_1
|
||||
- ncurses=6.2=h58526e2_4
|
||||
- nest-asyncio=1.4.3=pyhd8ed1ab_0
|
||||
- notebook=6.2.0=py37h89c1867_0
|
||||
- nteract_on_jupyter=2.1.3=py_0
|
||||
- oauthlib=3.0.1=py_0
|
||||
- openssl=1.1.1j=h7f98852_0
|
||||
- packaging=20.9=pyh44b312d_0
|
||||
- pamela=1.0.0=py_0
|
||||
- pandoc=2.11.4=h7f98852_0
|
||||
- pandocfilters=1.4.2=py_1
|
||||
- parso=0.8.1=pyhd8ed1ab_0
|
||||
- pexpect=4.8.0=py37hc8dfbb8_1
|
||||
- pickleshare=0.7.5=py37hc8dfbb8_1002
|
||||
- pip=21.0.1=pyhd8ed1ab_0
|
||||
- prometheus_client=0.9.0=pyhd3deb0d_0
|
||||
- prompt-toolkit=3.0.16=pyha770c72_0
|
||||
- psutil=5.8.0=py37h5e8e339_1
|
||||
- ptyprocess=0.7.0=pyhd3deb0d_0
|
||||
- pycparser=2.20=pyh9f0ad1d_2
|
||||
- pycurl=7.43.0.6=py37h88a64d2_1
|
||||
- pygments=2.8.0=pyhd8ed1ab_0
|
||||
- pyjwt=2.0.1=pyhd8ed1ab_0
|
||||
- pyopenssl=20.0.1=pyhd8ed1ab_0
|
||||
- pyparsing=2.4.7=pyh9f0ad1d_0
|
||||
- pyrsistent=0.17.3=py37h5e8e339_2
|
||||
- pysocks=1.7.1=py37h89c1867_3
|
||||
- python=3.7.10=hffdb5ce_100_cpython
|
||||
- python-dateutil=2.8.1=py_0
|
||||
- python-editor=1.0.4=py_0
|
||||
- python-json-logger=2.0.1=pyh9f0ad1d_0
|
||||
- python_abi=3.7=1_cp37m
|
||||
- pytz=2021.1=pyhd8ed1ab_0
|
||||
- pyzmq=22.0.3=py37h499b945_0
|
||||
- readline=8.0=he28a2e2_2
|
||||
- requests=2.25.1=pyhd3deb0d_0
|
||||
- ruamel.yaml=0.16.12=py37h5e8e339_2
|
||||
- ruamel.yaml.clib=0.2.2=py37h5e8e339_2
|
||||
- send2trash=1.5.0=py_0
|
||||
- setuptools=49.6.0=py37h89c1867_3
|
||||
- six=1.15.0=pyh9f0ad1d_0
|
||||
- sniffio=1.2.0=py37h89c1867_1
|
||||
- sqlalchemy=1.3.23=py37h5e8e339_0
|
||||
- sqlite=3.34.0=h74cdb3f_0
|
||||
- terminado=0.9.2=py37h89c1867_0
|
||||
- testpath=0.4.4=py_0
|
||||
- tk=8.6.10=hed695b0_1
|
||||
- tornado=6.1=py37h5e8e339_1
|
||||
- traitlets=5.0.5=py_0
|
||||
- typing_extensions=3.7.4.3=py_0
|
||||
- urllib3=1.26.3=pyhd8ed1ab_0
|
||||
- wcwidth=0.2.5=pyh9f0ad1d_2
|
||||
- webencodings=0.5.1=py_1
|
||||
- wheel=0.36.2=pyhd3deb0d_0
|
||||
- widgetsnbextension=3.5.1=py37hc8dfbb8_4
|
||||
- xz=5.2.5=h516909a_1
|
||||
- zeromq=4.3.4=h9c3ff4c_0
|
||||
- zipp=3.4.0=py_0
|
||||
- zlib=1.2.11=h516909a_1010
|
||||
prefix: /opt/conda/envs/r2d
|
|
@ -0,0 +1,57 @@
|
|||
# AUTO GENERATED FROM environment.py-2.7.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2022-08-01 23:18:07 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-64
|
||||
# input_hash: 7beee4267691da3e6d80db0820d9671e9bc51feff7a943357b4a21783a8f7826
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2022.6.15-ha878542_0.tar.bz2#c320890f77fd1d617fa876e0982002c2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.36.1-hea4e1c9_2.tar.bz2#bd4f2e711b39af170e7ff15163fe87ee
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-12.1.0-ha89aaad_16.tar.bz2#6f5ba041a41eb102a1027d9e68731be7
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgomp-12.1.0-h8d9b700_16.tar.bz2#f013cf7749536ce43d82afbffdf499ab
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-12.1.0-h8d9b700_16.tar.bz2#4f05bc9844f7c101e6e147dab3c88d5c
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libffi-3.2.1-he1b5a44_1007.tar.bz2#11389072d7d6036fd811c3d9460475cd
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.17-h516909a_0.tar.bz2#a98437ebf6fbbc6e498c64636f3958cf
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.12-h166bdaf_2.tar.bz2#8302381297332ea50532cf2c67961080
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.3-h27087fc_1.tar.bz2#4acfc691e64342b9dae57cf2adc63238
|
||||
https://conda.anaconda.org/conda-forge/linux-64/openssl-1.1.1q-h166bdaf_0.tar.bz2#07acc367c7fc8b716770cd5b36d31717
|
||||
https://conda.anaconda.org/conda-forge/linux-64/readline-8.1.2-h0f457ee_0.tar.bz2#db2ebbe2943aae81ed051a6a9af8e0fa
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.2-he1b5a44_2.tar.bz2#bc50a478e0d59f9a62ad164e7d768f63
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.12-h166bdaf_2.tar.bz2#4533821485cde83ab12ff3d8bda83768
|
||||
https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.39.2-h4ff8645_0.tar.bz2#2cf5cb4cd116a78e639977eb61ad9987
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python-2.7.15-h5a48372_1011_cpython.tar.bz2#d1824ac0987155f58a03b7ffda01db38
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-py_2.tar.bz2#0da16b293affa6ac31812376f8eb79dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports_abc-0.5-py_1.tar.bz2#6ac8cc52b55791b066dc43469bbaf8f2
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-4.4.2-py_0.tar.bz2#d2eabb9cabd212e1ec6a9463bd846243
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python_abi-2.7-1_cp27mu.tar.bz2#02d6ad6bce3a798e6ee85494cd9b3d8d
|
||||
https://conda.anaconda.org/conda-forge/noarch/simplegeneric-0.8.1-py_1.tar.bz2#a561caf8601e8d85547c77a54ee99333
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.1.9-pyh9f0ad1d_0.tar.bz2#ef10a99c7570762fa2a69218c171dbc8
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.37.1-pyhd8ed1ab_0.tar.bz2#1ca02aaf78d9c70d9a81a3bed5752022
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.shutil_get_terminal_size-1.0.0-py_3.tar.bz2#ed3c4ce59b457c5fd7ca79b94c57eff4
|
||||
https://conda.anaconda.org/conda-forge/linux-64/certifi-2019.11.28-py27h8c360ce_1.tar.bz2#a345324a2547908c1f9ca4b65d93f5ba
|
||||
https://conda.anaconda.org/conda-forge/linux-64/configparser-3.7.3-py27h8c360ce_2.tar.bz2#fce87da76335c7274cb858745fded401
|
||||
https://conda.anaconda.org/conda-forge/linux-64/enum34-1.1.10-py27h8c360ce_1.tar.bz2#0af4ab7b9189611125ba54d99163f58d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/futures-3.3.0-py27h8c360ce_1.tar.bz2#2689f3fc54d3987298828719b0244005
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh9f0ad1d_2.tar.bz2#5909e7b978141dd80d28dbf9de627827
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.1-py_0.tar.bz2#0d0150ed9c2d25817f5324108d3f7571
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyzmq-19.0.0-py27h76efe43_1.tar.bz2#0f578fd2966e4b2b910ffb3d39951645
|
||||
https://conda.anaconda.org/conda-forge/linux-64/scandir-1.10.0-py27hdf8410d_1.tar.bz2#bfaf4b51772c5904b696ce7d68731397
|
||||
https://conda.anaconda.org/conda-forge/noarch/singledispatch-3.6.1-pyh44b312d_0.tar.bz2#97dbbff78f872e5eb30a57c050cc4bba
|
||||
https://conda.anaconda.org/conda-forge/linux-64/entrypoints-0.3-py27h8c360ce_1001.tar.bz2#60366d5225a69edbfcc71572b099ddde
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pathlib2-2.3.5-py27h8c360ce_1.tar.bz2#5334600914183898c9e7610d894e49e3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/setuptools-44.0.0-py27_0.tar.bz2#a1dcb0ca393c777d0611faf5b86602be
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tornado-5.1.1-py27h14c3975_1000.tar.bz2#adf3de0f4bc56b631b63e5b5dc0a8886
|
||||
https://conda.anaconda.org/conda-forge/linux-64/traitlets-4.3.3-py27h8c360ce_1.tar.bz2#1e13e5ecf3cab787df71dc0c77563dce
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-4.6.3-py27h8c360ce_1.tar.bz2#1ea743b19d7f4e758b0a385fe9a1ef4b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pickleshare-0.7.5-py27h8c360ce_1001.tar.bz2#93586047c34842372ae2c1ed5fc9edbf
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-20.1.1-pyh9f0ad1d_0.tar.bz2#cd67a20c73ff2514cf5f34cae28fc867
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.5.2-py_0.tar.bz2#c48719b941c60b26add57de2b014ef96
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jupyter_client-5.3.4-py27_1.tar.bz2#ec6099141189dfae14367478d3e96fa9
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-1.0.15-py_1.tar.bz2#f5bea0930b268df84653cb32c8d1542f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ipython-5.8.0-py27_1.tar.bz2#b95b11ff25dde76c6fa0c5620a8e90ad
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ipykernel-4.8.2-py27_0.tar.bz2#18141b1342f87e1607c5b389c2c12a81
|
|
@ -1,59 +0,0 @@
|
|||
# AUTO GENERATED FROM environment.py-2.7.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2021-02-22 12:21:22 UTC
|
||||
name: r2d
|
||||
channels:
|
||||
- conda-forge
|
||||
- defaults
|
||||
- conda-forge/label/broken
|
||||
dependencies:
|
||||
- _libgcc_mutex=0.1=conda_forge
|
||||
- _openmp_mutex=4.5=1_gnu
|
||||
- backports=1.0=py27_1
|
||||
- backports.shutil_get_terminal_size=1.0.0=py27_1
|
||||
- backports_abc=0.5=py27_0
|
||||
- ca-certificates=2020.12.5=ha878542_0
|
||||
- certifi=2019.11.28=py27h8c360ce_1
|
||||
- configparser=3.7.3=py27h8c360ce_2
|
||||
- decorator=4.4.2=py_0
|
||||
- entrypoints=0.3=py27h8c360ce_1001
|
||||
- enum34=1.1.10=py27h8c360ce_1
|
||||
- futures=3.3.0=py27h8c360ce_1
|
||||
- ipykernel=4.8.2=py27_0
|
||||
- ipython=5.8.0=py27_1
|
||||
- ipython_genutils=0.2.0=py27_0
|
||||
- jupyter_client=5.3.4=py27_1
|
||||
- jupyter_core=4.6.3=py27h8c360ce_1
|
||||
- ld_impl_linux-64=2.35.1=hea4e1c9_2
|
||||
- libffi=3.2.1=he1b5a44_1007
|
||||
- libgcc-ng=9.3.0=h2828fa1_18
|
||||
- libgomp=9.3.0=h2828fa1_18
|
||||
- libsodium=1.0.17=h516909a_0
|
||||
- libstdcxx-ng=9.3.0=h6de172a_18
|
||||
- ncurses=6.2=h58526e2_4
|
||||
- openssl=1.1.1j=h7f98852_0
|
||||
- pathlib2=2.3.5=py27h8c360ce_1
|
||||
- pexpect=4.8.0=py27h8c360ce_1
|
||||
- pickleshare=0.7.5=py27h8c360ce_1001
|
||||
- pip=20.1.1=pyh9f0ad1d_0
|
||||
- prompt_toolkit=1.0.15=py27_0
|
||||
- ptyprocess=0.7.0=pyhd3deb0d_0
|
||||
- pygments=2.5.2=py_0
|
||||
- python=2.7.15=h5a48372_1011_cpython
|
||||
- python-dateutil=2.8.1=py_0
|
||||
- python_abi=2.7=1_cp27mu
|
||||
- pyzmq=19.0.0=py27h76efe43_1
|
||||
- readline=8.0=he28a2e2_2
|
||||
- scandir=1.10.0=py27hdf8410d_1
|
||||
- setuptools=44.0.0=py27_0
|
||||
- simplegeneric=0.8.1=py27_0
|
||||
- singledispatch=3.6.0=pyh44b312d_0
|
||||
- six=1.15.0=pyh9f0ad1d_0
|
||||
- sqlite=3.34.0=h74cdb3f_0
|
||||
- tk=8.6.10=hed695b0_1
|
||||
- tornado=5.1.1=py27h14c3975_1000
|
||||
- traitlets=4.3.3=py27h8c360ce_1
|
||||
- wcwidth=0.1.9=pyh9f0ad1d_0
|
||||
- wheel=0.36.2=pyhd3deb0d_0
|
||||
- zeromq=4.3.2=he1b5a44_2
|
||||
- zlib=1.2.11=h516909a_1010
|
||||
prefix: /opt/conda/envs/r2d
|
|
@ -1,4 +1,7 @@
|
|||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- python=2.7.*
|
||||
- pip
|
||||
- ipykernel==4.8.2
|
||||
- wcwidth==0.1.9
|
||||
|
|
|
@ -0,0 +1,175 @@
|
|||
# AUTO GENERATED FROM environment.py-3.10.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2023-10-14 22:06:18 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-64
|
||||
# input_hash: d4de4d52232becb85e22651d47e3ee37eda3e6773f0cda97e029623595714734
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda#9172c297304f2a20134fc56c97fbe229
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda#26322ec5d7712c3ded99dd656142b8ce
|
||||
https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_2.conda#e2042154faafe61969556f28bade94b9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.conda#c28003b0be0494f9a7664389146716ff
|
||||
https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54
|
||||
https://conda.anaconda.org/conda-forge/linux-64/gmp-6.2.1-h58526e2_0.tar.bz2#b94cf2db16066b242ebd26db2facbd56
|
||||
https://conda.anaconda.org/conda-forge/linux-64/icu-72.1-hcb278e6_0.conda#7c8d20d847bb45f56bd941578fcfa146
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2#c3788462a6fbddafdb413a9f9053e58d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda#d23c76f7e6dcd6243d1b6ef5e62d17d2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179
|
||||
https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.3-hd590300_0.conda#7bb88ce04c8deb9f7d763ae04a1da72f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161070d867d1b1204ea749c8eec4ef0
|
||||
https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2#4cb3ad778ec2d5a7acbdf254eb1c42ae
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.2-h2797004_0.conda#4b441a1ee22397d5a27dc1126b849edd
|
||||
https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_0.conda#8851084c192dbc56215ac4e3c9aa30fa
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209
|
||||
https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.17.1-hf52ce11_0.conda#c3aad73875296ca9ad3954aa606536b9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.3-h32600fe_0.conda#8287aeb8462e2d4b235eff788e75919d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python-3.10.12-hd12c33a_0_cpython.conda#eb6f1df105f37daedd6dca78523baa75
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiofiles-22.1.0-pyhd8ed1ab_0.tar.bz2#a88c206fdb78e34adb1c4081f5f838dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02
|
||||
https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.3-pyhd8ed1ab_0.conda#d33cf7357de636cec64320f0c4fb7b6f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hc6cd4ac_1.conda#1f95722c94f00b69af69a066c7433714
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a
|
||||
https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22
|
||||
https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1ab_0.conda#fef8ef5f0a54546b9efee39468229917
|
||||
https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.0-py310hc6cd4ac_1.conda#01388b4ec9eed3b26fa732aa39745475
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/executing-1.2.0-pyhd8ed1ab_0.tar.bz2#4c1bc140e2be5c8ba6e3acab99e25c50
|
||||
https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.0-py310hc6cd4ac_1.conda#4377af4c1641b4fc730707169257bd28
|
||||
https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda#dac1dabba2b5a9d1aee175c5fcc7b436
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-2.4-py310hff52083_3.conda#08ec1463dbc5c806a32fc431874032ca
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda#8370e0a9dc443f9b45a23fd30e7a6b3b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py310h2372a71_1.conda#b74e07a054c479e45a83a83fc5be713c
|
||||
https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda#1dad8397c94e4de97a70de552a7dcf49
|
||||
https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda#a4f0e4519bc50eee4f53f689be9607f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6
|
||||
https://conda.anaconda.org/conda-forge/noarch/pamela-1.1.0-pyh1a96a4e_0.conda#dce93ccf07159017c69c6d9cea2d5d61
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094
|
||||
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda#02153b6b760bbec00cfe9e4c97993d06
|
||||
https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h2372a71_1.conda#cb25177acf28cc35cfa6c1ac1c679e22
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883
|
||||
https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_0.conda#912c0194f898fdb783021fd25f913c31
|
||||
https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda#305141cff54af2f90e089d868fffce28
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960
|
||||
https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py310h2372a71_1.conda#bb010e368de4940771368bc3dc4c63e7
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyzmq-24.0.1-py310h330234f_1.tar.bz2#527a1e6cb07b5c19563131af9fca3835
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2#912a71cc01012ee38e6b90ddd561e36f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.10.6-py310hcb5633a_0.conda#43c12d8f7891a87378eb5339c49ef051
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py310h2372a71_2.conda#7c9da9721ee545d57ad759f020172853
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2
|
||||
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2#dd6cbc539e74cb1f430efbd4575b9303
|
||||
https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561
|
||||
https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py310h2372a71_1.conda#b23e0147fa5f7a9380e06334c7266ad5
|
||||
https://conda.anaconda.org/conda-forge/noarch/traitlets-5.11.2-pyhd8ed1ab_0.conda#bd3f90f7551e1cffb1f402880eb2cef1
|
||||
https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda#4df15c51a543e806d439490b862be1c6
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7
|
||||
https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda#0944dc65cb4a9b5b68522c3bb585d41c
|
||||
https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda#bdb77b28cf16deac0eef431a068320e8
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f
|
||||
https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda#82617d07b2f5f5a96296d3c19684b37a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/y-py-0.5.9-py310h4426083_0.conda#0b3145258baa17d4405c3800a308da99
|
||||
https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a
|
||||
https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49
|
||||
https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.0-pyhd8ed1ab_0.conda#056f04e51dd63337e8d7c425c18c86f1
|
||||
https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda#6b1b907661838a75d067a22f87996b2e
|
||||
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py310h2fee648_0.conda#45846a970e71ac98fd327da5d40a0a2c
|
||||
https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda#c8eaca39e2b6abae1fc96acc929ae939
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda#48b0d98e0c0ec810d3ccc2a0926c8c0e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40
|
||||
https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda#a33161b983172ba6ef69d5fc850650cd
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2#fed45fc5ea0813240707998abe49f520
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.35-py310h2372a71_0.conda#b44ae5156bd1561aca4430a8176819bb
|
||||
https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda#3788984d535770cad699efaeb6cb3037
|
||||
https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8
|
||||
https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310h2372a71_4.conda#68ee85860502d53c8cbfa0e4cef0f6cb
|
||||
https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda#b77d8c2313158e6e461ca0efb1c2c508
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cryptography-41.0.4-py310h75e40e8_0.conda#ad06c4db71ba0b6d153c66de88a41fdc
|
||||
https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2#642d35437078749ef23a5dca2c9bb1f3
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda#7c27ea1bdbe520bb830dcadd59f55cbf
|
||||
https://conda.anaconda.org/conda-forge/noarch/mako-1.2.4-pyhd8ed1ab_0.tar.bz2#0d072f0edc017b6318dbab701e053f94
|
||||
https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0
|
||||
https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.22-py310h2372a71_0.conda#e6d6b76280522052457c12ae7b0cdc23
|
||||
https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda#367386d2575a0e62412448eda1012efd
|
||||
https://conda.anaconda.org/conda-forge/noarch/alembic-1.12.0-pyhd8ed1ab_0.conda#ba29026b587195548ef82444518061f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4
|
||||
https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2#4cb68948e0b8429534380243d063a27a
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.1-pyhd8ed1ab_0.conda#78aff5d2af74e6537c1ca73017f01f4f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.4.0-py310hff52083_0.conda#28cdf08d2d44db099a95a176f01f7120
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-0.2.4-pyhd8ed1ab_0.conda#be5d4633c1cc40343ed417153a184006
|
||||
https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda#a4986c6bb5b0d05a38855b0880a5f425
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda#34f7d568bf59d18e3fef8c405cbece21
|
||||
https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.2-pyhd8ed1ab_0.conda#5ee5ad3af20138020065985de57f0711
|
||||
https://conda.anaconda.org/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.1-pyhd8ed1ab_0.conda#daca0665e6fe8a376e48b9f0b5865326
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.4.9-pyhd8ed1ab_0.conda#5cbf9a31a19d4ef9103adb7d71fd45fd
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda#61ba076de6530d9301a0053b02f093d2
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda#4bbbe67d5df19db30f04b8e344dc9976
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython-8.16.1-pyh0d859eb_0.conda#7e52cb0dbf01b90365bfe433ec8bd3c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.7.0-pyhd8ed1ab_2.conda#088f0493279a7f7eebd514df47d65851
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-base-3.1.1-pyh2a2186d_0.conda#78fc5dfd4577a7ba172fa65eb64b6afb
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.25.2-pyh2140261_0.conda#226f2032ec491cc6e9ce66072660e4f6
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.1-pyhd8ed1ab_0.conda#2605fae5ee27100e5f10037baebf4d41
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.9.2-pyhd8ed1ab_0.conda#01e4314c780ca73759c694ce3ece281f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda#7f0d2ec2d4954188ff23503f39823409
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.9.2-pyhd8ed1ab_0.conda#1ad46253f2eb46fb8c9b2c22b7ca012f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-resource-usage-0.7.1-pyhd8ed1ab_0.conda#62ed54dc748d19d0cf056a3f90cc8f12
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.0-pyhd8ed1ab_0.conda#a12525b037a703d7f4512da737d700e6
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda#a52834fa7e3d12abc5efdf06b2097a05
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.9.2-pyhd8ed1ab_0.conda#16ccaddfcfa0a1a606a9ecf6a52d6c11
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda#67e0fe74c156267d9159e9133df7fd37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_ydoc-0.8.0-pyhd8ed1ab_0.conda#780280d42fbcb2eaf654a6ba7a3e5bb5
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda#a0be31e9bd84d6eae87cdbf74c56b90b
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda#2e2422cf19f555ef3ddbbeaf2eac7545
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab-3.6.6-pyhd8ed1ab_0.conda#05def61d4c64b0f3161eaeb3b00cc790
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-singleuser-3.1.1-pyh2a2186d_0.conda#6d0a3394efe9ff7c0ad1ed03a6ca3720
|
|
@ -0,0 +1,173 @@
|
|||
# AUTO GENERATED FROM environment.py-3.10.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2023-10-14 22:06:28 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-aarch64
|
||||
# input_hash: c71bc2e0a2dae5dac9678a5765d28fa98eb1ed55fa606c1c53a3068d043922df
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2023.7.22-hcefe29a_0.conda#95d7f998087114466fa91e7c2887fa2f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.40-h2d8c526_0.conda#16246d69e945d0b1969a6099e7c5d457
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-13.2.0-hf8544c7_2.conda#8ce66e4e1d30f0936a525127eaaaf63d
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-13.2.0-h9a76618_2.conda#921c652898c8602bf2697d015f3efc77
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pandoc-3.1.3-h8af1aa0_0.conda#10b7f903dadbf1568c17e2c6cb39435b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.10-4_cp310.conda#b0ff2ed109650f9e90d627d3119eb442
|
||||
https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2#6168d71addc746e8f2b8d57dfd2edcea
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-13.2.0-hf8544c7_2.conda#f4dfb3bad7c8b38c3f8ed7f15a91a1ed
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-hf897c2e_4.tar.bz2#2d787570a729e273a4e75775ddf3348a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/icu-72.1-hcf00150_0.conda#cd394213b2f8c9c9060a293a8508fe84
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2#dddd85f4d52121fab0a8b099c5e06501
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.0-h31becfc_1.conda#b281ae3b462ef954fac3c06cc2cc92d5
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.18-hb9de7d4_1.tar.bz2#d09ab3c60eebb6f14eb4d07e172775cc
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda#000e30b09db0b7c775b21695dff30969
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.44.2-h31becfc_1.conda#f6068b95c0a3b4fd949a91341e9a0669
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.2.13-h31becfc_5.conda#b213aa87eea9491ef7b129179322e955
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.4-h2e1726e_0.conda#40beaf447150c2760affc591c7509595
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.1.3-h31becfc_0.conda#19469b6fdd72c1ffe022d9845fbb85fa
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2#83baad393a31d59c20b63ba4da6592df
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-hf897c2e_2.tar.bz2#b853307650cb226731f653aa623936a4
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.43.2-h194ca79_0.conda#16417bba0efbcb7539b942a611cc899a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda#105eb1e16bf83bfb2eb380a48032b655
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda#f75105e0585851f818e0009dd1dde4dc
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-h2f0025b_0.conda#88905c542167163a0dea6bdad01c3366
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.2.13-h31becfc_5.conda#96866c7301479abaf8308c50958c71a4
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-18.17.1-hcb20a51_0.conda#0611c05ba14e36fd4e19188d1708e393
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.10.12-hbbe8eec_0_cpython.conda#020fe1f640c2566b6b6606698b0aeebd
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiofiles-22.1.0-pyhd8ed1ab_0.tar.bz2#a88c206fdb78e34adb1c4081f5f838dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02
|
||||
https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.3-pyhd8ed1ab_0.conda#d33cf7357de636cec64320f0c4fb7b6f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.1.0-py310hbb3657e_1.conda#5ed52d1d3c480022fe67ae00d1cab792
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a
|
||||
https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22
|
||||
https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1ab_0.conda#fef8ef5f0a54546b9efee39468229917
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/debugpy-1.8.0-py310hbb3657e_1.conda#710e0a6d93d575d35813a6c0875ffa8b
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/executing-1.2.0-pyhd8ed1ab_0.tar.bz2#4c1bc140e2be5c8ba6e3acab99e25c50
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/greenlet-3.0.0-py310hbb3657e_1.conda#14ff589dba572c05cb68f92251b6f494
|
||||
https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda#dac1dabba2b5a9d1aee175c5fcc7b436
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/jsonpointer-2.4-py310h4c7bcd0_3.conda#c7252b728211fc4539a15e8a933b89be
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda#8370e0a9dc443f9b45a23fd30e7a6b3b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-2.1.3-py310h7c1f4a2_1.conda#2919650106992a96c85dcb66efae8e67
|
||||
https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda#1dad8397c94e4de97a70de552a7dcf49
|
||||
https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda#a4f0e4519bc50eee4f53f689be9607f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6
|
||||
https://conda.anaconda.org/conda-forge/noarch/pamela-1.1.0-pyh1a96a4e_0.conda#dce93ccf07159017c69c6d9cea2d5d61
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094
|
||||
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda#02153b6b760bbec00cfe9e4c97993d06
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/psutil-5.9.5-py310hb299538_1.conda#5007f78cda962123dbb0a66f666484c5
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883
|
||||
https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_0.conda#912c0194f898fdb783021fd25f913c31
|
||||
https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda#305141cff54af2f90e089d868fffce28
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960
|
||||
https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.1-py310hb299538_1.conda#f03783babd9179bffa3025624d11edc8
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-24.0.1-py310h7c6bb8d_1.tar.bz2#3c2de5f8a464c206b7db965f98af6f65
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2#912a71cc01012ee38e6b90ddd561e36f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.10.6-py310h057607a_0.conda#bdcfb85edbb78dddaef2d5ccb8d23236
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ruamel.yaml.clib-0.2.7-py310hb299538_2.conda#45eee1c3a48b16bad62fd180427c556c
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2
|
||||
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2#dd6cbc539e74cb1f430efbd4575b9303
|
||||
https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561
|
||||
https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.3.3-py310h7c1f4a2_1.conda#ccaeb6b56c1c7d728daa4fa45dad67b5
|
||||
https://conda.anaconda.org/conda-forge/noarch/traitlets-5.11.2-pyhd8ed1ab_0.conda#bd3f90f7551e1cffb1f402880eb2cef1
|
||||
https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda#4df15c51a543e806d439490b862be1c6
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7
|
||||
https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda#0944dc65cb4a9b5b68522c3bb585d41c
|
||||
https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda#bdb77b28cf16deac0eef431a068320e8
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f
|
||||
https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda#82617d07b2f5f5a96296d3c19684b37a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/y-py-0.5.9-py310hf87a4cc_0.conda#5ae43d6a9a31426a8c50d4cdcd4a0cda
|
||||
https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a
|
||||
https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49
|
||||
https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.0-pyhd8ed1ab_0.conda#056f04e51dd63337e8d7c425c18c86f1
|
||||
https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda#6b1b907661838a75d067a22f87996b2e
|
||||
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.16.0-py310hce94938_0.conda#69f5188c0b23d70d99e1f4153fe498cd
|
||||
https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda#c8eaca39e2b6abae1fc96acc929ae939
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda#48b0d98e0c0ec810d3ccc2a0926c8c0e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40
|
||||
https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda#a33161b983172ba6ef69d5fc850650cd
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2#fed45fc5ea0813240707998abe49f520
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ruamel.yaml-0.17.35-py310hb299538_0.conda#ff3eeb5a5324f0211147238c16690189
|
||||
https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda#3788984d535770cad699efaeb6cb3037
|
||||
https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/argon2-cffi-bindings-21.2.0-py310hb299538_4.conda#f24c78f33054d3c0ce4b73f6155e16a5
|
||||
https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda#b77d8c2313158e6e461ca0efb1c2c508
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-41.0.4-py310h34e2850_0.conda#4ef43415299c6e7d20180a69c74ea5ba
|
||||
https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2#642d35437078749ef23a5dca2c9bb1f3
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda#7c27ea1bdbe520bb830dcadd59f55cbf
|
||||
https://conda.anaconda.org/conda-forge/noarch/mako-1.2.4-pyhd8ed1ab_0.tar.bz2#0d072f0edc017b6318dbab701e053f94
|
||||
https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0
|
||||
https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.22-py310h7c1f4a2_0.conda#57db60a040ce6a3ccca88d09e8505ebe
|
||||
https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda#367386d2575a0e62412448eda1012efd
|
||||
https://conda.anaconda.org/conda-forge/noarch/alembic-1.12.0-pyhd8ed1ab_0.conda#ba29026b587195548ef82444518061f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4
|
||||
https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2#4cb68948e0b8429534380243d063a27a
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.1-pyhd8ed1ab_0.conda#78aff5d2af74e6537c1ca73017f01f4f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/jupyter_core-5.4.0-py310h4c7bcd0_0.conda#3e6165d82251e26cc82b608a0dfa2281
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-0.2.4-pyhd8ed1ab_0.conda#be5d4633c1cc40343ed417153a184006
|
||||
https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda#a4986c6bb5b0d05a38855b0880a5f425
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda#34f7d568bf59d18e3fef8c405cbece21
|
||||
https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.2-pyhd8ed1ab_0.conda#5ee5ad3af20138020065985de57f0711
|
||||
https://conda.anaconda.org/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.1-pyhd8ed1ab_0.conda#daca0665e6fe8a376e48b9f0b5865326
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.4.9-pyhd8ed1ab_0.conda#5cbf9a31a19d4ef9103adb7d71fd45fd
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda#61ba076de6530d9301a0053b02f093d2
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda#4bbbe67d5df19db30f04b8e344dc9976
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython-8.16.1-pyh0d859eb_0.conda#7e52cb0dbf01b90365bfe433ec8bd3c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.7.0-pyhd8ed1ab_2.conda#088f0493279a7f7eebd514df47d65851
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-base-3.1.1-pyh2a2186d_0.conda#78fc5dfd4577a7ba172fa65eb64b6afb
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.25.2-pyh2140261_0.conda#226f2032ec491cc6e9ce66072660e4f6
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.1-pyhd8ed1ab_0.conda#2605fae5ee27100e5f10037baebf4d41
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.9.2-pyhd8ed1ab_0.conda#01e4314c780ca73759c694ce3ece281f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda#7f0d2ec2d4954188ff23503f39823409
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.9.2-pyhd8ed1ab_0.conda#1ad46253f2eb46fb8c9b2c22b7ca012f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-resource-usage-0.7.1-pyhd8ed1ab_0.conda#62ed54dc748d19d0cf056a3f90cc8f12
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.0-pyhd8ed1ab_0.conda#a12525b037a703d7f4512da737d700e6
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda#a52834fa7e3d12abc5efdf06b2097a05
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.9.2-pyhd8ed1ab_0.conda#16ccaddfcfa0a1a606a9ecf6a52d6c11
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda#67e0fe74c156267d9159e9133df7fd37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_ydoc-0.8.0-pyhd8ed1ab_0.conda#780280d42fbcb2eaf654a6ba7a3e5bb5
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda#a0be31e9bd84d6eae87cdbf74c56b90b
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda#2e2422cf19f555ef3ddbbeaf2eac7545
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab-3.6.6-pyhd8ed1ab_0.conda#05def61d4c64b0f3161eaeb3b00cc790
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-singleuser-3.1.1-pyh2a2186d_0.conda#6d0a3394efe9ff7c0ad1ed03a6ca3720
|
|
@ -0,0 +1,15 @@
|
|||
# AUTO GENERATED FROM environment.yml, DO NOT MANUALLY MODIFY
|
||||
# Generated on 2023-10-14 22:06:18 UTC
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- python=3.10.*
|
||||
- nodejs=18
|
||||
- pip
|
||||
- ipywidgets==8.* # https://github.com/jupyter-widgets/ipywidgets
|
||||
- jupyter-offlinenotebook==0.2.* # https://github.com/manics/jupyter-offlinenotebook
|
||||
- jupyter-resource-usage==0.7.* # https://github.com/jupyter-server/jupyter-resource-usage
|
||||
- jupyter_server==1.* # https://github.com/jupyter-server/jupyter_server
|
||||
- jupyterhub-singleuser==3.* # https://github.com/jupyterhub/jupyterhub
|
||||
- jupyterlab==3.* # https://github.com/jupyterlab/jupyterlab
|
||||
- notebook==6.* # https://github.com/jupyter/notebook
|
|
@ -0,0 +1,176 @@
|
|||
# AUTO GENERATED FROM environment.py-3.11.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2023-10-14 22:06:48 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-64
|
||||
# input_hash: d7858459013cde39e2cf3380f5eefa3195c013a2a891b6cce2de3c687db9c116
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda#9172c297304f2a20134fc56c97fbe229
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-4_cp311.conda#d786502c97404c94d7d58d258a445a65
|
||||
https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_2.conda#e2042154faafe61969556f28bade94b9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.conda#c28003b0be0494f9a7664389146716ff
|
||||
https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54
|
||||
https://conda.anaconda.org/conda-forge/linux-64/gmp-6.2.1-h58526e2_0.tar.bz2#b94cf2db16066b242ebd26db2facbd56
|
||||
https://conda.anaconda.org/conda-forge/linux-64/icu-72.1-hcb278e6_0.conda#7c8d20d847bb45f56bd941578fcfa146
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2#c3788462a6fbddafdb413a9f9053e58d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda#d23c76f7e6dcd6243d1b6ef5e62d17d2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179
|
||||
https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.3-hd590300_0.conda#7bb88ce04c8deb9f7d763ae04a1da72f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161070d867d1b1204ea749c8eec4ef0
|
||||
https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2#4cb3ad778ec2d5a7acbdf254eb1c42ae
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.2-h2797004_0.conda#4b441a1ee22397d5a27dc1126b849edd
|
||||
https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_0.conda#8851084c192dbc56215ac4e3c9aa30fa
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209
|
||||
https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.17.1-hf52ce11_0.conda#c3aad73875296ca9ad3954aa606536b9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.3-h32600fe_0.conda#8287aeb8462e2d4b235eff788e75919d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python-3.11.6-hab00c5b_0_cpython.conda#b0dfbe2fcbfdb097d321bfd50ecddab1
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiofiles-22.1.0-pyhd8ed1ab_0.tar.bz2#a88c206fdb78e34adb1c4081f5f838dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02
|
||||
https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.3-pyhd8ed1ab_0.conda#d33cf7357de636cec64320f0c4fb7b6f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_1.conda#cce9e7c3f1c307f2a5fb08a2922d6164
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a
|
||||
https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22
|
||||
https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1ab_0.conda#fef8ef5f0a54546b9efee39468229917
|
||||
https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.0-py311hb755f60_1.conda#2c241533b8eafe8028442d46ef41eb13
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/executing-1.2.0-pyhd8ed1ab_0.tar.bz2#4c1bc140e2be5c8ba6e3acab99e25c50
|
||||
https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.0-py311hb755f60_1.conda#f902187d6de294292d8462bdcec9a7b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda#dac1dabba2b5a9d1aee175c5fcc7b436
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-2.4-py311h38be061_3.conda#41d52d822edf991bf0e6b08c1921a8ec
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda#8370e0a9dc443f9b45a23fd30e7a6b3b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_1.conda#71120b5155a0c500826cf81536721a15
|
||||
https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda#1dad8397c94e4de97a70de552a7dcf49
|
||||
https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda#a4f0e4519bc50eee4f53f689be9607f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6
|
||||
https://conda.anaconda.org/conda-forge/noarch/pamela-1.1.0-pyh1a96a4e_0.conda#dce93ccf07159017c69c6d9cea2d5d61
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094
|
||||
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda#02153b6b760bbec00cfe9e4c97993d06
|
||||
https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py311h459d7ec_1.conda#490d7fa8675afd1aa6f1b2332d156a45
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883
|
||||
https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_0.conda#912c0194f898fdb783021fd25f913c31
|
||||
https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda#305141cff54af2f90e089d868fffce28
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960
|
||||
https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py311h459d7ec_1.conda#52719a74ad130de8fb5d047dc91f247a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyzmq-24.0.1-py311ha4b6469_1.tar.bz2#7d57a4cdfa05e444ed955b0319b97eed
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2#912a71cc01012ee38e6b90ddd561e36f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.10.6-py311h46250e7_0.conda#b7237977dbca779aaaab65f42f5558d9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py311h459d7ec_2.conda#56bc3fe5180c0b23e05c7a5708153ac7
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2
|
||||
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2#dd6cbc539e74cb1f430efbd4575b9303
|
||||
https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561
|
||||
https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_1.conda#a700fcb5cedd3e72d0c75d095c7a6eda
|
||||
https://conda.anaconda.org/conda-forge/noarch/traitlets-5.11.2-pyhd8ed1ab_0.conda#bd3f90f7551e1cffb1f402880eb2cef1
|
||||
https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda#4df15c51a543e806d439490b862be1c6
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7
|
||||
https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda#0944dc65cb4a9b5b68522c3bb585d41c
|
||||
https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda#bdb77b28cf16deac0eef431a068320e8
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f
|
||||
https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda#82617d07b2f5f5a96296d3c19684b37a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/y-py-0.5.9-py311hfe55011_0.conda#216fb67bd1016b05fe33672bd71937a8
|
||||
https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a
|
||||
https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49
|
||||
https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.0-pyhd8ed1ab_0.conda#056f04e51dd63337e8d7c425c18c86f1
|
||||
https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda#6b1b907661838a75d067a22f87996b2e
|
||||
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py311hb3a22ac_0.conda#b3469563ac5e808b0cd92810d0697043
|
||||
https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda#c8eaca39e2b6abae1fc96acc929ae939
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda#48b0d98e0c0ec810d3ccc2a0926c8c0e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40
|
||||
https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda#a33161b983172ba6ef69d5fc850650cd
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2#fed45fc5ea0813240707998abe49f520
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.35-py311h459d7ec_0.conda#3d19030a70b6958f5b86062fd5613139
|
||||
https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda#3788984d535770cad699efaeb6cb3037
|
||||
https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8
|
||||
https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py311h459d7ec_4.conda#de5b16869a430949b02161b04b844a30
|
||||
https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda#b77d8c2313158e6e461ca0efb1c2c508
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cryptography-41.0.4-py311h63ff55d_0.conda#2b14cd05541532521196b0d2e0291ecf
|
||||
https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2#642d35437078749ef23a5dca2c9bb1f3
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda#7c27ea1bdbe520bb830dcadd59f55cbf
|
||||
https://conda.anaconda.org/conda-forge/noarch/mako-1.2.4-pyhd8ed1ab_0.tar.bz2#0d072f0edc017b6318dbab701e053f94
|
||||
https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0
|
||||
https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.22-py311h459d7ec_0.conda#d449c9c267177099c4f77a46e2dc078b
|
||||
https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda#367386d2575a0e62412448eda1012efd
|
||||
https://conda.anaconda.org/conda-forge/noarch/alembic-1.12.0-pyhd8ed1ab_0.conda#ba29026b587195548ef82444518061f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4
|
||||
https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2#4cb68948e0b8429534380243d063a27a
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.1-pyhd8ed1ab_0.conda#78aff5d2af74e6537c1ca73017f01f4f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.4.0-py311h38be061_0.conda#eb4ab2a92a2cc9715226382abb8ebaee
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-0.2.4-pyhd8ed1ab_0.conda#be5d4633c1cc40343ed417153a184006
|
||||
https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda#a4986c6bb5b0d05a38855b0880a5f425
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda#34f7d568bf59d18e3fef8c405cbece21
|
||||
https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.2-pyhd8ed1ab_0.conda#5ee5ad3af20138020065985de57f0711
|
||||
https://conda.anaconda.org/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.1-pyhd8ed1ab_0.conda#daca0665e6fe8a376e48b9f0b5865326
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.4.9-pyhd8ed1ab_0.conda#5cbf9a31a19d4ef9103adb7d71fd45fd
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda#61ba076de6530d9301a0053b02f093d2
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda#4bbbe67d5df19db30f04b8e344dc9976
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython-8.16.1-pyh0d859eb_0.conda#7e52cb0dbf01b90365bfe433ec8bd3c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.7.0-pyhd8ed1ab_2.conda#088f0493279a7f7eebd514df47d65851
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-base-3.1.1-pyh2a2186d_0.conda#78fc5dfd4577a7ba172fa65eb64b6afb
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.25.2-pyh2140261_0.conda#226f2032ec491cc6e9ce66072660e4f6
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.1-pyhd8ed1ab_0.conda#2605fae5ee27100e5f10037baebf4d41
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.9.2-pyhd8ed1ab_0.conda#01e4314c780ca73759c694ce3ece281f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda#7f0d2ec2d4954188ff23503f39823409
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.9.2-pyhd8ed1ab_0.conda#1ad46253f2eb46fb8c9b2c22b7ca012f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-resource-usage-0.7.1-pyhd8ed1ab_0.conda#62ed54dc748d19d0cf056a3f90cc8f12
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.0-pyhd8ed1ab_0.conda#a12525b037a703d7f4512da737d700e6
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda#a52834fa7e3d12abc5efdf06b2097a05
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.9.2-pyhd8ed1ab_0.conda#16ccaddfcfa0a1a606a9ecf6a52d6c11
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda#67e0fe74c156267d9159e9133df7fd37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_ydoc-0.8.0-pyhd8ed1ab_0.conda#780280d42fbcb2eaf654a6ba7a3e5bb5
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda#a0be31e9bd84d6eae87cdbf74c56b90b
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda#2e2422cf19f555ef3ddbbeaf2eac7545
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab-3.6.6-pyhd8ed1ab_0.conda#05def61d4c64b0f3161eaeb3b00cc790
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-singleuser-3.1.1-pyh2a2186d_0.conda#6d0a3394efe9ff7c0ad1ed03a6ca3720
|
|
@ -0,0 +1,174 @@
|
|||
# AUTO GENERATED FROM environment.py-3.11.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2023-10-14 22:06:59 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-aarch64
|
||||
# input_hash: 6295bf3adc6506c60639735f01c7e1f2dfc8f26b1454486ed44bcad99a6c6877
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2023.7.22-hcefe29a_0.conda#95d7f998087114466fa91e7c2887fa2f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.40-h2d8c526_0.conda#16246d69e945d0b1969a6099e7c5d457
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-13.2.0-hf8544c7_2.conda#8ce66e4e1d30f0936a525127eaaaf63d
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-13.2.0-h9a76618_2.conda#921c652898c8602bf2697d015f3efc77
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pandoc-3.1.3-h8af1aa0_0.conda#10b7f903dadbf1568c17e2c6cb39435b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.11-4_cp311.conda#89983f987dfee288f94ddb2ee550ea60
|
||||
https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2#6168d71addc746e8f2b8d57dfd2edcea
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-13.2.0-hf8544c7_2.conda#f4dfb3bad7c8b38c3f8ed7f15a91a1ed
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-hf897c2e_4.tar.bz2#2d787570a729e273a4e75775ddf3348a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/icu-72.1-hcf00150_0.conda#cd394213b2f8c9c9060a293a8508fe84
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.5.0-hd600fc2_1.conda#6cd3d0a28437b3845c260f9d71d434d7
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2#dddd85f4d52121fab0a8b099c5e06501
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.0-h31becfc_1.conda#b281ae3b462ef954fac3c06cc2cc92d5
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.18-hb9de7d4_1.tar.bz2#d09ab3c60eebb6f14eb4d07e172775cc
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda#000e30b09db0b7c775b21695dff30969
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.44.2-h31becfc_1.conda#f6068b95c0a3b4fd949a91341e9a0669
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.2.13-h31becfc_5.conda#b213aa87eea9491ef7b129179322e955
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.4-h2e1726e_0.conda#40beaf447150c2760affc591c7509595
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.1.3-h31becfc_0.conda#19469b6fdd72c1ffe022d9845fbb85fa
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2#83baad393a31d59c20b63ba4da6592df
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-hf897c2e_2.tar.bz2#b853307650cb226731f653aa623936a4
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.43.2-h194ca79_0.conda#16417bba0efbcb7539b942a611cc899a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda#105eb1e16bf83bfb2eb380a48032b655
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda#f75105e0585851f818e0009dd1dde4dc
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-h2f0025b_0.conda#88905c542167163a0dea6bdad01c3366
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.2.13-h31becfc_5.conda#96866c7301479abaf8308c50958c71a4
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-18.17.1-hcb20a51_0.conda#0611c05ba14e36fd4e19188d1708e393
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.11.6-h43d1f9e_0_cpython.conda#5f56b82899b4e77b4757b881e7e26ce0
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiofiles-22.1.0-pyhd8ed1ab_0.tar.bz2#a88c206fdb78e34adb1c4081f5f838dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02
|
||||
https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.3-pyhd8ed1ab_0.conda#d33cf7357de636cec64320f0c4fb7b6f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.1.0-py311h8715677_1.conda#22c060f41b1407ed9f40ce6468bdc338
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a
|
||||
https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22
|
||||
https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1ab_0.conda#fef8ef5f0a54546b9efee39468229917
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/debugpy-1.8.0-py311h8715677_1.conda#3dccf38a4c102ecf75ee7d18d31b9349
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/executing-1.2.0-pyhd8ed1ab_0.tar.bz2#4c1bc140e2be5c8ba6e3acab99e25c50
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/greenlet-3.0.0-py311h8715677_1.conda#8cf98fd86815f596c832c8f0ee2448d8
|
||||
https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda#dac1dabba2b5a9d1aee175c5fcc7b436
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/jsonpointer-2.4-py311hec3470c_3.conda#4f2983c27363a8685eccfb721acd2a03
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda#8370e0a9dc443f9b45a23fd30e7a6b3b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-2.1.3-py311hc8f2f60_1.conda#7c2101fff3f6c30b76f3a296218cff4b
|
||||
https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda#1dad8397c94e4de97a70de552a7dcf49
|
||||
https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda#a4f0e4519bc50eee4f53f689be9607f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6
|
||||
https://conda.anaconda.org/conda-forge/noarch/pamela-1.1.0-pyh1a96a4e_0.conda#dce93ccf07159017c69c6d9cea2d5d61
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094
|
||||
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda#02153b6b760bbec00cfe9e4c97993d06
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/psutil-5.9.5-py311hcd402e7_1.conda#ed330c5e852e3b60aeccd3098529a2ed
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883
|
||||
https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_0.conda#912c0194f898fdb783021fd25f913c31
|
||||
https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda#305141cff54af2f90e089d868fffce28
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960
|
||||
https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.1-py311hcd402e7_1.conda#78775409be46d19acb2b453f1f2c4757
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-24.0.1-py311h22a2215_1.tar.bz2#f53eaaf16aabefc915b90a28a16b41b5
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2#912a71cc01012ee38e6b90ddd561e36f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.10.6-py311h32437ce_0.conda#b3be057e627c4eddea773a368c0519a4
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ruamel.yaml.clib-0.2.7-py311hcd402e7_2.conda#10fad26bcf4222541f156415f11cbdc3
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2
|
||||
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2#dd6cbc539e74cb1f430efbd4575b9303
|
||||
https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561
|
||||
https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.3.3-py311hc8f2f60_1.conda#0680cec7381128327048e18e55d5c301
|
||||
https://conda.anaconda.org/conda-forge/noarch/traitlets-5.11.2-pyhd8ed1ab_0.conda#bd3f90f7551e1cffb1f402880eb2cef1
|
||||
https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda#4df15c51a543e806d439490b862be1c6
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7
|
||||
https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda#0944dc65cb4a9b5b68522c3bb585d41c
|
||||
https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda#bdb77b28cf16deac0eef431a068320e8
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f
|
||||
https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda#82617d07b2f5f5a96296d3c19684b37a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/y-py-0.5.9-py311h76a8765_0.conda#777ffa85e78c0c96a8692413b429c0a4
|
||||
https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a
|
||||
https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49
|
||||
https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.0-pyhd8ed1ab_0.conda#056f04e51dd63337e8d7c425c18c86f1
|
||||
https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda#6b1b907661838a75d067a22f87996b2e
|
||||
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.16.0-py311h7963103_0.conda#724e9c95346e0545543124bd3237ed7a
|
||||
https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda#c8eaca39e2b6abae1fc96acc929ae939
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda#48b0d98e0c0ec810d3ccc2a0926c8c0e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40
|
||||
https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda#a33161b983172ba6ef69d5fc850650cd
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2#fed45fc5ea0813240707998abe49f520
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ruamel.yaml-0.17.35-py311hcd402e7_0.conda#8b1f2746ffe6b02e9cbcf20aef243a47
|
||||
https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda#3788984d535770cad699efaeb6cb3037
|
||||
https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/argon2-cffi-bindings-21.2.0-py311hcd402e7_4.conda#836640e8a482dc22decea414117bb2ad
|
||||
https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda#b77d8c2313158e6e461ca0efb1c2c508
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-41.0.4-py311hd42d77a_0.conda#5f529af7a204bfd0619c11277b9d05f8
|
||||
https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2#642d35437078749ef23a5dca2c9bb1f3
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda#7c27ea1bdbe520bb830dcadd59f55cbf
|
||||
https://conda.anaconda.org/conda-forge/noarch/mako-1.2.4-pyhd8ed1ab_0.tar.bz2#0d072f0edc017b6318dbab701e053f94
|
||||
https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0
|
||||
https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.22-py311hc8f2f60_0.conda#c2a08013f37e10043bc748b3dac5d65d
|
||||
https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda#367386d2575a0e62412448eda1012efd
|
||||
https://conda.anaconda.org/conda-forge/noarch/alembic-1.12.0-pyhd8ed1ab_0.conda#ba29026b587195548ef82444518061f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4
|
||||
https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2#4cb68948e0b8429534380243d063a27a
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.1-pyhd8ed1ab_0.conda#78aff5d2af74e6537c1ca73017f01f4f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/jupyter_core-5.4.0-py311hec3470c_0.conda#7b0aa51351cb5d460716ec3441b9c1ca
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-0.2.4-pyhd8ed1ab_0.conda#be5d4633c1cc40343ed417153a184006
|
||||
https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda#a4986c6bb5b0d05a38855b0880a5f425
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda#34f7d568bf59d18e3fef8c405cbece21
|
||||
https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.2-pyhd8ed1ab_0.conda#5ee5ad3af20138020065985de57f0711
|
||||
https://conda.anaconda.org/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.1-pyhd8ed1ab_0.conda#daca0665e6fe8a376e48b9f0b5865326
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.4.9-pyhd8ed1ab_0.conda#5cbf9a31a19d4ef9103adb7d71fd45fd
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda#61ba076de6530d9301a0053b02f093d2
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda#4bbbe67d5df19db30f04b8e344dc9976
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython-8.16.1-pyh0d859eb_0.conda#7e52cb0dbf01b90365bfe433ec8bd3c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.7.0-pyhd8ed1ab_2.conda#088f0493279a7f7eebd514df47d65851
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-base-3.1.1-pyh2a2186d_0.conda#78fc5dfd4577a7ba172fa65eb64b6afb
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.25.2-pyh2140261_0.conda#226f2032ec491cc6e9ce66072660e4f6
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.1-pyhd8ed1ab_0.conda#2605fae5ee27100e5f10037baebf4d41
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.9.2-pyhd8ed1ab_0.conda#01e4314c780ca73759c694ce3ece281f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda#7f0d2ec2d4954188ff23503f39823409
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.9.2-pyhd8ed1ab_0.conda#1ad46253f2eb46fb8c9b2c22b7ca012f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-resource-usage-0.7.1-pyhd8ed1ab_0.conda#62ed54dc748d19d0cf056a3f90cc8f12
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.0-pyhd8ed1ab_0.conda#a12525b037a703d7f4512da737d700e6
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda#a52834fa7e3d12abc5efdf06b2097a05
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.9.2-pyhd8ed1ab_0.conda#16ccaddfcfa0a1a606a9ecf6a52d6c11
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda#67e0fe74c156267d9159e9133df7fd37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_ydoc-0.8.0-pyhd8ed1ab_0.conda#780280d42fbcb2eaf654a6ba7a3e5bb5
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda#a0be31e9bd84d6eae87cdbf74c56b90b
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda#2e2422cf19f555ef3ddbbeaf2eac7545
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab-3.6.6-pyhd8ed1ab_0.conda#05def61d4c64b0f3161eaeb3b00cc790
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-singleuser-3.1.1-pyh2a2186d_0.conda#6d0a3394efe9ff7c0ad1ed03a6ca3720
|
|
@ -0,0 +1,150 @@
|
|||
# AUTO GENERATED FROM environment.py-3.11.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2023-01-02 15:31:26 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-64
|
||||
# input_hash: 3ceb4508af8a0d0e080c5ad14c3ac306d00b4f32584072dd36dc8886b013bd41
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/ca-certificates-2022.12.7-ha878542_0.conda#ff9f73d45c4a07d6f424495288a26080
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/ld_impl_linux-64-2.39-hcc3a1bd_1.conda#737be0d34c22d24432049ab7a3214de4
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/libstdcxx-ng-12.2.0-h46fd767_19.tar.bz2#1030b1f38c129f2634eae026f704fe60
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/python_abi-3.11-3_cp311.conda#c2e2630ddb68cf52eec74dc7dfab20b5
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/tzdata-2022g-h191b570_0.conda#51fc4fcfb19f5d95ffc8c339db5068e8
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/libgomp-12.2.0-h65d4601_19.tar.bz2#cedcee7c064c01c403f962c9e8d3c373
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/libgcc-ng-12.2.0-h65d4601_19.tar.bz2#e4c94f80aef025c17ab0828cd85ef535
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/icu-70.1-h27087fc_0.tar.bz2#87473a15119779e021c314249d4b4aed
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2#c3788462a6fbddafdb413a9f9053e58d
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/libuuid-2.32.1-h7f98852_1000.tar.bz2#772d69f030955d9646d3d0eaf21d859d
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/libuv-1.44.2-h166bdaf_0.tar.bz2#e5cb4fe581a18ca2185a016eb848fc00
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/libzlib-1.2.13-h166bdaf_4.tar.bz2#f3f9de449d32ca9b9c66a22863c96f41
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/ncurses-6.3-h27087fc_1.tar.bz2#4acfc691e64342b9dae57cf2adc63238
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/openssl-3.0.7-h0b41bf4_1.conda#7adaac6ff98219bcb99b45e408b80f4e
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161070d867d1b1204ea749c8eec4ef0
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/libsqlite-3.40.0-h753d276_0.tar.bz2#2e5f9a37d487e1019fd4d8113adb2f9f
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/pandoc-2.19.2-h32600fe_1.tar.bz2#35a82883468c85ac8bf41f083c1933cf
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/readline-8.1.2-h0f457ee_0.tar.bz2#db2ebbe2943aae81ed051a6a9af8e0fa
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/zeromq-4.3.4-h9c3ff4c_1.tar.bz2#21743a8d2ea0c8cfbbf8fe489b0347df
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/zlib-1.2.13-h166bdaf_4.tar.bz2#4b11e365c0275b808be78b30f904e295
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/nodejs-16.17.1-h8839609_0.tar.bz2#1a19c5a76422549640a6824d6db189cf
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/python-3.11.0-ha86cf86_0_cpython.tar.bz2#531b2b97ce96cc95a587bdf7c74e31c0
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/_ipython_minor_entry_point-8.7.0-h0c17e10_0.conda#8a63fb4d63db7b245ecf3c6f907935ff
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/attrs-22.2.0-pyh71513ae_0.conda#8b76db7818a4e401ed4486c4c1635cd9
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/blinker-1.5-pyhd8ed1ab_0.tar.bz2#f473c4e32d8180733ba5594d122cb637
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/certifi-2022.12.7-pyhd8ed1ab_0.conda#fb9addc3db06e56abe03e0e9f21a63e6
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/charset-normalizer-2.1.1-pyhd8ed1ab_0.tar.bz2#c1d5b294fbf9a795dec349a6f4d8be8e
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/debugpy-1.6.4-py311ha362b79_0.conda#7cfc802c1a673662f49cdb76de669b39
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/executing-1.2.0-pyhd8ed1ab_0.tar.bz2#4c1bc140e2be5c8ba6e3acab99e25c50
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/flit-core-3.8.0-pyhd8ed1ab_0.tar.bz2#6d5e56de2e65da7aa35fd10131226efa
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/greenlet-2.0.1-py311ha362b79_0.tar.bz2#7adf8b182f4fd2cd313349bce924afdd
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/json5-0.9.5-pyh9f0ad1d_0.tar.bz2#10759827a94e6b14996e81fb002c0bda
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jupyterlab_widgets-3.0.5-pyhd8ed1ab_0.conda#953a312b272f37d39fe9d09f46734622
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/markupsafe-2.1.1-py311hd4cff14_2.tar.bz2#6b0d96114b4a841630ef7d0dff10d4e8
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/mistune-2.0.4-pyhd8ed1ab_0.tar.bz2#78e0a90393b79b378b8ff6d32893d58a
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/nest-asyncio-1.5.6-pyhd8ed1ab_0.tar.bz2#7b868f21adde0d9b8b38f9c16836589b
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/packaging-22.0-pyhd8ed1ab_0.conda#0e8e1bd93998978fc3125522266d12db
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pamela-1.0.0-py_0.tar.bz2#36f6f18d2f3ae0c93d77a9dbedad08c3
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_0.tar.bz2#89e3c7cdde7d3aaa2aee933b604dd07f
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/prometheus_client-0.15.0-pyhd8ed1ab_0.tar.bz2#b260ed41427dbbe70537b3030c643b2e
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/psutil-5.9.4-py311hd4cff14_0.tar.bz2#6fbda857a56adb4140bed339fbe0b801
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pyjwt-2.6.0-pyhd8ed1ab_0.tar.bz2#56d08bbebf5b3719ca2b1688fcfd98a4
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/pyrsistent-0.19.2-py311hd4cff14_0.tar.bz2#e6808d85cbd28e4fb2d61294627fa1b1
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/python-fastjsonschema-2.16.2-pyhd8ed1ab_0.tar.bz2#5fe4b6002f505336734ce92961b3e6a0
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/python-json-logger-2.0.4-pyhd8ed1ab_0.conda#6d1f4215f123c18aed06fb4104bcb11a
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pytz-2022.7-pyhd8ed1ab_0.conda#c8d7e34ca76d6ecc03b84bedfd99d689
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/pyzmq-24.0.1-py311ha4b6469_1.tar.bz2#7d57a4cdfa05e444ed955b0319b97eed
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py311h2582759_1.conda#5e997292429a22ad50c11af0a2cb0f08
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/send2trash-1.8.0-pyhd8ed1ab_0.tar.bz2#edab14119efe85c3bf131ad747e9005c
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/setuptools-65.6.3-pyhd8ed1ab_0.conda#9600fc9524d3f821e6a6d58c52f5bf5a
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2#dd6cbc539e74cb1f430efbd4575b9303
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/soupsieve-2.3.2.post1-pyhd8ed1ab_0.tar.bz2#146f4541d643d48fc8a75cacf69f03ae
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/tornado-6.2-py311hd4cff14_1.tar.bz2#4d86cd6dbdc1185f4e72d974f1f1f852
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/traitlets-5.8.0-pyhd8ed1ab_0.conda#75fa7ac3992a41e6a06102594bbf67d0
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/typing_extensions-4.4.0-pyha770c72_0.tar.bz2#2d93b130d148d7fc77e583677792fc6a
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/webencodings-0.5.1-py_1.tar.bz2#3563be4c5611a44210d9ba0c16113136
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/websocket-client-1.4.2-pyhd8ed1ab_0.tar.bz2#5309fca1777cfdd2d7ab582edb8cc41a
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/wheel-0.38.4-pyhd8ed1ab_0.tar.bz2#c829cfb8cb826acb9de0ac1a2df0a940
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/widgetsnbextension-4.0.5-pyhd8ed1ab_0.conda#2af53b3894fb9bdbb3679c0d31028b1b
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/zipp-3.11.0-pyhd8ed1ab_0.conda#09b5b885341697137879a4f039a9e5a1
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/anyio-3.6.2-pyhd8ed1ab_0.tar.bz2#8ada050fa88f26916fc1e76e368a49fd
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/asttokens-2.2.1-pyhd8ed1ab_0.conda#bf7f54dd0f25c3f06ecb82a07341841a
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/babel-2.11.0-pyhd8ed1ab_0.tar.bz2#2ea70fde8d581ba9425a761609eed6ba
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/backports.functools_lru_cache-1.6.4-pyhd8ed1ab_0.tar.bz2#c5b3edc62d6309088f4970b3eaaa65a6
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/beautifulsoup4-4.11.1-pyha770c72_0.tar.bz2#eeec8814bd97b2681f708bb127478d7d
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/bleach-5.0.1-pyhd8ed1ab_0.tar.bz2#1f5151d37e4a2b1137f81c89a3a769f2
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/cffi-1.15.1-py311h409f033_3.conda#9025d0786dbbe4bc91fd8e85502decce
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/comm-0.1.2-pyhd8ed1ab_0.conda#3c78af4752bb1600ebe5e83ef4588eaa
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/importlib-metadata-6.0.0-pyha770c72_0.conda#691644becbcdca9f73243450b1c63e62
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/importlib_resources-5.10.1-pyhd8ed1ab_1.conda#5b48ca365913b08b819884bc21d4fb56
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jedi-0.18.2-pyhd8ed1ab_0.conda#b5e695ef9c3f0d27d6cd96bf5adc9e07
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pip-22.3.1-pyhd8ed1ab_0.tar.bz2#da66f2851b9836d3a7c5190082a45f7d
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pygments-2.13.0-pyhd8ed1ab_0.tar.bz2#9f478e8eedd301008b5f395bad0caaed
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/ruamel.yaml-0.17.21-py311hd4cff14_2.tar.bz2#1e3fa73ad16d9c64e8e3421861a49ec0
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/sqlalchemy-1.4.45-py311h2582759_0.conda#c8452b47661df1285d72803934abc594
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda#3788984d535770cad699efaeb6cb3037
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/typing-extensions-4.4.0-hd8ed1ab_0.tar.bz2#be969210b61b897775a0de63cd9e9026
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py311hd4cff14_3.tar.bz2#5159e874f65ac382773d2b534a1d7b80
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/brotlipy-0.7.0-py311hd4cff14_1005.tar.bz2#9bdac7084ecfc08338bae1b976535724
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/cryptography-38.0.4-py311h42a1071_0.conda#34c95722eb879d7a9ee0546671084b2d
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda#723268a468177cd44568eb8f794e0d80
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/mako-1.2.4-pyhd8ed1ab_0.tar.bz2#0d072f0edc017b6318dbab701e053f94
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/platformdirs-2.6.2-pyhd8ed1ab_0.conda#0b4cc3f8181b0d8446eb5387d7848a54
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/wcwidth-0.2.5-pyh9f0ad1d_2.tar.bz2#5266fcd697043c59621fda522b3d78ee
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/alembic-1.9.1-pyhd8ed1ab_0.conda#5519188d282629ce4fef73eb87285cbe
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/argon2-cffi-21.3.0-pyhd8ed1ab_0.tar.bz2#a0b402db58f73aaab8ee0ca1025a362e
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/linux-64/jupyter_core-5.1.1-py311h38be061_0.conda#7a8cea41b480b295e083a39076342ca1
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/prompt-toolkit-3.0.36-pyha770c72_0.conda#4d79ec192e0bfd530a254006d123b9a6
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/pyopenssl-23.0.0-pyhd8ed1ab_0.conda#d41957700e83bbb925928764cb7f8878
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/ipython-8.7.0-pyh41d4057_0.conda#adc2f96edf35423c091dba93b642573a
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jupyter_client-7.4.8-pyhd8ed1ab_0.conda#bd4951aa5fbf3336a249e25c90f50333
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/nbformat-5.7.1-pyhd8ed1ab_0.conda#facb42913140f1a399a5ebb65b30915e
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/urllib3-1.26.13-pyhd8ed1ab_0.conda#3078ef2359efd6ecadbc7e085c5e0592
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/ipykernel-6.19.4-pyh210e3f2_0.conda#65372b6dd819e2c36345cf91eeb4ff06
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/nbclient-0.7.2-pyhd8ed1ab_0.conda#6c7b0d75b66a220274bb5a28c23197f2
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/requests-2.28.1-pyhd8ed1ab_1.tar.bz2#089382ee0e2dc2eae33a04cc3c2bddb0
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/ipywidgets-8.0.2-pyhd8ed1ab_1.tar.bz2#81b7f46918555bf911ad2ba2f3259094
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jupyterhub-base-3.1.0-pyh2a2186d_0.conda#ca96c2cd4d1aaa98d9098d775e5012cb
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/nbconvert-core-7.2.7-pyhd8ed1ab_0.conda#dce063b1f5d6193646fc2ac43f88b77f
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jupyter_server-1.23.4-pyhd8ed1ab_0.conda#35b7e9267926e864cc70ce137e6588ca
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/nbconvert-pandoc-7.2.7-pyhd8ed1ab_0.conda#7d48776bb3fdfa6447267c413a480ccd
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jupyter-resource-usage-0.6.3-pyhd8ed1ab_0.tar.bz2#9d26ebd67e0e22aba13ac8a490d88d9e
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jupyterlab_server-2.17.0-pyhd8ed1ab_0.conda#68364b266a989bb9829943bfd33187d8
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/nbconvert-7.2.7-pyhd8ed1ab_0.conda#b019fe41e6f6b88e0557532514f39cff
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/notebook-shim-0.2.2-pyhd8ed1ab_0.tar.bz2#40be846cd4e78672a40e43db9dae753c
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/nbclassic-0.4.8-pyhd8ed1ab_0.tar.bz2#f4f150f83ed90a1b833e6081bbf38257
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/notebook-6.4.12-pyha770c72_0.tar.bz2#77fc67c5bbea44fd41e8bbe2ac82d1ad
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jupyterlab-3.4.8-pyhd8ed1ab_0.tar.bz2#6fbf13b0e8a6fa24bbae91205e8ce467
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/nteract_on_jupyter-2.1.3-py_0.tar.bz2#1430ccd983ae6b161e2fbf4377965f7a
|
||||
https://conda.anaconda.org/t/<TOKEN>/conda-forge/noarch/jupyterhub-singleuser-3.1.0-pyh2a2186d_0.conda#7607cbc55a1bc12bc9c78ce827c7bb8e
|
|
@ -0,0 +1,15 @@
|
|||
# AUTO GENERATED FROM environment.yml, DO NOT MANUALLY MODIFY
|
||||
# Generated on 2023-10-14 22:06:48 UTC
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- python=3.11.*
|
||||
- nodejs=18
|
||||
- pip
|
||||
- ipywidgets==8.* # https://github.com/jupyter-widgets/ipywidgets
|
||||
- jupyter-offlinenotebook==0.2.* # https://github.com/manics/jupyter-offlinenotebook
|
||||
- jupyter-resource-usage==0.7.* # https://github.com/jupyter-server/jupyter-resource-usage
|
||||
- jupyter_server==1.* # https://github.com/jupyter-server/jupyter_server
|
||||
- jupyterhub-singleuser==3.* # https://github.com/jupyterhub/jupyterhub
|
||||
- jupyterlab==3.* # https://github.com/jupyterlab/jupyterlab
|
||||
- notebook==6.* # https://github.com/jupyter/notebook
|
|
@ -0,0 +1,73 @@
|
|||
# py3.5 conda packages are no longer being updated as of 12/2018
|
||||
# note: one update 11/2021 to shift nodejs into conda-env
|
||||
# this file is hand-maintained now
|
||||
# and should only receive security fixes, no new features
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2021.10.8-ha878542_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-11.2.0-he4da1e4_11.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgomp-11.2.0-h1d223b6_11.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-1_gnu.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-11.2.0-h1d223b6_11.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.6-h470a237_2.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/gmp-6.1.2-hfc679d8_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/icu-68.2-h9c3ff4c_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libffi-3.3-h58526e2_2.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.16-h470a237_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libuv-1.42.0-h7f98852_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.2-h58526e2_4.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/openssl-1.1.1l-h7f98852_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.5-h516909a_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.11-h470a237_3.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/nodejs-14.17.4-h92b4a50_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pandoc-1.19.2-0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/readline-8.1-h46c0cb4_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.11-h27826a3_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.2.5-hfc679d8_6.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.36.0-h9cd32fc_2.tar.bz2
|
||||
https://repo.anaconda.com/pkgs/main/linux-64/python-3.5.6-h12debd9_1.conda
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.1.0-py_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/certifi-2018.8.24-py35_1001.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-4.3.0-py_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.5.0-py_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/entrypoints-0.2.3-py35_2.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jsonschema-2.6.0-py35_2.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/markupsafe-1.0-py35h470a237_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/mistune-0.8.3-py35h470a237_2.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.4.2-py_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.3.1-py_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pickleshare-0.7.5-py35_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.4.2-py_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ptyprocess-0.6.0-py35_1000.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyzmq-17.1.2-py35hae99301_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.5.0-py_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/simplegeneric-0.8.1-py_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/six-1.11.0-py35_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/testpath-0.3.1-py35_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tornado-5.1.1-py35h470a237_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.1.7-py_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-py_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jedi-0.12.1-py35_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pexpect-4.6.0-py35_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.7.5-py_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/setuptools-40.4.3-py35_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/terminado-0.8.1-py35_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/traitlets-4.3.2-py35_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-3.0.2-py_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-2.10-py_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_core-4.4.0-py_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.2.0-py_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/wheel-0.32.0-py35_1000.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-5.2.3-py_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-4.4.0-py_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pip-18.0-py35_1001.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-2.0.7-py_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ipython-7.0.1-py35h24bf2e0_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/label/broken/noarch/nbconvert-5.4.0-1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/label/broken/noarch/ipykernel-5.1.0-pyh24bf2e0_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/notebook-5.7.0-py35_0.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_launcher-0.13.1-py_2.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/widgetsnbextension-3.2.1-py35_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ipywidgets-7.2.1-py35_1.tar.bz2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jupyterlab-0.34.9-py35_0.tar.bz2
|
|
@ -1,86 +0,0 @@
|
|||
# py3.5 conda packages are no longer being updated as of 12/2018
|
||||
# this file is hand-maintained now
|
||||
# and should only receive security fixes, no new features
|
||||
name: r2d
|
||||
channels:
|
||||
- conda-forge
|
||||
- defaults
|
||||
- conda-forge/label/broken
|
||||
dependencies:
|
||||
- backcall=0.1.0=py_0
|
||||
- bleach=3.0.2=py_0
|
||||
- bzip2=1.0.6=h470a237_2
|
||||
- ca-certificates=2018.10.15=ha4d7672_0
|
||||
- certifi=2018.8.24=py35_1001
|
||||
- decorator=4.3.0=py_0
|
||||
- defusedxml=0.5.0=py_1
|
||||
- entrypoints=0.2.3=py35_2
|
||||
- gmp=6.1.2=hfc679d8_0
|
||||
- ipykernel=5.1.0=pyh24bf2e0_0
|
||||
- ipython=7.0.1=py35h24bf2e0_0
|
||||
- ipython_genutils=0.2.0=py_1
|
||||
- ipywidgets=7.2.1=py35_1
|
||||
- jedi=0.12.1=py35_0
|
||||
- jinja2=2.10=py_1
|
||||
- jsonschema=2.6.0=py35_2
|
||||
- jupyter_client=5.2.3=py_1
|
||||
- jupyter_core=4.4.0=py_0
|
||||
- jupyterlab=0.34.9=py35_0
|
||||
- jupyterlab_launcher=0.13.1=py_2
|
||||
- libffi=3.2.1=hfc679d8_5
|
||||
- libgcc-ng=7.2.0=hdf63c60_3
|
||||
- libsodium=1.0.16=h470a237_1
|
||||
- libstdcxx-ng=7.2.0=hdf63c60_3
|
||||
- markupsafe=1.0=py35h470a237_1
|
||||
- mistune=0.8.3=py35h470a237_2
|
||||
- nbconvert=5.4.0=1
|
||||
- nbformat=4.4.0=py_1
|
||||
- ncurses=6.1=hfc679d8_1
|
||||
- openssl=1.0.2p=h470a237_1
|
||||
- pandoc=1.19.2=0
|
||||
- pandocfilters=1.4.2=py_1
|
||||
- parso=0.3.1=py_0
|
||||
- pexpect=4.6.0=py35_0
|
||||
- pickleshare=0.7.5=py35_0
|
||||
- pip=18.0=py35_1001
|
||||
- prometheus_client=0.4.2=py_0
|
||||
- prompt_toolkit=2.0.7=py_0
|
||||
- ptyprocess=0.6.0=py35_1000
|
||||
- pygments=2.2.0=py_1
|
||||
- python=3.5.5=h5001a0f_2
|
||||
- python-dateutil=2.7.5=py_0
|
||||
- pyzmq=17.1.2=py35hae99301_0
|
||||
- readline=7.0=haf1bffa_1
|
||||
- send2trash=1.5.0=py_0
|
||||
- setuptools=40.4.3=py35_0
|
||||
- simplegeneric=0.8.1=py_1
|
||||
- six=1.11.0=py35_1
|
||||
- sqlite=3.25.3=hb1c47c0_0
|
||||
- terminado=0.8.1=py35_1
|
||||
- testpath=0.3.1=py35_1
|
||||
- tk=8.6.9=ha92aebf_0
|
||||
- tornado=5.1.1=py35h470a237_0
|
||||
- traitlets=4.3.2=py35_0
|
||||
- wcwidth=0.1.7=py_1
|
||||
- webencodings=0.5.1=py_1
|
||||
- wheel=0.32.0=py35_1000
|
||||
- widgetsnbextension=3.2.1=py35_1
|
||||
- xz=5.2.4=h470a237_1
|
||||
- zeromq=4.2.5=hfc679d8_6
|
||||
- zlib=1.2.11=h470a237_3
|
||||
- pip:
|
||||
- alembic==1.0.3
|
||||
- async-generator==1.10
|
||||
- chardet==3.0.4
|
||||
- idna==2.7
|
||||
- jupyterhub==0.9.4
|
||||
- mako==1.0.7
|
||||
- notebook==5.7.8
|
||||
- nteract-on-jupyter==1.9.6
|
||||
- pamela==0.3.0
|
||||
- python-editor==1.0.3
|
||||
- python-oauth2==1.1.0
|
||||
- requests==2.20.1
|
||||
- sqlalchemy==1.2.14
|
||||
- urllib3==1.24.1
|
||||
prefix: /opt/conda/envs/r2d
|
|
@ -0,0 +1,141 @@
|
|||
# AUTO GENERATED FROM environment.py-3.6.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2022-04-08 20:38:59 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-64
|
||||
# input_hash: a380aced865172581392c0b25b78cfde69a59becdb41fef3ade37eae6b024aed
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2021.10.8-ha878542_0.tar.bz2#575611b8a84f45960e87722eeb51fa26
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.36.1-hea4e1c9_2.tar.bz2#bd4f2e711b39af170e7ff15163fe87ee
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-11.2.0-he4da1e4_15.tar.bz2#4ffda9c4352880439042fbb8a9863e8c
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pandoc-2.17.1.1-ha770c72_0.tar.bz2#316431b0b4e25f384cfd3428a1a5dd8c
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgomp-11.2.0-h1d223b6_15.tar.bz2#5b7bff215ad9f30325dbe86dd983cb49
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-1_gnu.tar.bz2#561e277319a41d4f24f5c05a9ef63c04
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-11.2.0-h1d223b6_15.tar.bz2#8041e476e66fcde71f0aa3d614e0efcf
|
||||
https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.18.1-h7f98852_0.tar.bz2#f26ef8098fab1f719c91eb760d63381a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/icu-70.1-h27087fc_0.tar.bz2#87473a15119779e021c314249d4b4aed
|
||||
https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2#30186d27e2c9fa62b45fb1476b7200e3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2#c3788462a6fbddafdb413a9f9053e58d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libuv-1.43.0-h7f98852_0.tar.bz2#b34d856aa7e06ebd79bded72ef4afc16
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.11-h166bdaf_1014.tar.bz2#757138ba3ddc6777b82e91d9ff62e7b9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.3-h27087fc_1.tar.bz2#4acfc691e64342b9dae57cf2adc63238
|
||||
https://conda.anaconda.org/conda-forge/linux-64/openssl-1.1.1n-h166bdaf_0.tar.bz2#cf0ddbd911fa547e6bc4291ca5e17379
|
||||
https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.5-h516909a_1.tar.bz2#33f601066901f3e1a85af3522a8113f9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2#4d331e44109e3f0e19b4cb8f9b82f3e1
|
||||
https://conda.anaconda.org/conda-forge/linux-64/readline-8.1-h46c0cb4_0.tar.bz2#5788de3c8d7a7d64ac56c784c4ef48e6
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.4-h9c3ff4c_1.tar.bz2#21743a8d2ea0c8cfbbf8fe489b0347df
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.11-h166bdaf_1014.tar.bz2#def3b82d1a03aa695bb38ac1dd072ff2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/krb5-1.19.3-h3790be6_0.tar.bz2#7d862b05445123144bec92cb1acc8ef8
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.47.0-h727a467_0.tar.bz2#a22567abfea169ff8048506b1ca9b230
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.10.0-ha56f1ee_2.tar.bz2#6ab4eaa11ff01801cffca0a27489dc04
|
||||
https://conda.anaconda.org/conda-forge/linux-64/nodejs-14.18.3-h96d913c_3.tar.bz2#45c64ff49b9d353104b9a127869cd108
|
||||
https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.37.1-h4ff8645_0.tar.bz2#8057ac02d6d10a162d7eb4b0ca7ed291
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libcurl-7.82.0-h7bff187_0.tar.bz2#fa26f833ca8796ad44f9561c5402013d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python-3.6.15-hb7a2778_0_cpython.tar.bz2#2263dbd2d8116aa8dd974602faabb1a2
|
||||
https://conda.anaconda.org/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/conda-forge/noarch/attrs-21.4.0-pyhd8ed1ab_0.tar.bz2#f70280205d7044c8b8358c8de3190e5d
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-py_2.tar.bz2#0da16b293affa6ac31812376f8eb79dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/blinker-1.4-py_1.tar.bz2#fa509a09190583f869ae442bf4d17f5f
|
||||
https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-2.0.12-pyhd8ed1ab_0.tar.bz2#1f5b32dabae0f1893ae3283dac7f799e
|
||||
https://conda.anaconda.org/conda-forge/noarch/dataclasses-0.8-pyh787bdff_2.tar.bz2#ed959a4ba14e6ddfa898630a5474a601
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/conda-forge/noarch/idna-3.3-pyhd8ed1ab_0.tar.bz2#40b50b8b030f5f2f22085c062ed013dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/json5-0.9.5-pyh9f0ad1d_0.tar.bz2#10759827a94e6b14996e81fb002c0bda
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.0-pyhd8ed1ab_0.tar.bz2#e963a4a39cf442dbe5503f66edda083d
|
||||
https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.5-pyhd8ed1ab_0.tar.bz2#dc36c992aec485c0efff619ed2e63957
|
||||
https://conda.anaconda.org/conda-forge/noarch/pamela-1.0.0-py_0.tar.bz2#36f6f18d2f3ae0c93d77a9dbedad08c3
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.7.1-pyh9f0ad1d_0.tar.bz2#f66647d1ec805566d72ac26f62b19c01
|
||||
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.14.0-pyhd8ed1ab_0.tar.bz2#6996536cbb531e722a452feebff019a3
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.3.0-pyhd8ed1ab_1.tar.bz2#b7bc0de380f114658af5fe57cebdcd9e
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.7-pyhd8ed1ab_0.tar.bz2#727e2216d9c47455d8ddc060eb2caad9
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.1-pyh9f0ad1d_0.tar.bz2#aed452f2f9f8bc8b2b0c412975051b5b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.6-2_cp36m.tar.bz2#6f5b92d833a339da29ad8578c2a648ad
|
||||
https://conda.anaconda.org/conda-forge/noarch/pytz-2022.1-pyhd8ed1ab_0.tar.bz2#b87d66d6d3991d988fb31510c95a9267
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.0-pyhd8ed1ab_0.tar.bz2#edab14119efe85c3bf131ad747e9005c
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/testpath-0.6.0-pyhd8ed1ab_0.tar.bz2#196b1f0165dbc9ea6f03c3b3419323fd
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.1.1-pyha770c72_0.tar.bz2#74761ba7bc682e9009520163a1031ace
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-py_1.tar.bz2#3563be4c5611a44210d9ba0c16113136
|
||||
https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.3.1-pyhd8ed1ab_0.tar.bz2#0fa7710a18a1fa033b8337f6515c9de1
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.37.1-pyhd8ed1ab_0.tar.bz2#1ca02aaf78d9c70d9a81a3bed5752022
|
||||
https://conda.anaconda.org/conda-forge/noarch/zipp-3.6.0-pyhd8ed1ab_0.tar.bz2#855e2c4622f5eb50a4f6f7167b9ba17a
|
||||
https://conda.anaconda.org/conda-forge/noarch/babel-2.9.1-pyh44b312d_0.tar.bz2#74136ed39bfea0832d338df1e58d013e
|
||||
https://conda.anaconda.org/conda-forge/linux-64/certifi-2021.5.30-py36h5fab9bb_0.tar.bz2#500e3fb737f9d2023755f78f1f22ca69
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cffi-1.14.6-py36hd8eec40_1.tar.bz2#2e025dd15559c9882880f005e6c02018
|
||||
https://conda.anaconda.org/conda-forge/linux-64/greenlet-1.1.1-py36hc4f0c31_0.tar.bz2#e0509bd49a3747b0442ecabae4a0df1b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/importlib-metadata-4.8.1-py36h5fab9bb_0.tar.bz2#ec50a4f999b407d69b3a433c1405f0ba
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_resources-5.6.0-pyhd8ed1ab_0.tar.bz2#ffee77eddb96c584ed417d2f72670a02
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jedi-0.17.2-py36h5fab9bb_1.tar.bz2#e761c2377eafa1268eda3dd192cb06cb
|
||||
https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.0.1-py36h8f6f2f9_0.tar.bz2#e450eb239eb68d0467b1c6d0fef28ae9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/mistune-0.8.4-py36h8f6f2f9_1004.tar.bz2#a53a196c30fc83ee9f0a84711b8fa681
|
||||
https://conda.anaconda.org/conda-forge/noarch/packaging-21.3-pyhd8ed1ab_0.tar.bz2#71f1ab2de48613876becddd496371c85
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh9f0ad1d_2.tar.bz2#5909e7b978141dd80d28dbf9de627827
|
||||
https://conda.anaconda.org/conda-forge/linux-64/psutil-5.8.0-py36h8f6f2f9_1.tar.bz2#ccecd9206d61f029549a81a980174ed8
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pycurl-7.44.1-py36h66a4f8d_0.tar.bz2#ab0c8b5ebc4924b67d1ee2b1444abf0b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.17.3-py36h8f6f2f9_2.tar.bz2#26db670368942d4a144cad213448496a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pysocks-1.7.1-py36h5fab9bb_3.tar.bz2#4dfb9be0b2975bc7933f32c6db7af205
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyzmq-22.3.0-py36h7068817_0.tar.bz2#6bd5499ce1e61fde19e5ce8206569303
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.2-py36h8f6f2f9_2.tar.bz2#20b17ae368cb09dd5609203ad3eaf122
|
||||
https://conda.anaconda.org/conda-forge/linux-64/setuptools-58.0.4-py36h5fab9bb_2.tar.bz2#d584b24af029d1fc78b6a0d2cc294d40
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tornado-6.1-py36h8f6f2f9_1.tar.bz2#3d19680e14cb7cf6f383ba1fd3a72f2c
|
||||
https://conda.anaconda.org/conda-forge/noarch/traitlets-4.3.3-pyhd8ed1ab_2.tar.bz2#dacad0ee02418407a5991b0b62dfdc18
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.1.1-hd8ed1ab_0.tar.bz2#9d1b5bbaa13bca480c80893a87a52c4f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-21.1.0-py36h8f6f2f9_0.tar.bz2#c7ff3bb6bfd8cb82aefb8d960c439743
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.4-pyhd8ed1ab_0.tar.bz2#c5b3edc62d6309088f4970b3eaaa65a6
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-5.0.0-pyhd8ed1ab_0.tar.bz2#2a2ae7c56b8f72caba261363407b484a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/brotlipy-0.7.0-py36h8f6f2f9_1001.tar.bz2#0f244e9624403e17430e9d959530b01c
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cryptography-35.0.0-py36hb60f036_0.tar.bz2#d7533bed1783b4abef7e598cee93347d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/immutables-0.16-py36h8f6f2f9_0.tar.bz2#e9abd4b9cee6d7dd062ca2b5f4e4c9f3
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-3.0.3-pyhd8ed1ab_0.tar.bz2#036d872c653780cb26e797e2e2f61b4c
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.1.2-pyhd8ed1ab_0.tar.bz2#94188756716d63117f09d546a30d43e7
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-4.8.1-py36h5fab9bb_0.tar.bz2#a6fa892e9d37e4e299b426c8fdb6f1d6
|
||||
https://conda.anaconda.org/conda-forge/noarch/mako-1.2.0-pyhd8ed1ab_1.tar.bz2#df0535cc0efcc9d418940fc689b1487c
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-21.3.1-pyhd8ed1ab_0.tar.bz2#e4fe2a9af78ff11f1aced7e62128c6a8
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.11.2-pyhd8ed1ab_0.tar.bz2#caef60540e2239e27bf62569a5015e3b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.16-py36h8f6f2f9_0.tar.bz2#602e4a91b1df8519343e4a317a75fd5a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-1.4.25-py36h8f6f2f9_0.tar.bz2#fbe3f8667087f9c6dc0011df8c39f76b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/terminado-0.12.1-py36h5fab9bb_0.tar.bz2#292f1173e1c1b446dc5969444f619108
|
||||
https://conda.anaconda.org/conda-forge/noarch/alembic-1.7.7-pyhd8ed1ab_0.tar.bz2#9637550104fade18bc6f91aef1f4f02c
|
||||
https://conda.anaconda.org/conda-forge/noarch/contextvars-2.4-py_0.tar.bz2#295fe9300971a6bd1dc4b18ad6509be2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.1.2-pyhd8ed1ab_0.tar.bz2#9a332b6f8f05629435ce59032df8cfa9
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.1.2-pyh9f0ad1d_0.tar.bz2#2cbd910890bb328e8959246a1e16fac7
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-5.1.3-pyhd8ed1ab_0.tar.bz2#bafa5df6d4f8db69a4d197b4657127e7
|
||||
https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.0-pyhd8ed1ab_0.tar.bz2#ecc95c82c788737d6d33f5d564566d89
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-22.0.0-pyhd8ed1ab_0.tar.bz2#1d7e241dfaf5475e893d4b824bb71b44
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.5-pyh9f0ad1d_2.tar.bz2#5266fcd697043c59621fda522b3d78ee
|
||||
https://conda.anaconda.org/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclient-0.5.9-pyhd8ed1ab_0.tar.bz2#21554dd9bbabff27ae87f715fee4d56c
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.29-pyha770c72_0.tar.bz2#9e720b57b22ef3032b4fb081697819dd
|
||||
https://conda.anaconda.org/conda-forge/linux-64/sniffio-1.2.0-py36h5fab9bb_1.tar.bz2#43c550017bd3ffea3cbc9669617b71eb
|
||||
https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.9-pyhd8ed1ab_0.tar.bz2#0ea179ee251aa7100807c35bc0252693
|
||||
https://conda.anaconda.org/conda-forge/linux-64/anyio-3.3.2-py36h5fab9bb_0.tar.bz2#68e1135e2c76b473fc08831ba4b940c0
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ipython-7.16.1-py36he448a4c_2.tar.bz2#ac605247c1149f7b275a4bcf9fa0de41
|
||||
https://conda.anaconda.org/conda-forge/linux-64/nbconvert-6.0.7-py36h5fab9bb_3.tar.bz2#30f571d5b9a389f49b1d54a0e38871bc
|
||||
https://conda.anaconda.org/conda-forge/noarch/requests-2.27.1-pyhd8ed1ab_0.tar.bz2#7c1c427246b057b8fa97200ecdb2ed62
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ipykernel-5.5.5-py36hcb3619a_0.tar.bz2#595507013916992bbd551005bfa96bbf
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.13.2-pyhd8ed1ab_0.tar.bz2#b6771ff740526a8a04853fda74dc03f3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jupyterhub-base-1.4.2-py36h5fab9bb_0.tar.bz2#01e91ea234e632cf4ee3284a338a679d
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-resource-usage-0.6.1-pyhd8ed1ab_0.tar.bz2#a35cb988cd5b9b9b2d1c6179a8a86974
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.10.3-pyhd8ed1ab_0.tar.bz2#65d62a616bed5237b85b9e2a88378ec0
|
||||
https://conda.anaconda.org/conda-forge/linux-64/notebook-6.3.0-py36h5fab9bb_0.tar.bz2#4b075f38968b16bb1be4d17d90cf7e38
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jupyterhub-singleuser-1.4.2-py36h5fab9bb_0.tar.bz2#647d5e58896dda8405b124e4606a5314
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclassic-0.3.5-pyhd8ed1ab_0.tar.bz2#e9e2281b7dc08d876fc789af0f571ade
|
||||
https://conda.anaconda.org/conda-forge/noarch/nteract_on_jupyter-2.1.3-py_0.tar.bz2#1430ccd983ae6b161e2fbf4377965f7a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/widgetsnbextension-3.5.1-py36h5fab9bb_4.tar.bz2#6919ca2c4ddec0166a900910d54ded67
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.6.5-pyhd8ed1ab_0.tar.bz2#6f2ee1ec157104df141e2e5afeba98d4
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab-3.2.8-pyhd8ed1ab_0.tar.bz2#e2cc0671571f14af58f832c912dee025
|
|
@ -1,136 +0,0 @@
|
|||
# AUTO GENERATED FROM environment.py-3.6.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2021-02-22 12:25:15 UTC
|
||||
name: r2d
|
||||
channels:
|
||||
- conda-forge
|
||||
- defaults
|
||||
- conda-forge/label/broken
|
||||
dependencies:
|
||||
- _libgcc_mutex=0.1=conda_forge
|
||||
- _openmp_mutex=4.5=1_gnu
|
||||
- alembic=1.5.5=pyhd8ed1ab_0
|
||||
- anyio=2.1.0=py36h5fab9bb_0
|
||||
- argon2-cffi=20.1.0=py36h8f6f2f9_2
|
||||
- async_generator=1.10=py_0
|
||||
- attrs=20.3.0=pyhd3deb0d_0
|
||||
- babel=2.9.0=pyhd3deb0d_0
|
||||
- backcall=0.2.0=pyh9f0ad1d_0
|
||||
- backports=1.0=py36_1
|
||||
- backports.functools_lru_cache=1.6.1=py_0
|
||||
- bleach=3.3.0=pyh44b312d_0
|
||||
- blinker=1.4=py_1
|
||||
- brotlipy=0.7.0=py36he6145b8_1001
|
||||
- c-ares=1.17.1=h36c2ea0_0
|
||||
- ca-certificates=2020.12.5=ha878542_0
|
||||
- certifi=2020.12.5=py36h5fab9bb_1
|
||||
- certipy=0.1.3=py_0
|
||||
- cffi=1.14.5=py36hc120d54_0
|
||||
- chardet=4.0.0=py36h5fab9bb_1
|
||||
- contextvars=2.4=py_0
|
||||
- cryptography=3.4.4=py36hc39840e_0
|
||||
- dataclasses=0.7=py36_0
|
||||
- decorator=4.4.2=py_0
|
||||
- defusedxml=0.6.0=py_0
|
||||
- entrypoints=0.3=py36h9f0ad1d_1002
|
||||
- idna=2.10=pyh9f0ad1d_0
|
||||
- immutables=0.15=py36h8f6f2f9_0
|
||||
- importlib-metadata=3.4.0=py36h5fab9bb_0
|
||||
- importlib_metadata=3.4.0=hd8ed1ab_0
|
||||
- ipykernel=5.5.0=py36he448a4c_1
|
||||
- ipython=7.16.1=py36he448a4c_2
|
||||
- ipython_genutils=0.2.0=py36_0
|
||||
- ipywidgets=7.6.3=pyhd3deb0d_0
|
||||
- jedi=0.17.2=py36h9f0ad1d_1
|
||||
- jinja2=2.11.3=pyh44b312d_0
|
||||
- json5=0.9.5=pyh9f0ad1d_0
|
||||
- jsonschema=3.2.0=py36h9f0ad1d_1
|
||||
- jupyter-offlinenotebook=0.2.1=pyhd8ed1ab_0
|
||||
- jupyter-resource-usage=0.5.1=pyhd8ed1ab_0
|
||||
- jupyter_client=6.1.11=pyhd8ed1ab_1
|
||||
- jupyter_core=4.7.1=py36h5fab9bb_0
|
||||
- jupyter_server=1.4.0=py36h5fab9bb_0
|
||||
- jupyter_telemetry=0.1.0=pyhd8ed1ab_1
|
||||
- jupyterhub-base=1.3.0=py36h5fab9bb_0
|
||||
- jupyterhub-singleuser=1.3.0=py36h5fab9bb_0
|
||||
- jupyterlab=3.0.7=pyhd8ed1ab_0
|
||||
- jupyterlab_pygments=0.1.2=pyh9f0ad1d_0
|
||||
- jupyterlab_server=2.3.0=pyhd8ed1ab_0
|
||||
- jupyterlab_widgets=1.0.0=pyhd8ed1ab_1
|
||||
- krb5=1.17.2=h926e7f8_0
|
||||
- ld_impl_linux-64=2.35.1=hea4e1c9_2
|
||||
- libcurl=7.71.1=hcdd3856_8
|
||||
- libedit=3.1.20191231=he28a2e2_2
|
||||
- libev=4.33=h516909a_1
|
||||
- libffi=3.3=h58526e2_2
|
||||
- libgcc-ng=9.3.0=h2828fa1_18
|
||||
- libgomp=9.3.0=h2828fa1_18
|
||||
- libnghttp2=1.43.0=h812cca2_0
|
||||
- libsodium=1.0.18=h516909a_1
|
||||
- libssh2=1.9.0=hab1572f_5
|
||||
- libstdcxx-ng=9.3.0=h6de172a_18
|
||||
- mako=1.1.4=pyh44b312d_0
|
||||
- markupsafe=1.1.1=py36h8f6f2f9_3
|
||||
- mistune=0.8.4=py36h8f6f2f9_1003
|
||||
- nbclassic=0.2.6=pyhd8ed1ab_0
|
||||
- nbclient=0.5.2=pyhd8ed1ab_0
|
||||
- nbconvert=6.0.7=py36h5fab9bb_3
|
||||
- nbformat=5.1.2=pyhd8ed1ab_1
|
||||
- ncurses=6.2=h58526e2_4
|
||||
- nest-asyncio=1.4.3=pyhd8ed1ab_0
|
||||
- notebook=6.2.0=py36h5fab9bb_0
|
||||
- nteract_on_jupyter=2.1.3=py_0
|
||||
- oauthlib=3.0.1=py_0
|
||||
- openssl=1.1.1j=h7f98852_0
|
||||
- packaging=20.9=pyh44b312d_0
|
||||
- pamela=1.0.0=py_0
|
||||
- pandoc=2.11.4=h7f98852_0
|
||||
- pandocfilters=1.4.2=py36_0
|
||||
- parso=0.7.1=pyh9f0ad1d_0
|
||||
- pexpect=4.8.0=py36h9f0ad1d_1
|
||||
- pickleshare=0.7.5=py36h9f0ad1d_1002
|
||||
- pip=21.0.1=pyhd8ed1ab_0
|
||||
- prometheus_client=0.9.0=pyhd3deb0d_0
|
||||
- prompt-toolkit=3.0.16=pyha770c72_0
|
||||
- psutil=5.8.0=py36h8f6f2f9_1
|
||||
- ptyprocess=0.7.0=pyhd3deb0d_0
|
||||
- pycparser=2.20=pyh9f0ad1d_2
|
||||
- pycurl=7.43.0.6=py36h66a4f8d_1
|
||||
- pygments=2.8.0=pyhd8ed1ab_0
|
||||
- pyjwt=2.0.1=pyhd8ed1ab_0
|
||||
- pyopenssl=20.0.1=pyhd8ed1ab_0
|
||||
- pyparsing=2.4.7=pyh9f0ad1d_0
|
||||
- pyrsistent=0.17.3=py36h8f6f2f9_2
|
||||
- pysocks=1.7.1=py36h5fab9bb_3
|
||||
- python=3.6.13=hffdb5ce_0_cpython
|
||||
- python-dateutil=2.8.1=py_0
|
||||
- python-editor=1.0.4=py_0
|
||||
- python-json-logger=2.0.1=pyh9f0ad1d_0
|
||||
- python_abi=3.6=1_cp36m
|
||||
- pytz=2021.1=pyhd8ed1ab_0
|
||||
- pyzmq=22.0.3=py36h81c33ee_0
|
||||
- readline=8.0=he28a2e2_2
|
||||
- requests=2.25.1=pyhd3deb0d_0
|
||||
- ruamel.yaml=0.16.12=py36h8f6f2f9_2
|
||||
- ruamel.yaml.clib=0.2.2=py36h8f6f2f9_2
|
||||
- send2trash=1.5.0=py_0
|
||||
- setuptools=49.6.0=py36h5fab9bb_3
|
||||
- six=1.15.0=pyh9f0ad1d_0
|
||||
- sniffio=1.2.0=py36h5fab9bb_1
|
||||
- sqlalchemy=1.3.23=py36h8f6f2f9_0
|
||||
- sqlite=3.34.0=h74cdb3f_0
|
||||
- terminado=0.9.2=py36h5fab9bb_0
|
||||
- testpath=0.4.4=py_0
|
||||
- tk=8.6.10=hed695b0_1
|
||||
- tornado=6.1=py36h8f6f2f9_1
|
||||
- traitlets=4.3.3=py36h9f0ad1d_1
|
||||
- typing_extensions=3.7.4.3=py_0
|
||||
- urllib3=1.26.3=pyhd8ed1ab_0
|
||||
- wcwidth=0.2.5=pyh9f0ad1d_2
|
||||
- webencodings=0.5.1=py_1
|
||||
- wheel=0.36.2=pyhd3deb0d_0
|
||||
- widgetsnbextension=3.5.1=py36h9f0ad1d_4
|
||||
- xz=5.2.5=h516909a_1
|
||||
- zeromq=4.3.4=h9c3ff4c_0
|
||||
- zipp=3.4.0=py_0
|
||||
- zlib=1.2.11=h516909a_1010
|
||||
prefix: /opt/conda/envs/r2d
|
|
@ -1,12 +1,2 @@
|
|||
# AUTO GENERATED FROM environment.yml, DO NOT MANUALLY MODIFY
|
||||
# Generated on 2021-02-22 12:25:15 UTC
|
||||
dependencies:
|
||||
- python=3.6.*
|
||||
- ipywidgets==7.6.3
|
||||
- jupyter-offlinenotebook==0.2.1
|
||||
- jupyter-resource-usage==0.5.1
|
||||
- jupyterlab==3.0.7
|
||||
- jupyterhub-singleuser==1.3.0
|
||||
- nbconvert==6.0.7
|
||||
- notebook==6.2.0
|
||||
- nteract_on_jupyter==2.1.3
|
||||
# py3.6 is not being auto-generated from this file anymore
|
||||
# update environment.py-3.6.frozen.yml directly
|
|
@ -0,0 +1,164 @@
|
|||
# AUTO GENERATED FROM environment.py-3.7.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2023-10-14 22:04:48 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-64
|
||||
# input_hash: 5915c99fbcf718ecb070006efbc921e7cbe0a9732a6187bb88b2c177f7e82f8d
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda#9172c297304f2a20134fc56c97fbe229
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.7-4_cp37m.conda#d5fa71a1bac31ad985348ffff6b399c4
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_2.conda#e2042154faafe61969556f28bade94b9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.conda#c28003b0be0494f9a7664389146716ff
|
||||
https://conda.anaconda.org/conda-forge/linux-64/gmp-6.2.1-h58526e2_0.tar.bz2#b94cf2db16066b242ebd26db2facbd56
|
||||
https://conda.anaconda.org/conda-forge/linux-64/icu-72.1-hcb278e6_0.conda#7c8d20d847bb45f56bd941578fcfa146
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2#c3788462a6fbddafdb413a9f9053e58d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda#d23c76f7e6dcd6243d1b6ef5e62d17d2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179
|
||||
https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.3-hd590300_0.conda#7bb88ce04c8deb9f7d763ae04a1da72f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161070d867d1b1204ea749c8eec4ef0
|
||||
https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2#4cb3ad778ec2d5a7acbdf254eb1c42ae
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.2-h2797004_0.conda#4b441a1ee22397d5a27dc1126b849edd
|
||||
https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_0.conda#8851084c192dbc56215ac4e3c9aa30fa
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209
|
||||
https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.17.1-hf52ce11_0.conda#c3aad73875296ca9ad3954aa606536b9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.3-h32600fe_0.conda#8287aeb8462e2d4b235eff788e75919d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.2-h2c6b66d_0.conda#c37b95bcd6c6833dacfd5df0ae2f4303
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python-3.7.12-hf930737_100_cpython.tar.bz2#416558a6f46b7a1fa8db7d0e98aff56a
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiofiles-22.1.0-pyhd8ed1ab_0.tar.bz2#a88c206fdb78e34adb1c4081f5f838dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02
|
||||
https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.3-pyhd8ed1ab_0.conda#d33cf7357de636cec64320f0c4fb7b6f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.0.9-py37hd23a5d3_7.tar.bz2#f330e49790eb1af580c0d710e63c8cb0
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a
|
||||
https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22
|
||||
https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1ab_0.conda#fef8ef5f0a54546b9efee39468229917
|
||||
https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.6.3-py37hd23a5d3_0.tar.bz2#004724940367fa84ec1d0732c8b27c18
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/greenlet-1.1.3-py37hd23a5d3_0.tar.bz2#426c53c95df106039da865c0095e2a65
|
||||
https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda#dac1dabba2b5a9d1aee175c5fcc7b436
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonpointer-2.0-py_0.tar.bz2#07d85c22a3beb102a48cd123df84c2a6
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda#8370e0a9dc443f9b45a23fd30e7a6b3b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.1-py37h540881e_1.tar.bz2#a9123517674ab0589d955a5adbf58573
|
||||
https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda#1dad8397c94e4de97a70de552a7dcf49
|
||||
https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda#a4f0e4519bc50eee4f53f689be9607f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6
|
||||
https://conda.anaconda.org/conda-forge/noarch/pamela-1.1.0-pyh1a96a4e_0.conda#dce93ccf07159017c69c6d9cea2d5d61
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094
|
||||
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda#02153b6b760bbec00cfe9e4c97993d06
|
||||
https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.3-py37h540881e_0.tar.bz2#0c813ad118e926df328bf74899a48047
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_0.conda#912c0194f898fdb783021fd25f913c31
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.18.1-py37h540881e_1.tar.bz2#8e25160800dafbc2a24c0aaa99a981ef
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pysocks-1.7.1-py37h89c1867_5.tar.bz2#8c4b0563f96363ee99f1ab864616ac63
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda#305141cff54af2f90e089d868fffce28
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960
|
||||
https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py37h540881e_4.tar.bz2#f231119f9790da6da6bd93b250b7e42e
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyzmq-24.0.1-py37h0c0c2a8_0.tar.bz2#732c98a38c84984262940c868793ebb4
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2#912a71cc01012ee38e6b90ddd561e36f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.6-py37h540881e_1.tar.bz2#f3c703ac09e7810d6c9baec89e901fb5
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2
|
||||
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2#dd6cbc539e74cb1f430efbd4575b9303
|
||||
https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.3.2.post1-pyhd8ed1ab_0.tar.bz2#146f4541d643d48fc8a75cacf69f03ae
|
||||
https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tornado-6.2-py37h540881e_0.tar.bz2#2f0863ba6b29d1d2872b064dd697a492
|
||||
https://conda.anaconda.org/conda-forge/noarch/traitlets-5.9.0-pyhd8ed1ab_0.conda#d0b4f5c87cd35ac3fb3d47b223263a64
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115
|
||||
https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda#0944dc65cb4a9b5b68522c3bb585d41c
|
||||
https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.1-pyhd8ed1ab_0.conda#c34d9325a609381a0b0e8a5b4f325147
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f
|
||||
https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda#82617d07b2f5f5a96296d3c19684b37a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/y-py-0.5.4-py37hbd0741f_0.tar.bz2#ecadea26afe1035c2be1f159fdd22b4c
|
||||
https://conda.anaconda.org/conda-forge/noarch/zipp-3.15.0-pyhd8ed1ab_0.conda#13018819ca8f5b7cc675a8faf1f5fedf
|
||||
https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49
|
||||
https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda#6b1b907661838a75d067a22f87996b2e
|
||||
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py37h43b0acd_1.tar.bz2#5111b64bdfdd72d85086ec49c952fe0d
|
||||
https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda#c8eaca39e2b6abae1fc96acc929ae939
|
||||
https://conda.anaconda.org/conda-forge/linux-64/importlib-metadata-4.11.4-py37h89c1867_0.tar.bz2#71107630527e4bd82932952351231efe
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.0.0-pyhd8ed1ab_0.conda#acf36c4210f71dbf45a83409a9b5ff4d
|
||||
https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-4.11.1-py37h89c1867_0.tar.bz2#6d184401b7a49bbebbfedc96bc7add1c
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40
|
||||
https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2#fed45fc5ea0813240707998abe49f520
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.21-py37h540881e_1.tar.bz2#6232de79d3fe4aaa00f5f34d3da55c2a
|
||||
https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda#3788984d535770cad699efaeb6cb3037
|
||||
https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2
|
||||
https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8
|
||||
https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py37h540881e_2.tar.bz2#ff22fac37e988bed992b1f437e05906a
|
||||
https://conda.anaconda.org/conda-forge/noarch/arrow-1.2.3-pyhd8ed1ab_0.tar.bz2#fd1967c76eda3a3dd9e8e6cb7a15a028
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cryptography-38.0.2-py37h5994e8b_1.tar.bz2#5a8bb0074be9d20d456957f92b72beed
|
||||
https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2#642d35437078749ef23a5dca2c9bb1f3
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-4.11.4-hd8ed1ab_0.tar.bz2#9a1925fdb91c81437b8012e48ede6851
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda#723268a468177cd44568eb8f794e0d80
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.4.9-pyhd8ed1ab_0.conda#5cbf9a31a19d4ef9103adb7d71fd45fd
|
||||
https://conda.anaconda.org/conda-forge/noarch/mako-1.2.4-pyhd8ed1ab_0.tar.bz2#0d072f0edc017b6318dbab701e053f94
|
||||
https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-1.4.42-py37h540881e_0.tar.bz2#921bb310665fba1ed0f64f3287fda6d4
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda#367386d2575a0e62412448eda1012efd
|
||||
https://conda.anaconda.org/conda-forge/noarch/alembic-1.12.0-pyhd8ed1ab_0.conda#ba29026b587195548ef82444518061f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4
|
||||
https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2#4cb68948e0b8429534380243d063a27a
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-0.2.4-pyhd8ed1ab_0.conda#be5d4633c1cc40343ed417153a184006
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-5.8.0-pyhd8ed1ab_0.conda#1ca43103a08456b19222d93fd9d119ac
|
||||
https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda#a4986c6bb5b0d05a38855b0880a5f425
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda#34f7d568bf59d18e3fef8c405cbece21
|
||||
https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.2-pyhd8ed1ab_0.conda#5ee5ad3af20138020065985de57f0711
|
||||
https://conda.anaconda.org/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ipython-7.33.0-py37h89c1867_0.tar.bz2#e4841787deb237aad17b2d44a2d32c23
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.17.3-pyhd8ed1ab_0.conda#7a709748e93f0b2c33d6b5b676b6d9d0
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.0-pyhd8ed1ab_0.tar.bz2#87eed34d791330d8acdab6a8ab63113f
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.16.2-pyh210e3f2_0.tar.bz2#6b0f40821b784cac8a33d0c5eb7602c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.1-pyhd8ed1ab_0.conda#2605fae5ee27100e5f10037baebf4d41
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.6.3-pyhd8ed1ab_1.conda#2ac0d00a0fb3f1a4c81c460ba56bb23b
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-base-3.1.1-pyh2a2186d_0.conda#78fc5dfd4577a7ba172fa65eb64b6afb
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.6.0-pyhd8ed1ab_0.conda#879782bde4bbdb4c7b5d4054504a20d5
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.23.4-pyhd8ed1ab_0.conda#35b7e9267926e864cc70ce137e6588ca
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.6.0-pyhd8ed1ab_0.conda#e8172ca42f2869bb90185c9356899e81
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-resource-usage-0.7.1-pyhd8ed1ab_0.conda#62ed54dc748d19d0cf056a3f90cc8f12
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.0-pyhd8ed1ab_0.conda#a12525b037a703d7f4512da737d700e6
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.24.0-pyhd8ed1ab_0.conda#327bfe1c99154f02259d29810bd70afc
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.6.0-pyhd8ed1ab_0.conda#59976ee8df1c6f82c4aa94b5fd6b745e
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda#67e0fe74c156267d9159e9133df7fd37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_ydoc-0.8.0-pyhd8ed1ab_0.conda#780280d42fbcb2eaf654a6ba7a3e5bb5
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda#a0be31e9bd84d6eae87cdbf74c56b90b
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda#2e2422cf19f555ef3ddbbeaf2eac7545
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab-3.6.6-pyhd8ed1ab_0.conda#05def61d4c64b0f3161eaeb3b00cc790
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-singleuser-3.1.1-pyh2a2186d_0.conda#6d0a3394efe9ff7c0ad1ed03a6ca3720
|
|
@ -0,0 +1,140 @@
|
|||
# AUTO GENERATED FROM environment.py-3.7.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2023-10-14 22:04:58 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-aarch64
|
||||
# input_hash: dbbb799e59a9a09834913b32ecbf9d5b9a8a7852a87bd853f5ffc46324611d8d
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2023.7.22-hcefe29a_0.conda#95d7f998087114466fa91e7c2887fa2f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.40-h2d8c526_0.conda#16246d69e945d0b1969a6099e7c5d457
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-13.2.0-hf8544c7_2.conda#8ce66e4e1d30f0936a525127eaaaf63d
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-13.2.0-h9a76618_2.conda#921c652898c8602bf2697d015f3efc77
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pandoc-3.1.3-h8af1aa0_0.conda#10b7f903dadbf1568c17e2c6cb39435b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.7-4_cp37m.conda#ce67e6797b16d7211327cb9d8cc88786
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2#6168d71addc746e8f2b8d57dfd2edcea
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-13.2.0-hf8544c7_2.conda#f4dfb3bad7c8b38c3f8ed7f15a91a1ed
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/icu-72.1-hcf00150_0.conda#cd394213b2f8c9c9060a293a8508fe84
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2#dddd85f4d52121fab0a8b099c5e06501
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.0-h31becfc_1.conda#b281ae3b462ef954fac3c06cc2cc92d5
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.18-hb9de7d4_1.tar.bz2#d09ab3c60eebb6f14eb4d07e172775cc
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.44.2-h31becfc_1.conda#f6068b95c0a3b4fd949a91341e9a0669
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.2.13-h31becfc_5.conda#b213aa87eea9491ef7b129179322e955
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.4-h2e1726e_0.conda#40beaf447150c2760affc591c7509595
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.1.3-h31becfc_0.conda#19469b6fdd72c1ffe022d9845fbb85fa
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2#83baad393a31d59c20b63ba4da6592df
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.43.2-h194ca79_0.conda#16417bba0efbcb7539b942a611cc899a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda#105eb1e16bf83bfb2eb380a48032b655
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda#f75105e0585851f818e0009dd1dde4dc
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-h2f0025b_0.conda#88905c542167163a0dea6bdad01c3366
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.2.13-h31becfc_5.conda#96866c7301479abaf8308c50958c71a4
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-18.17.1-hcb20a51_0.conda#0611c05ba14e36fd4e19188d1708e393
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/sqlite-3.43.2-h3b3482f_0.conda#9340c895bb8a07ffb056e1742a8c746b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.7.12-h47f6e27_100_cpython.tar.bz2#d7b2c7500aa702c992c285854bef95a7
|
||||
https://conda.anaconda.org/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02
|
||||
https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.3-pyhd8ed1ab_0.conda#d33cf7357de636cec64320f0c4fb7b6f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.0.9-py37hb20f0a7_7.tar.bz2#b93248c9b12cd6e57f998c6136c34a75
|
||||
https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22
|
||||
https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1ab_0.conda#fef8ef5f0a54546b9efee39468229917
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/debugpy-1.6.3-py37hb20f0a7_0.tar.bz2#7ab6a7bf4ff4be82cc461e64e53f0afa
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/greenlet-1.1.3-py37hb20f0a7_0.tar.bz2#733269b6446567b6eedfa846ddd752b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda#dac1dabba2b5a9d1aee175c5fcc7b436
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda#8370e0a9dc443f9b45a23fd30e7a6b3b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-2.1.1-py37heeccf27_1.tar.bz2#8dfd7c3bbc19e52706265c8986411b7f
|
||||
https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda#1dad8397c94e4de97a70de552a7dcf49
|
||||
https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda#a4f0e4519bc50eee4f53f689be9607f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6
|
||||
https://conda.anaconda.org/conda-forge/noarch/pamela-1.1.0-pyh1a96a4e_0.conda#dce93ccf07159017c69c6d9cea2d5d61
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094
|
||||
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda#02153b6b760bbec00cfe9e4c97993d06
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/psutil-5.9.3-py37h795501a_0.tar.bz2#4fd90f8ee043a535f1effd3b2260d46c
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_0.conda#912c0194f898fdb783021fd25f913c31
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pyrsistent-0.18.1-py37heeccf27_1.tar.bz2#604a4c0f1fa79c503cc56d85b0e4af30
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pysocks-1.7.1-py37hd9ded2f_5.tar.bz2#83a3d8c5b531c55e9241adc3d4e23373
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda#305141cff54af2f90e089d868fffce28
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960
|
||||
https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-24.0.1-py37h7cb28e0_0.tar.bz2#97e6c8c18201d08a2eb5f87ce28cb55e
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ruamel.yaml.clib-0.2.6-py37h795501a_1.tar.bz2#65038418d32470b70045205dd1bd7579
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2
|
||||
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2#dd6cbc539e74cb1f430efbd4575b9303
|
||||
https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.3.2.post1-pyhd8ed1ab_0.tar.bz2#146f4541d643d48fc8a75cacf69f03ae
|
||||
https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.2-py37heeccf27_0.tar.bz2#e87e4ac6adb1b6564b5910ddb967401b
|
||||
https://conda.anaconda.org/conda-forge/noarch/traitlets-5.9.0-pyhd8ed1ab_0.conda#d0b4f5c87cd35ac3fb3d47b223263a64
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.1-pyhd8ed1ab_0.conda#c34d9325a609381a0b0e8a5b4f325147
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f
|
||||
https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda#82617d07b2f5f5a96296d3c19684b37a
|
||||
https://conda.anaconda.org/conda-forge/noarch/zipp-3.15.0-pyhd8ed1ab_0.conda#13018819ca8f5b7cc675a8faf1f5fedf
|
||||
https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49
|
||||
https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda#6b1b907661838a75d067a22f87996b2e
|
||||
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.15.1-py37h828e148_1.tar.bz2#50a7437124b0618862af25f390dc259f
|
||||
https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda#c8eaca39e2b6abae1fc96acc929ae939
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/importlib-metadata-4.11.4-py37hd9ded2f_0.tar.bz2#0f8204faf4756a6f66a609a51992dec0
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.0.0-pyhd8ed1ab_0.conda#acf36c4210f71dbf45a83409a9b5ff4d
|
||||
https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/jupyter_core-4.11.1-py37hfd236b0_0.tar.bz2#7d39f788ccc3fb1cc4f099122cb6a9ca
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40
|
||||
https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ruamel.yaml-0.17.21-py37h795501a_1.tar.bz2#4305d41999e35a9df06ecfa6de115bb2
|
||||
https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda#3788984d535770cad699efaeb6cb3037
|
||||
https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2
|
||||
https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/argon2-cffi-bindings-21.2.0-py37h795501a_2.tar.bz2#5459021da3ad7999d88a32dc52e2b03f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-38.0.2-py37h1c39eab_1.tar.bz2#329fe90bd5b7d02ef4d589c641115877
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda#723268a468177cd44568eb8f794e0d80
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.4.9-pyhd8ed1ab_0.conda#5cbf9a31a19d4ef9103adb7d71fd45fd
|
||||
https://conda.anaconda.org/conda-forge/noarch/mako-1.2.4-pyhd8ed1ab_0.tar.bz2#0d072f0edc017b6318dbab701e053f94
|
||||
https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-1.4.42-py37heeccf27_0.tar.bz2#153e4f63748586a2e7af033e39e398cd
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda#367386d2575a0e62412448eda1012efd
|
||||
https://conda.anaconda.org/conda-forge/noarch/alembic-1.12.0-pyhd8ed1ab_0.conda#ba29026b587195548ef82444518061f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-5.8.0-pyhd8ed1ab_0.conda#1ca43103a08456b19222d93fd9d119ac
|
||||
https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda#a4986c6bb5b0d05a38855b0880a5f425
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda#34f7d568bf59d18e3fef8c405cbece21
|
||||
https://conda.anaconda.org/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ipython-7.33.0-py37hd9ded2f_0.tar.bz2#9926f80d249c9e4b8c0bb4315cae9caa
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.0-pyhd8ed1ab_0.tar.bz2#87eed34d791330d8acdab6a8ab63113f
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.16.2-pyh210e3f2_0.tar.bz2#6b0f40821b784cac8a33d0c5eb7602c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.1-pyhd8ed1ab_0.conda#2605fae5ee27100e5f10037baebf4d41
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-base-3.1.1-pyh2a2186d_0.conda#78fc5dfd4577a7ba172fa65eb64b6afb
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.6.0-pyhd8ed1ab_0.conda#879782bde4bbdb4c7b5d4054504a20d5
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.23.4-pyhd8ed1ab_0.conda#35b7e9267926e864cc70ce137e6588ca
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.6.0-pyhd8ed1ab_0.conda#e8172ca42f2869bb90185c9356899e81
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-resource-usage-0.7.1-pyhd8ed1ab_0.conda#62ed54dc748d19d0cf056a3f90cc8f12
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.24.0-pyhd8ed1ab_0.conda#327bfe1c99154f02259d29810bd70afc
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.6.0-pyhd8ed1ab_0.conda#59976ee8df1c6f82c4aa94b5fd6b745e
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda#67e0fe74c156267d9159e9133df7fd37
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda#a0be31e9bd84d6eae87cdbf74c56b90b
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda#2e2422cf19f555ef3ddbbeaf2eac7545
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab-3.5.3-pyhd8ed1ab_0.conda#69f71bc3d176b3ad3d9564a32bd049b8
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-singleuser-3.1.1-pyh2a2186d_0.conda#6d0a3394efe9ff7c0ad1ed03a6ca3720
|
|
@ -1,133 +0,0 @@
|
|||
# AUTO GENERATED FROM environment.py-3.7.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2021-02-22 12:26:46 UTC
|
||||
name: r2d
|
||||
channels:
|
||||
- conda-forge
|
||||
- defaults
|
||||
- conda-forge/label/broken
|
||||
dependencies:
|
||||
- _libgcc_mutex=0.1=conda_forge
|
||||
- _openmp_mutex=4.5=1_gnu
|
||||
- alembic=1.5.5=pyhd8ed1ab_0
|
||||
- anyio=2.1.0=py37h89c1867_0
|
||||
- argon2-cffi=20.1.0=py37h8f50634_2
|
||||
- async_generator=1.10=py_0
|
||||
- attrs=20.3.0=pyhd3deb0d_0
|
||||
- babel=2.9.0=pyhd3deb0d_0
|
||||
- backcall=0.2.0=pyh9f0ad1d_0
|
||||
- backports=1.0=py_2
|
||||
- backports.functools_lru_cache=1.6.1=py_0
|
||||
- bleach=3.3.0=pyh44b312d_0
|
||||
- blinker=1.4=py_1
|
||||
- brotlipy=0.7.0=py37hb5d75c8_1001
|
||||
- c-ares=1.17.1=h36c2ea0_0
|
||||
- ca-certificates=2020.12.5=ha878542_0
|
||||
- certifi=2020.12.5=py37h89c1867_1
|
||||
- certipy=0.1.3=py_0
|
||||
- cffi=1.14.5=py37hc58025e_0
|
||||
- chardet=4.0.0=py37h89c1867_1
|
||||
- cryptography=3.4.4=py37hf1a17b8_0
|
||||
- decorator=4.4.2=py_0
|
||||
- defusedxml=0.6.0=py_0
|
||||
- entrypoints=0.3=py37hc8dfbb8_1002
|
||||
- idna=2.10=pyh9f0ad1d_0
|
||||
- importlib-metadata=3.4.0=py37h89c1867_0
|
||||
- importlib_metadata=3.4.0=hd8ed1ab_0
|
||||
- ipykernel=5.5.0=py37h888b3d9_1
|
||||
- ipython=7.20.0=py37h888b3d9_2
|
||||
- ipython_genutils=0.2.0=py_1
|
||||
- ipywidgets=7.6.3=pyhd3deb0d_0
|
||||
- jedi=0.18.0=py37h89c1867_2
|
||||
- jinja2=2.11.3=pyh44b312d_0
|
||||
- json5=0.9.5=pyh9f0ad1d_0
|
||||
- jsonschema=3.2.0=py37hc8dfbb8_1
|
||||
- jupyter-offlinenotebook=0.2.1=pyhd8ed1ab_0
|
||||
- jupyter-resource-usage=0.5.1=pyhd8ed1ab_0
|
||||
- jupyter_client=6.1.11=pyhd8ed1ab_1
|
||||
- jupyter_core=4.7.1=py37h89c1867_0
|
||||
- jupyter_server=1.4.0=py37h89c1867_0
|
||||
- jupyter_telemetry=0.1.0=pyhd8ed1ab_1
|
||||
- jupyterhub-base=1.3.0=py37h89c1867_0
|
||||
- jupyterhub-singleuser=1.3.0=py37h89c1867_0
|
||||
- jupyterlab=3.0.7=pyhd8ed1ab_0
|
||||
- jupyterlab_pygments=0.1.2=pyh9f0ad1d_0
|
||||
- jupyterlab_server=2.3.0=pyhd8ed1ab_0
|
||||
- jupyterlab_widgets=1.0.0=pyhd8ed1ab_1
|
||||
- krb5=1.17.2=h926e7f8_0
|
||||
- ld_impl_linux-64=2.35.1=hea4e1c9_2
|
||||
- libcurl=7.71.1=hcdd3856_8
|
||||
- libedit=3.1.20191231=he28a2e2_2
|
||||
- libev=4.33=h516909a_1
|
||||
- libffi=3.3=h58526e2_2
|
||||
- libgcc-ng=9.3.0=h2828fa1_18
|
||||
- libgomp=9.3.0=h2828fa1_18
|
||||
- libnghttp2=1.43.0=h812cca2_0
|
||||
- libsodium=1.0.18=h516909a_1
|
||||
- libssh2=1.9.0=hab1572f_5
|
||||
- libstdcxx-ng=9.3.0=h6de172a_18
|
||||
- mako=1.1.4=pyh44b312d_0
|
||||
- markupsafe=1.1.1=py37h5e8e339_3
|
||||
- mistune=0.8.4=py37h5e8e339_1003
|
||||
- nbclassic=0.2.6=pyhd8ed1ab_0
|
||||
- nbclient=0.5.2=pyhd8ed1ab_0
|
||||
- nbconvert=6.0.7=py37h89c1867_3
|
||||
- nbformat=5.1.2=pyhd8ed1ab_1
|
||||
- ncurses=6.2=h58526e2_4
|
||||
- nest-asyncio=1.4.3=pyhd8ed1ab_0
|
||||
- notebook=6.2.0=py37h89c1867_0
|
||||
- nteract_on_jupyter=2.1.3=py_0
|
||||
- oauthlib=3.0.1=py_0
|
||||
- openssl=1.1.1j=h7f98852_0
|
||||
- packaging=20.9=pyh44b312d_0
|
||||
- pamela=1.0.0=py_0
|
||||
- pandoc=2.11.4=h7f98852_0
|
||||
- pandocfilters=1.4.2=py_1
|
||||
- parso=0.8.1=pyhd8ed1ab_0
|
||||
- pexpect=4.8.0=py37hc8dfbb8_1
|
||||
- pickleshare=0.7.5=py37hc8dfbb8_1002
|
||||
- pip=21.0.1=pyhd8ed1ab_0
|
||||
- prometheus_client=0.9.0=pyhd3deb0d_0
|
||||
- prompt-toolkit=3.0.16=pyha770c72_0
|
||||
- psutil=5.8.0=py37h5e8e339_1
|
||||
- ptyprocess=0.7.0=pyhd3deb0d_0
|
||||
- pycparser=2.20=pyh9f0ad1d_2
|
||||
- pycurl=7.43.0.6=py37h88a64d2_1
|
||||
- pygments=2.8.0=pyhd8ed1ab_0
|
||||
- pyjwt=2.0.1=pyhd8ed1ab_0
|
||||
- pyopenssl=20.0.1=pyhd8ed1ab_0
|
||||
- pyparsing=2.4.7=pyh9f0ad1d_0
|
||||
- pyrsistent=0.17.3=py37h5e8e339_2
|
||||
- pysocks=1.7.1=py37h89c1867_3
|
||||
- python=3.7.10=hffdb5ce_100_cpython
|
||||
- python-dateutil=2.8.1=py_0
|
||||
- python-editor=1.0.4=py_0
|
||||
- python-json-logger=2.0.1=pyh9f0ad1d_0
|
||||
- python_abi=3.7=1_cp37m
|
||||
- pytz=2021.1=pyhd8ed1ab_0
|
||||
- pyzmq=22.0.3=py37h499b945_0
|
||||
- readline=8.0=he28a2e2_2
|
||||
- requests=2.25.1=pyhd3deb0d_0
|
||||
- ruamel.yaml=0.16.12=py37h5e8e339_2
|
||||
- ruamel.yaml.clib=0.2.2=py37h5e8e339_2
|
||||
- send2trash=1.5.0=py_0
|
||||
- setuptools=49.6.0=py37h89c1867_3
|
||||
- six=1.15.0=pyh9f0ad1d_0
|
||||
- sniffio=1.2.0=py37h89c1867_1
|
||||
- sqlalchemy=1.3.23=py37h5e8e339_0
|
||||
- sqlite=3.34.0=h74cdb3f_0
|
||||
- terminado=0.9.2=py37h89c1867_0
|
||||
- testpath=0.4.4=py_0
|
||||
- tk=8.6.10=hed695b0_1
|
||||
- tornado=6.1=py37h5e8e339_1
|
||||
- traitlets=5.0.5=py_0
|
||||
- typing_extensions=3.7.4.3=py_0
|
||||
- urllib3=1.26.3=pyhd8ed1ab_0
|
||||
- wcwidth=0.2.5=pyh9f0ad1d_2
|
||||
- webencodings=0.5.1=py_1
|
||||
- wheel=0.36.2=pyhd3deb0d_0
|
||||
- widgetsnbextension=3.5.1=py37hc8dfbb8_4
|
||||
- xz=5.2.5=h516909a_1
|
||||
- zeromq=4.3.4=h9c3ff4c_0
|
||||
- zipp=3.4.0=py_0
|
||||
- zlib=1.2.11=h516909a_1010
|
||||
prefix: /opt/conda/envs/r2d
|
|
@ -1,12 +1,15 @@
|
|||
# AUTO GENERATED FROM environment.yml, DO NOT MANUALLY MODIFY
|
||||
# Generated on 2021-02-22 12:26:46 UTC
|
||||
# Generated on 2023-10-14 22:04:48 UTC
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- python=3.7.*
|
||||
- ipywidgets==7.6.3
|
||||
- jupyter-offlinenotebook==0.2.1
|
||||
- jupyter-resource-usage==0.5.1
|
||||
- jupyterlab==3.0.7
|
||||
- jupyterhub-singleuser==1.3.0
|
||||
- nbconvert==6.0.7
|
||||
- notebook==6.2.0
|
||||
- nteract_on_jupyter==2.1.3
|
||||
- nodejs=18
|
||||
- pip
|
||||
- ipywidgets==8.* # https://github.com/jupyter-widgets/ipywidgets
|
||||
- jupyter-offlinenotebook==0.2.* # https://github.com/manics/jupyter-offlinenotebook
|
||||
- jupyter-resource-usage==0.7.* # https://github.com/jupyter-server/jupyter-resource-usage
|
||||
- jupyter_server==1.* # https://github.com/jupyter-server/jupyter_server
|
||||
- jupyterhub-singleuser==3.* # https://github.com/jupyterhub/jupyterhub
|
||||
- jupyterlab==3.* # https://github.com/jupyterlab/jupyterlab
|
||||
- notebook==6.* # https://github.com/jupyter/notebook
|
||||
|
|
|
@ -0,0 +1,174 @@
|
|||
# AUTO GENERATED FROM environment.py-3.8.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2023-10-14 22:05:18 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-64
|
||||
# input_hash: 06bcc16f99337eabba948f7b565f8f19943cd96f5d3c068090a296c29c047ba9
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda#9172c297304f2a20134fc56c97fbe229
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.8-4_cp38.conda#ea6b353536f42246cd130c7fef1285cf
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_2.conda#e2042154faafe61969556f28bade94b9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.conda#c28003b0be0494f9a7664389146716ff
|
||||
https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54
|
||||
https://conda.anaconda.org/conda-forge/linux-64/gmp-6.2.1-h58526e2_0.tar.bz2#b94cf2db16066b242ebd26db2facbd56
|
||||
https://conda.anaconda.org/conda-forge/linux-64/icu-72.1-hcb278e6_0.conda#7c8d20d847bb45f56bd941578fcfa146
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2#c3788462a6fbddafdb413a9f9053e58d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda#d23c76f7e6dcd6243d1b6ef5e62d17d2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179
|
||||
https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.3-hd590300_0.conda#7bb88ce04c8deb9f7d763ae04a1da72f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161070d867d1b1204ea749c8eec4ef0
|
||||
https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2#4cb3ad778ec2d5a7acbdf254eb1c42ae
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.2-h2797004_0.conda#4b441a1ee22397d5a27dc1126b849edd
|
||||
https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_0.conda#8851084c192dbc56215ac4e3c9aa30fa
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209
|
||||
https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.17.1-hf52ce11_0.conda#c3aad73875296ca9ad3954aa606536b9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.3-h32600fe_0.conda#8287aeb8462e2d4b235eff788e75919d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python-3.8.18-hd12c33a_0_cpython.conda#334cb629e10d209f1c17630f653168b1
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiofiles-22.1.0-pyhd8ed1ab_0.tar.bz2#a88c206fdb78e34adb1c4081f5f838dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02
|
||||
https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.3-pyhd8ed1ab_0.conda#d33cf7357de636cec64320f0c4fb7b6f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py38h17151c0_1.conda#7a5a699c8992fc51ef25e980f4502c2a
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a
|
||||
https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22
|
||||
https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1ab_0.conda#fef8ef5f0a54546b9efee39468229917
|
||||
https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.0-py38h17151c0_1.conda#b43385ccbd4fa88f2c195ad3c4101c77
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/executing-1.2.0-pyhd8ed1ab_0.tar.bz2#4c1bc140e2be5c8ba6e3acab99e25c50
|
||||
https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.0-py38h17151c0_1.conda#e61422a1d4256b5299131f17ef2f5215
|
||||
https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda#dac1dabba2b5a9d1aee175c5fcc7b436
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-2.4-py38h578d9bd_3.conda#ed4beead725b2b8c6673d4d7338bce78
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda#8370e0a9dc443f9b45a23fd30e7a6b3b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py38h01eb140_1.conda#2dabf287937cd631e292096cc6d0867e
|
||||
https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda#1dad8397c94e4de97a70de552a7dcf49
|
||||
https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda#a4f0e4519bc50eee4f53f689be9607f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6
|
||||
https://conda.anaconda.org/conda-forge/noarch/pamela-1.1.0-pyh1a96a4e_0.conda#dce93ccf07159017c69c6d9cea2d5d61
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094
|
||||
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda#02153b6b760bbec00cfe9e4c97993d06
|
||||
https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py38h01eb140_1.conda#89cb08bb523adf12fed3829558638d84
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883
|
||||
https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_0.conda#912c0194f898fdb783021fd25f913c31
|
||||
https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda#305141cff54af2f90e089d868fffce28
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960
|
||||
https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py38h01eb140_1.conda#5f05353ae9a6c37e1b4aebc9f7834d23
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyzmq-24.0.1-py38hfc09fa9_1.tar.bz2#a0d5ef0498ced7a2afd82ee17994935e
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2#912a71cc01012ee38e6b90ddd561e36f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.10.6-py38h0cc4f7c_0.conda#e1509df6d5aa872dde4432fcfe89747d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py38h01eb140_2.conda#91e6521bacbb90e22146bb41571cdb93
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2
|
||||
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2#dd6cbc539e74cb1f430efbd4575b9303
|
||||
https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561
|
||||
https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py38h01eb140_1.conda#660cfc2fc5bd9e3b458ad394976652cf
|
||||
https://conda.anaconda.org/conda-forge/noarch/traitlets-5.11.2-pyhd8ed1ab_0.conda#bd3f90f7551e1cffb1f402880eb2cef1
|
||||
https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda#4df15c51a543e806d439490b862be1c6
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7
|
||||
https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda#0944dc65cb4a9b5b68522c3bb585d41c
|
||||
https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda#bdb77b28cf16deac0eef431a068320e8
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f
|
||||
https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda#82617d07b2f5f5a96296d3c19684b37a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/y-py-0.5.9-py38h9fda977_0.conda#18517ed6c99222252a7409b9e128015c
|
||||
https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a
|
||||
https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49
|
||||
https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.0-pyhd8ed1ab_0.conda#056f04e51dd63337e8d7c425c18c86f1
|
||||
https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda#6b1b907661838a75d067a22f87996b2e
|
||||
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py38h6d47a40_0.conda#fc010dfb8ce6540d289436fbba499ee7
|
||||
https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda#c8eaca39e2b6abae1fc96acc929ae939
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda#48b0d98e0c0ec810d3ccc2a0926c8c0e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40
|
||||
https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda#a33161b983172ba6ef69d5fc850650cd
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2#fed45fc5ea0813240707998abe49f520
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.35-py38h01eb140_0.conda#36887eb1d27b72e4fdc62845863e75ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda#3788984d535770cad699efaeb6cb3037
|
||||
https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8
|
||||
https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py38h01eb140_4.conda#234c813c9d745d4bfc6a2a40514d88a6
|
||||
https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda#b77d8c2313158e6e461ca0efb1c2c508
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cryptography-41.0.4-py38hcdda232_0.conda#1dbd2442c9a9b93a0771b4e785130aec
|
||||
https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2#642d35437078749ef23a5dca2c9bb1f3
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda#7c27ea1bdbe520bb830dcadd59f55cbf
|
||||
https://conda.anaconda.org/conda-forge/noarch/mako-1.2.4-pyhd8ed1ab_0.tar.bz2#0d072f0edc017b6318dbab701e053f94
|
||||
https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0
|
||||
https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.22-py38h01eb140_0.conda#0dd438c47a98a57ac437b3655c6d414a
|
||||
https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda#367386d2575a0e62412448eda1012efd
|
||||
https://conda.anaconda.org/conda-forge/noarch/alembic-1.12.0-pyhd8ed1ab_0.conda#ba29026b587195548ef82444518061f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4
|
||||
https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2#4cb68948e0b8429534380243d063a27a
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.1-pyhd8ed1ab_0.conda#78aff5d2af74e6537c1ca73017f01f4f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.4.0-py38h578d9bd_0.conda#e27c9855ef0e113d4fe64c21f7b8146c
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-0.2.4-pyhd8ed1ab_0.conda#be5d4633c1cc40343ed417153a184006
|
||||
https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda#a4986c6bb5b0d05a38855b0880a5f425
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda#34f7d568bf59d18e3fef8c405cbece21
|
||||
https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.2-pyhd8ed1ab_0.conda#5ee5ad3af20138020065985de57f0711
|
||||
https://conda.anaconda.org/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.1-pyhd8ed1ab_0.conda#daca0665e6fe8a376e48b9f0b5865326
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.4.9-pyhd8ed1ab_0.conda#5cbf9a31a19d4ef9103adb7d71fd45fd
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda#61ba076de6530d9301a0053b02f093d2
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda#4bbbe67d5df19db30f04b8e344dc9976
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython-8.12.2-pyh41d4057_0.conda#acebfd89278ecac2a67b60b657e00d5c
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.7.0-pyhd8ed1ab_2.conda#088f0493279a7f7eebd514df47d65851
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-base-3.1.1-pyh2a2186d_0.conda#78fc5dfd4577a7ba172fa65eb64b6afb
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.25.2-pyh2140261_0.conda#226f2032ec491cc6e9ce66072660e4f6
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.1-pyhd8ed1ab_0.conda#2605fae5ee27100e5f10037baebf4d41
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.9.2-pyhd8ed1ab_0.conda#01e4314c780ca73759c694ce3ece281f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda#7f0d2ec2d4954188ff23503f39823409
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.9.2-pyhd8ed1ab_0.conda#1ad46253f2eb46fb8c9b2c22b7ca012f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-resource-usage-0.7.1-pyhd8ed1ab_0.conda#62ed54dc748d19d0cf056a3f90cc8f12
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.0-pyhd8ed1ab_0.conda#a12525b037a703d7f4512da737d700e6
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda#a52834fa7e3d12abc5efdf06b2097a05
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.9.2-pyhd8ed1ab_0.conda#16ccaddfcfa0a1a606a9ecf6a52d6c11
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda#67e0fe74c156267d9159e9133df7fd37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_ydoc-0.8.0-pyhd8ed1ab_0.conda#780280d42fbcb2eaf654a6ba7a3e5bb5
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda#a0be31e9bd84d6eae87cdbf74c56b90b
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda#2e2422cf19f555ef3ddbbeaf2eac7545
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab-3.6.6-pyhd8ed1ab_0.conda#05def61d4c64b0f3161eaeb3b00cc790
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-singleuser-3.1.1-pyh2a2186d_0.conda#6d0a3394efe9ff7c0ad1ed03a6ca3720
|
|
@ -0,0 +1,172 @@
|
|||
# AUTO GENERATED FROM environment.py-3.8.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2023-10-14 22:05:29 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-aarch64
|
||||
# input_hash: 3cc330543b03acd00f0bb84d0e8d87f88f68929faa091eda9992d6cb99f6ffc4
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2023.7.22-hcefe29a_0.conda#95d7f998087114466fa91e7c2887fa2f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.40-h2d8c526_0.conda#16246d69e945d0b1969a6099e7c5d457
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-13.2.0-hf8544c7_2.conda#8ce66e4e1d30f0936a525127eaaaf63d
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-13.2.0-h9a76618_2.conda#921c652898c8602bf2697d015f3efc77
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pandoc-3.1.3-h8af1aa0_0.conda#10b7f903dadbf1568c17e2c6cb39435b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.8-4_cp38.conda#8107237a22bf62f12b4a7c8e0fa3b842
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2#6168d71addc746e8f2b8d57dfd2edcea
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-13.2.0-hf8544c7_2.conda#f4dfb3bad7c8b38c3f8ed7f15a91a1ed
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-hf897c2e_4.tar.bz2#2d787570a729e273a4e75775ddf3348a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/icu-72.1-hcf00150_0.conda#cd394213b2f8c9c9060a293a8508fe84
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2#dddd85f4d52121fab0a8b099c5e06501
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.0-h31becfc_1.conda#b281ae3b462ef954fac3c06cc2cc92d5
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.18-hb9de7d4_1.tar.bz2#d09ab3c60eebb6f14eb4d07e172775cc
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda#000e30b09db0b7c775b21695dff30969
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.44.2-h31becfc_1.conda#f6068b95c0a3b4fd949a91341e9a0669
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.2.13-h31becfc_5.conda#b213aa87eea9491ef7b129179322e955
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.4-h2e1726e_0.conda#40beaf447150c2760affc591c7509595
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.1.3-h31becfc_0.conda#19469b6fdd72c1ffe022d9845fbb85fa
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2#83baad393a31d59c20b63ba4da6592df
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-hf897c2e_2.tar.bz2#b853307650cb226731f653aa623936a4
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.43.2-h194ca79_0.conda#16417bba0efbcb7539b942a611cc899a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda#105eb1e16bf83bfb2eb380a48032b655
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda#f75105e0585851f818e0009dd1dde4dc
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-h2f0025b_0.conda#88905c542167163a0dea6bdad01c3366
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.2.13-h31becfc_5.conda#96866c7301479abaf8308c50958c71a4
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-18.17.1-hcb20a51_0.conda#0611c05ba14e36fd4e19188d1708e393
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.8.18-hbbe8eec_0_cpython.conda#8e85a0cae8f7f2924842c69c8f1d19a5
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiofiles-22.1.0-pyhd8ed1ab_0.tar.bz2#a88c206fdb78e34adb1c4081f5f838dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02
|
||||
https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.3-pyhd8ed1ab_0.conda#d33cf7357de636cec64320f0c4fb7b6f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.1.0-py38hb83fbf6_1.conda#481316b31f7fba6fa88cb613f37fecf7
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a
|
||||
https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22
|
||||
https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1ab_0.conda#fef8ef5f0a54546b9efee39468229917
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/debugpy-1.8.0-py38hb83fbf6_1.conda#bb4b478f78b779eaaaa5c9a1c4038d61
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/executing-1.2.0-pyhd8ed1ab_0.tar.bz2#4c1bc140e2be5c8ba6e3acab99e25c50
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/greenlet-3.0.0-py38hb83fbf6_1.conda#809d2aace26181044320c8050e0491ef
|
||||
https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda#dac1dabba2b5a9d1aee175c5fcc7b436
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/jsonpointer-2.4-py38he3eb160_3.conda#69fd075f06a8a58f731ebbb262378df7
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda#8370e0a9dc443f9b45a23fd30e7a6b3b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-2.1.3-py38hea3b116_1.conda#cbb1053103239d7344600e53e28aa2b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda#1dad8397c94e4de97a70de552a7dcf49
|
||||
https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda#a4f0e4519bc50eee4f53f689be9607f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6
|
||||
https://conda.anaconda.org/conda-forge/noarch/pamela-1.1.0-pyh1a96a4e_0.conda#dce93ccf07159017c69c6d9cea2d5d61
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094
|
||||
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda#02153b6b760bbec00cfe9e4c97993d06
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/psutil-5.9.5-py38h9579f32_1.conda#c7567c002466153592f8717a4df7e4ee
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883
|
||||
https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_0.conda#912c0194f898fdb783021fd25f913c31
|
||||
https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda#305141cff54af2f90e089d868fffce28
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960
|
||||
https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.1-py38h9579f32_1.conda#84a50ac70736cc75812b2a49b580415b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-24.0.1-py38h891b4b0_1.tar.bz2#99843a538cb902ee3b5f76d9f282c48a
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2#912a71cc01012ee38e6b90ddd561e36f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.10.6-py38hf532af8_0.conda#c3f211c5b68db0e225920bfc1666d682
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ruamel.yaml.clib-0.2.7-py38h9579f32_2.conda#0f2220c05bc739b3d390a0bd12c9029a
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2
|
||||
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2#dd6cbc539e74cb1f430efbd4575b9303
|
||||
https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561
|
||||
https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.3.3-py38hea3b116_1.conda#ad8257a473627cd17562cb7264f12dcb
|
||||
https://conda.anaconda.org/conda-forge/noarch/traitlets-5.11.2-pyhd8ed1ab_0.conda#bd3f90f7551e1cffb1f402880eb2cef1
|
||||
https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda#4df15c51a543e806d439490b862be1c6
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7
|
||||
https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda#0944dc65cb4a9b5b68522c3bb585d41c
|
||||
https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda#bdb77b28cf16deac0eef431a068320e8
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f
|
||||
https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda#82617d07b2f5f5a96296d3c19684b37a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/y-py-0.5.9-py38hb6b4038_0.conda#85d8f2099743288cefc070127b58270e
|
||||
https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a
|
||||
https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49
|
||||
https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.0-pyhd8ed1ab_0.conda#056f04e51dd63337e8d7c425c18c86f1
|
||||
https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda#6b1b907661838a75d067a22f87996b2e
|
||||
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.16.0-py38h4ab679b_0.conda#601106b459f7b9300e8b7b90ab0e1f54
|
||||
https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda#c8eaca39e2b6abae1fc96acc929ae939
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda#48b0d98e0c0ec810d3ccc2a0926c8c0e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40
|
||||
https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda#a33161b983172ba6ef69d5fc850650cd
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2#fed45fc5ea0813240707998abe49f520
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ruamel.yaml-0.17.35-py38h9579f32_0.conda#1454fee2832a762e47097346ba9bb68f
|
||||
https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda#3788984d535770cad699efaeb6cb3037
|
||||
https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/argon2-cffi-bindings-21.2.0-py38h9579f32_4.conda#3460f222597376592b6e1ac5eac0bdce
|
||||
https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda#b77d8c2313158e6e461ca0efb1c2c508
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-41.0.4-py38h72e9872_0.conda#edfadad7854f70024b456c867af3da00
|
||||
https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2#642d35437078749ef23a5dca2c9bb1f3
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda#7c27ea1bdbe520bb830dcadd59f55cbf
|
||||
https://conda.anaconda.org/conda-forge/noarch/mako-1.2.4-pyhd8ed1ab_0.tar.bz2#0d072f0edc017b6318dbab701e053f94
|
||||
https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0
|
||||
https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.22-py38hea3b116_0.conda#338b63243aac23198e3c579b4780c8de
|
||||
https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda#367386d2575a0e62412448eda1012efd
|
||||
https://conda.anaconda.org/conda-forge/noarch/alembic-1.12.0-pyhd8ed1ab_0.conda#ba29026b587195548ef82444518061f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4
|
||||
https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2#4cb68948e0b8429534380243d063a27a
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.1-pyhd8ed1ab_0.conda#78aff5d2af74e6537c1ca73017f01f4f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/jupyter_core-5.4.0-py38he3eb160_0.conda#101c11a58becb265db144c7f127f0ee8
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-0.2.4-pyhd8ed1ab_0.conda#be5d4633c1cc40343ed417153a184006
|
||||
https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda#a4986c6bb5b0d05a38855b0880a5f425
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda#34f7d568bf59d18e3fef8c405cbece21
|
||||
https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.2-pyhd8ed1ab_0.conda#5ee5ad3af20138020065985de57f0711
|
||||
https://conda.anaconda.org/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.1-pyhd8ed1ab_0.conda#daca0665e6fe8a376e48b9f0b5865326
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.4.9-pyhd8ed1ab_0.conda#5cbf9a31a19d4ef9103adb7d71fd45fd
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda#61ba076de6530d9301a0053b02f093d2
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda#4bbbe67d5df19db30f04b8e344dc9976
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython-8.12.2-pyh41d4057_0.conda#acebfd89278ecac2a67b60b657e00d5c
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.7.0-pyhd8ed1ab_2.conda#088f0493279a7f7eebd514df47d65851
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-base-3.1.1-pyh2a2186d_0.conda#78fc5dfd4577a7ba172fa65eb64b6afb
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.25.2-pyh2140261_0.conda#226f2032ec491cc6e9ce66072660e4f6
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.1-pyhd8ed1ab_0.conda#2605fae5ee27100e5f10037baebf4d41
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.9.2-pyhd8ed1ab_0.conda#01e4314c780ca73759c694ce3ece281f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda#7f0d2ec2d4954188ff23503f39823409
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.9.2-pyhd8ed1ab_0.conda#1ad46253f2eb46fb8c9b2c22b7ca012f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-resource-usage-0.7.1-pyhd8ed1ab_0.conda#62ed54dc748d19d0cf056a3f90cc8f12
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.0-pyhd8ed1ab_0.conda#a12525b037a703d7f4512da737d700e6
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda#a52834fa7e3d12abc5efdf06b2097a05
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.9.2-pyhd8ed1ab_0.conda#16ccaddfcfa0a1a606a9ecf6a52d6c11
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda#67e0fe74c156267d9159e9133df7fd37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_ydoc-0.8.0-pyhd8ed1ab_0.conda#780280d42fbcb2eaf654a6ba7a3e5bb5
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda#a0be31e9bd84d6eae87cdbf74c56b90b
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda#2e2422cf19f555ef3ddbbeaf2eac7545
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab-3.6.6-pyhd8ed1ab_0.conda#05def61d4c64b0f3161eaeb3b00cc790
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-singleuser-3.1.1-pyh2a2186d_0.conda#6d0a3394efe9ff7c0ad1ed03a6ca3720
|
|
@ -1,132 +0,0 @@
|
|||
# AUTO GENERATED FROM environment.py-3.8.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2021-02-22 12:22:38 UTC
|
||||
name: r2d
|
||||
channels:
|
||||
- conda-forge
|
||||
- defaults
|
||||
- conda-forge/label/broken
|
||||
dependencies:
|
||||
- _libgcc_mutex=0.1=conda_forge
|
||||
- _openmp_mutex=4.5=1_gnu
|
||||
- alembic=1.5.5=pyhd8ed1ab_0
|
||||
- anyio=2.1.0=py38h578d9bd_0
|
||||
- argon2-cffi=20.1.0=py38h497a2fe_2
|
||||
- async_generator=1.10=py_0
|
||||
- attrs=20.3.0=pyhd3deb0d_0
|
||||
- babel=2.9.0=pyhd3deb0d_0
|
||||
- backcall=0.2.0=pyh9f0ad1d_0
|
||||
- backports=1.0=py_2
|
||||
- backports.functools_lru_cache=1.6.1=py_0
|
||||
- bleach=3.3.0=pyh44b312d_0
|
||||
- blinker=1.4=py_1
|
||||
- brotlipy=0.7.0=py38h497a2fe_1001
|
||||
- c-ares=1.17.1=h36c2ea0_0
|
||||
- ca-certificates=2020.12.5=ha878542_0
|
||||
- certifi=2020.12.5=py38h578d9bd_1
|
||||
- certipy=0.1.3=py_0
|
||||
- cffi=1.14.5=py38ha65f79e_0
|
||||
- chardet=4.0.0=py38h578d9bd_1
|
||||
- cryptography=3.4.4=py38h3e25421_0
|
||||
- decorator=4.4.2=py_0
|
||||
- defusedxml=0.6.0=py_0
|
||||
- entrypoints=0.3=py38h32f6830_1002
|
||||
- idna=2.10=pyh9f0ad1d_0
|
||||
- importlib-metadata=3.4.0=py38h578d9bd_0
|
||||
- importlib_metadata=3.4.0=hd8ed1ab_0
|
||||
- ipykernel=5.5.0=py38h81c977d_1
|
||||
- ipython=7.20.0=py38h81c977d_2
|
||||
- ipython_genutils=0.2.0=py_1
|
||||
- ipywidgets=7.6.3=pyhd3deb0d_0
|
||||
- jedi=0.18.0=py38h578d9bd_2
|
||||
- jinja2=2.11.3=pyh44b312d_0
|
||||
- json5=0.9.5=pyh9f0ad1d_0
|
||||
- jsonschema=3.2.0=py38h32f6830_1
|
||||
- jupyter-offlinenotebook=0.2.1=pyhd8ed1ab_0
|
||||
- jupyter-resource-usage=0.5.1=pyhd8ed1ab_0
|
||||
- jupyter_client=6.1.11=pyhd8ed1ab_1
|
||||
- jupyter_core=4.7.1=py38h578d9bd_0
|
||||
- jupyter_server=1.4.0=py38h578d9bd_0
|
||||
- jupyter_telemetry=0.1.0=pyhd8ed1ab_1
|
||||
- jupyterhub-base=1.3.0=py38h578d9bd_0
|
||||
- jupyterhub-singleuser=1.3.0=py38h578d9bd_0
|
||||
- jupyterlab=3.0.7=pyhd8ed1ab_0
|
||||
- jupyterlab_pygments=0.1.2=pyh9f0ad1d_0
|
||||
- jupyterlab_server=2.3.0=pyhd8ed1ab_0
|
||||
- jupyterlab_widgets=1.0.0=pyhd8ed1ab_1
|
||||
- krb5=1.17.2=h926e7f8_0
|
||||
- ld_impl_linux-64=2.35.1=hea4e1c9_2
|
||||
- libcurl=7.71.1=hcdd3856_8
|
||||
- libedit=3.1.20191231=he28a2e2_2
|
||||
- libev=4.33=h516909a_1
|
||||
- libffi=3.3=h58526e2_2
|
||||
- libgcc-ng=9.3.0=h2828fa1_18
|
||||
- libgomp=9.3.0=h2828fa1_18
|
||||
- libnghttp2=1.43.0=h812cca2_0
|
||||
- libsodium=1.0.18=h516909a_1
|
||||
- libssh2=1.9.0=hab1572f_5
|
||||
- libstdcxx-ng=9.3.0=h6de172a_18
|
||||
- mako=1.1.4=pyh44b312d_0
|
||||
- markupsafe=1.1.1=py38h497a2fe_3
|
||||
- mistune=0.8.4=py38h497a2fe_1003
|
||||
- nbclassic=0.2.6=pyhd8ed1ab_0
|
||||
- nbclient=0.5.2=pyhd8ed1ab_0
|
||||
- nbconvert=6.0.7=py38h578d9bd_3
|
||||
- nbformat=5.1.2=pyhd8ed1ab_1
|
||||
- ncurses=6.2=h58526e2_4
|
||||
- nest-asyncio=1.4.3=pyhd8ed1ab_0
|
||||
- notebook=6.2.0=py38h578d9bd_0
|
||||
- nteract_on_jupyter=2.1.3=py_0
|
||||
- oauthlib=3.0.1=py_0
|
||||
- openssl=1.1.1j=h7f98852_0
|
||||
- packaging=20.9=pyh44b312d_0
|
||||
- pamela=1.0.0=py_0
|
||||
- pandoc=2.11.4=h7f98852_0
|
||||
- pandocfilters=1.4.2=py_1
|
||||
- parso=0.8.1=pyhd8ed1ab_0
|
||||
- pexpect=4.8.0=py38h32f6830_1
|
||||
- pickleshare=0.7.5=py38h32f6830_1002
|
||||
- pip=21.0.1=pyhd8ed1ab_0
|
||||
- prometheus_client=0.9.0=pyhd3deb0d_0
|
||||
- prompt-toolkit=3.0.16=pyha770c72_0
|
||||
- psutil=5.8.0=py38h497a2fe_1
|
||||
- ptyprocess=0.7.0=pyhd3deb0d_0
|
||||
- pycparser=2.20=pyh9f0ad1d_2
|
||||
- pycurl=7.43.0.6=py38h996a351_1
|
||||
- pygments=2.8.0=pyhd8ed1ab_0
|
||||
- pyjwt=2.0.1=pyhd8ed1ab_0
|
||||
- pyopenssl=20.0.1=pyhd8ed1ab_0
|
||||
- pyparsing=2.4.7=pyh9f0ad1d_0
|
||||
- pyrsistent=0.17.3=py38h497a2fe_2
|
||||
- pysocks=1.7.1=py38h578d9bd_3
|
||||
- python=3.8.8=hffdb5ce_0_cpython
|
||||
- python-dateutil=2.8.1=py_0
|
||||
- python-editor=1.0.4=py_0
|
||||
- python-json-logger=2.0.1=pyh9f0ad1d_0
|
||||
- python_abi=3.8=1_cp38
|
||||
- pytz=2021.1=pyhd8ed1ab_0
|
||||
- pyzmq=22.0.3=py38h3d7ac18_0
|
||||
- readline=8.0=he28a2e2_2
|
||||
- requests=2.25.1=pyhd3deb0d_0
|
||||
- ruamel.yaml=0.16.12=py38h497a2fe_2
|
||||
- ruamel.yaml.clib=0.2.2=py38h497a2fe_2
|
||||
- send2trash=1.5.0=py_0
|
||||
- setuptools=49.6.0=py38h578d9bd_3
|
||||
- six=1.15.0=pyh9f0ad1d_0
|
||||
- sniffio=1.2.0=py38h578d9bd_1
|
||||
- sqlalchemy=1.3.23=py38h497a2fe_0
|
||||
- sqlite=3.34.0=h74cdb3f_0
|
||||
- terminado=0.9.2=py38h578d9bd_0
|
||||
- testpath=0.4.4=py_0
|
||||
- tk=8.6.10=hed695b0_1
|
||||
- tornado=6.1=py38h497a2fe_1
|
||||
- traitlets=5.0.5=py_0
|
||||
- urllib3=1.26.3=pyhd8ed1ab_0
|
||||
- wcwidth=0.2.5=pyh9f0ad1d_2
|
||||
- webencodings=0.5.1=py_1
|
||||
- wheel=0.36.2=pyhd3deb0d_0
|
||||
- widgetsnbextension=3.5.1=py38h578d9bd_4
|
||||
- xz=5.2.5=h516909a_1
|
||||
- zeromq=4.3.4=h9c3ff4c_0
|
||||
- zipp=3.4.0=py_0
|
||||
- zlib=1.2.11=h516909a_1010
|
||||
prefix: /opt/conda/envs/r2d
|
|
@ -1,12 +1,15 @@
|
|||
# AUTO GENERATED FROM environment.yml, DO NOT MANUALLY MODIFY
|
||||
# Generated on 2021-02-22 12:22:38 UTC
|
||||
# Generated on 2023-10-14 22:05:18 UTC
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- python=3.8.*
|
||||
- ipywidgets==7.6.3
|
||||
- jupyter-offlinenotebook==0.2.1
|
||||
- jupyter-resource-usage==0.5.1
|
||||
- jupyterlab==3.0.7
|
||||
- jupyterhub-singleuser==1.3.0
|
||||
- nbconvert==6.0.7
|
||||
- notebook==6.2.0
|
||||
- nteract_on_jupyter==2.1.3
|
||||
- nodejs=18
|
||||
- pip
|
||||
- ipywidgets==8.* # https://github.com/jupyter-widgets/ipywidgets
|
||||
- jupyter-offlinenotebook==0.2.* # https://github.com/manics/jupyter-offlinenotebook
|
||||
- jupyter-resource-usage==0.7.* # https://github.com/jupyter-server/jupyter-resource-usage
|
||||
- jupyter_server==1.* # https://github.com/jupyter-server/jupyter_server
|
||||
- jupyterhub-singleuser==3.* # https://github.com/jupyterhub/jupyterhub
|
||||
- jupyterlab==3.* # https://github.com/jupyterlab/jupyterlab
|
||||
- notebook==6.* # https://github.com/jupyter/notebook
|
||||
|
|
|
@ -0,0 +1,175 @@
|
|||
# AUTO GENERATED FROM environment.py-3.9.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2023-10-14 22:05:49 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-64
|
||||
# input_hash: 99f0205247d52a0abd0dc705f3ce959255560aebd34ea60d0cc67e297e2ee7c1
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda#9172c297304f2a20134fc56c97fbe229
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-4_cp39.conda#bfe4b3259a8ac6cdf0037752904da6a7
|
||||
https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_2.conda#e2042154faafe61969556f28bade94b9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.conda#c28003b0be0494f9a7664389146716ff
|
||||
https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54
|
||||
https://conda.anaconda.org/conda-forge/linux-64/gmp-6.2.1-h58526e2_0.tar.bz2#b94cf2db16066b242ebd26db2facbd56
|
||||
https://conda.anaconda.org/conda-forge/linux-64/icu-72.1-hcb278e6_0.conda#7c8d20d847bb45f56bd941578fcfa146
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2#c3788462a6fbddafdb413a9f9053e58d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda#d23c76f7e6dcd6243d1b6ef5e62d17d2
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179
|
||||
https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.3-hd590300_0.conda#7bb88ce04c8deb9f7d763ae04a1da72f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161070d867d1b1204ea749c8eec4ef0
|
||||
https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2#4cb3ad778ec2d5a7acbdf254eb1c42ae
|
||||
https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.2-h2797004_0.conda#4b441a1ee22397d5a27dc1126b849edd
|
||||
https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_0.conda#8851084c192dbc56215ac4e3c9aa30fa
|
||||
https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209
|
||||
https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.17.1-hf52ce11_0.conda#c3aad73875296ca9ad3954aa606536b9
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.3-h32600fe_0.conda#8287aeb8462e2d4b235eff788e75919d
|
||||
https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda#3ede353bc605068d9677e700b1847382
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiofiles-22.1.0-pyhd8ed1ab_0.tar.bz2#a88c206fdb78e34adb1c4081f5f838dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02
|
||||
https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.3-pyhd8ed1ab_0.conda#d33cf7357de636cec64320f0c4fb7b6f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_1.conda#c48418c8b35f1d59ae9ae1174812b40a
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a
|
||||
https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22
|
||||
https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1ab_0.conda#fef8ef5f0a54546b9efee39468229917
|
||||
https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.0-py39h3d6467e_1.conda#31e04f8c5eebb5306793482b5e0f8a78
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/executing-1.2.0-pyhd8ed1ab_0.tar.bz2#4c1bc140e2be5c8ba6e3acab99e25c50
|
||||
https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.0-py39h3d6467e_1.conda#1271dbe2e9296a26a4934fc59215d83c
|
||||
https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda#dac1dabba2b5a9d1aee175c5fcc7b436
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-2.4-py39hf3d152e_3.conda#23255e64bc45e9bc0b7d87c108357ce6
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda#8370e0a9dc443f9b45a23fd30e7a6b3b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_1.conda#ee2b4665b852ec6ff2758f3c1b91233d
|
||||
https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda#1dad8397c94e4de97a70de552a7dcf49
|
||||
https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda#a4f0e4519bc50eee4f53f689be9607f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6
|
||||
https://conda.anaconda.org/conda-forge/noarch/pamela-1.1.0-pyh1a96a4e_0.conda#dce93ccf07159017c69c6d9cea2d5d61
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094
|
||||
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda#02153b6b760bbec00cfe9e4c97993d06
|
||||
https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39hd1e30aa_1.conda#c2e412b0f11e5983bcfc35d9beb91ecb
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883
|
||||
https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_0.conda#912c0194f898fdb783021fd25f913c31
|
||||
https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda#305141cff54af2f90e089d868fffce28
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960
|
||||
https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py39hd1e30aa_1.conda#37218233bcdc310e4fde6453bc1b40d8
|
||||
https://conda.anaconda.org/conda-forge/linux-64/pyzmq-24.0.1-py39headdf64_1.tar.bz2#8ef2263feb2f0130ced1a41444474e98
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2#912a71cc01012ee38e6b90ddd561e36f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.10.6-py39h9fdd4d6_0.conda#07f3775b21f8cf32a3635f203d3f9669
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py39hd1e30aa_2.conda#743d996a1af8502f27770fadfd418434
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2
|
||||
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2#dd6cbc539e74cb1f430efbd4575b9303
|
||||
https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561
|
||||
https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96
|
||||
https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_1.conda#cbe186eefb0bcd91e8f47c3908489874
|
||||
https://conda.anaconda.org/conda-forge/noarch/traitlets-5.11.2-pyhd8ed1ab_0.conda#bd3f90f7551e1cffb1f402880eb2cef1
|
||||
https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda#4df15c51a543e806d439490b862be1c6
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7
|
||||
https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda#0944dc65cb4a9b5b68522c3bb585d41c
|
||||
https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda#bdb77b28cf16deac0eef431a068320e8
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f
|
||||
https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda#82617d07b2f5f5a96296d3c19684b37a
|
||||
https://conda.anaconda.org/conda-forge/linux-64/y-py-0.5.9-py39h50f1755_0.conda#f9225a09f5cb046cfdecd2a54448d4c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a
|
||||
https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49
|
||||
https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.0-pyhd8ed1ab_0.conda#056f04e51dd63337e8d7c425c18c86f1
|
||||
https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda#6b1b907661838a75d067a22f87996b2e
|
||||
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py39h7a31438_0.conda#ac992767d7f8ed2cb27e71e78f0fb2d7
|
||||
https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda#c8eaca39e2b6abae1fc96acc929ae939
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda#48b0d98e0c0ec810d3ccc2a0926c8c0e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40
|
||||
https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda#a33161b983172ba6ef69d5fc850650cd
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2#fed45fc5ea0813240707998abe49f520
|
||||
https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.17.35-py39hd1e30aa_0.conda#3c77c0430e9ed9bc31ad867c665c3c78
|
||||
https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda#3788984d535770cad699efaeb6cb3037
|
||||
https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8
|
||||
https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py39hd1e30aa_4.conda#6a04738e75f877b68552fc19cb045233
|
||||
https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda#b77d8c2313158e6e461ca0efb1c2c508
|
||||
https://conda.anaconda.org/conda-forge/linux-64/cryptography-41.0.4-py39hd4f0224_0.conda#ea82cb6eea14e958127a6c970c253954
|
||||
https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2#642d35437078749ef23a5dca2c9bb1f3
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda#7c27ea1bdbe520bb830dcadd59f55cbf
|
||||
https://conda.anaconda.org/conda-forge/noarch/mako-1.2.4-pyhd8ed1ab_0.tar.bz2#0d072f0edc017b6318dbab701e053f94
|
||||
https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0
|
||||
https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b
|
||||
https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.22-py39hd1e30aa_0.conda#31237b352082e8a34616ee04f37234fc
|
||||
https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda#367386d2575a0e62412448eda1012efd
|
||||
https://conda.anaconda.org/conda-forge/noarch/alembic-1.12.0-pyhd8ed1ab_0.conda#ba29026b587195548ef82444518061f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4
|
||||
https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2#4cb68948e0b8429534380243d063a27a
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.1-pyhd8ed1ab_0.conda#78aff5d2af74e6537c1ca73017f01f4f
|
||||
https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.4.0-py39hf3d152e_0.conda#36e0de68a56dab715169b42972346543
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-0.2.4-pyhd8ed1ab_0.conda#be5d4633c1cc40343ed417153a184006
|
||||
https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda#a4986c6bb5b0d05a38855b0880a5f425
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda#34f7d568bf59d18e3fef8c405cbece21
|
||||
https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.2-pyhd8ed1ab_0.conda#5ee5ad3af20138020065985de57f0711
|
||||
https://conda.anaconda.org/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.1-pyhd8ed1ab_0.conda#daca0665e6fe8a376e48b9f0b5865326
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.4.9-pyhd8ed1ab_0.conda#5cbf9a31a19d4ef9103adb7d71fd45fd
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda#61ba076de6530d9301a0053b02f093d2
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda#4bbbe67d5df19db30f04b8e344dc9976
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython-8.16.1-pyh0d859eb_0.conda#7e52cb0dbf01b90365bfe433ec8bd3c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.7.0-pyhd8ed1ab_2.conda#088f0493279a7f7eebd514df47d65851
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-base-3.1.1-pyh2a2186d_0.conda#78fc5dfd4577a7ba172fa65eb64b6afb
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.25.2-pyh2140261_0.conda#226f2032ec491cc6e9ce66072660e4f6
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.1-pyhd8ed1ab_0.conda#2605fae5ee27100e5f10037baebf4d41
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.9.2-pyhd8ed1ab_0.conda#01e4314c780ca73759c694ce3ece281f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda#7f0d2ec2d4954188ff23503f39823409
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.9.2-pyhd8ed1ab_0.conda#1ad46253f2eb46fb8c9b2c22b7ca012f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-resource-usage-0.7.1-pyhd8ed1ab_0.conda#62ed54dc748d19d0cf056a3f90cc8f12
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.0-pyhd8ed1ab_0.conda#a12525b037a703d7f4512da737d700e6
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda#a52834fa7e3d12abc5efdf06b2097a05
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.9.2-pyhd8ed1ab_0.conda#16ccaddfcfa0a1a606a9ecf6a52d6c11
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda#67e0fe74c156267d9159e9133df7fd37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_ydoc-0.8.0-pyhd8ed1ab_0.conda#780280d42fbcb2eaf654a6ba7a3e5bb5
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda#a0be31e9bd84d6eae87cdbf74c56b90b
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda#2e2422cf19f555ef3ddbbeaf2eac7545
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab-3.6.6-pyhd8ed1ab_0.conda#05def61d4c64b0f3161eaeb3b00cc790
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-singleuser-3.1.1-pyh2a2186d_0.conda#6d0a3394efe9ff7c0ad1ed03a6ca3720
|
|
@ -0,0 +1,173 @@
|
|||
# AUTO GENERATED FROM environment.py-3.9.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2023-10-14 22:05:59 UTC
|
||||
# Generated by conda-lock.
|
||||
# platform: linux-aarch64
|
||||
# input_hash: ca9b9afa6be25d3ddcadd0add3216797cc76e6021c5ee896c5aec130e7d09b0f
|
||||
@EXPLICIT
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2023.7.22-hcefe29a_0.conda#95d7f998087114466fa91e7c2887fa2f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.40-h2d8c526_0.conda#16246d69e945d0b1969a6099e7c5d457
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-13.2.0-hf8544c7_2.conda#8ce66e4e1d30f0936a525127eaaaf63d
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-13.2.0-h9a76618_2.conda#921c652898c8602bf2697d015f3efc77
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pandoc-3.1.3-h8af1aa0_0.conda#10b7f903dadbf1568c17e2c6cb39435b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.9-4_cp39.conda#c191905a08694e4a5cb1238e90233878
|
||||
https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2#6168d71addc746e8f2b8d57dfd2edcea
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-13.2.0-hf8544c7_2.conda#f4dfb3bad7c8b38c3f8ed7f15a91a1ed
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-hf897c2e_4.tar.bz2#2d787570a729e273a4e75775ddf3348a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/icu-72.1-hcf00150_0.conda#cd394213b2f8c9c9060a293a8508fe84
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2#dddd85f4d52121fab0a8b099c5e06501
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.0-h31becfc_1.conda#b281ae3b462ef954fac3c06cc2cc92d5
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.18-hb9de7d4_1.tar.bz2#d09ab3c60eebb6f14eb4d07e172775cc
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda#000e30b09db0b7c775b21695dff30969
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.44.2-h31becfc_1.conda#f6068b95c0a3b4fd949a91341e9a0669
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.2.13-h31becfc_5.conda#b213aa87eea9491ef7b129179322e955
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.4-h2e1726e_0.conda#40beaf447150c2760affc591c7509595
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.1.3-h31becfc_0.conda#19469b6fdd72c1ffe022d9845fbb85fa
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2#83baad393a31d59c20b63ba4da6592df
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-hf897c2e_2.tar.bz2#b853307650cb226731f653aa623936a4
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.43.2-h194ca79_0.conda#16417bba0efbcb7539b942a611cc899a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda#105eb1e16bf83bfb2eb380a48032b655
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda#f75105e0585851f818e0009dd1dde4dc
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-h2f0025b_0.conda#88905c542167163a0dea6bdad01c3366
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.2.13-h31becfc_5.conda#96866c7301479abaf8308c50958c71a4
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-18.17.1-hcb20a51_0.conda#0611c05ba14e36fd4e19188d1708e393
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.9.18-h4ac3b42_0_cpython.conda#4d36e157278470ac06508579c6d36555
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiofiles-22.1.0-pyhd8ed1ab_0.tar.bz2#a88c206fdb78e34adb1c4081f5f838dd
|
||||
https://conda.anaconda.org/conda-forge/noarch/async_generator-1.10-py_0.tar.bz2#d56c596e61b1c4952acf0a9920856c12
|
||||
https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8
|
||||
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02
|
||||
https://conda.anaconda.org/conda-forge/noarch/blinker-1.6.3-pyhd8ed1ab_0.conda#d33cf7357de636cec64320f0c4fb7b6f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.1.0-py39h387a81e_1.conda#983fb0d6a8d0ad30f7213dccadea185d
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a
|
||||
https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22
|
||||
https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1ab_0.conda#fef8ef5f0a54546b9efee39468229917
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/debugpy-1.8.0-py39h387a81e_1.conda#e7a59ad4da7b3abae57a0cafae50b8b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364
|
||||
https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2
|
||||
https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d
|
||||
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/executing-1.2.0-pyhd8ed1ab_0.tar.bz2#4c1bc140e2be5c8ba6e3acab99e25c50
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/greenlet-3.0.0-py39h387a81e_1.conda#871da653eead78c03474596989b0069d
|
||||
https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-py_1.tar.bz2#5071c982548b3a20caf70462f04f5287
|
||||
https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda#dac1dabba2b5a9d1aee175c5fcc7b436
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/jsonpointer-2.4-py39h4420490_3.conda#48949395cda82fced27f30b73fd36f1a
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda#8370e0a9dc443f9b45a23fd30e7a6b3b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-2.1.3-py39h7cc1d5f_1.conda#d42cdaf238da63cd262efba3469246c7
|
||||
https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda#1dad8397c94e4de97a70de552a7dcf49
|
||||
https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda#a4f0e4519bc50eee4f53f689be9607f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6
|
||||
https://conda.anaconda.org/conda-forge/noarch/pamela-1.1.0-pyh1a96a4e_0.conda#dce93ccf07159017c69c6d9cea2d5d61
|
||||
https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9
|
||||
https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094
|
||||
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761
|
||||
https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9
|
||||
https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda#02153b6b760bbec00cfe9e4c97993d06
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/psutil-5.9.5-py39h898b7ef_1.conda#24ed9ae7a812630753ddfc850e4a9aee
|
||||
https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263
|
||||
https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883
|
||||
https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff
|
||||
https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_0.conda#912c0194f898fdb783021fd25f913c31
|
||||
https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda#305141cff54af2f90e089d868fffce28
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960
|
||||
https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.1-py39h898b7ef_1.conda#6130aa0677e5b9bfcd3c8fde05f8a7e6
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-24.0.1-py39h754ef6b_1.tar.bz2#14c602fa9762708cbdcd045e8f1a0ea1
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2#912a71cc01012ee38e6b90ddd561e36f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.10.6-py39hfe8b3a4_0.conda#507c9af77af5d7397610e9e63e470fd7
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ruamel.yaml.clib-0.2.7-py39h898b7ef_2.conda#1b7d1d26a32d020dea48d8d65007a614
|
||||
https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2
|
||||
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709
|
||||
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2
|
||||
https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2#dd6cbc539e74cb1f430efbd4575b9303
|
||||
https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561
|
||||
https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.3.3-py39h7cc1d5f_1.conda#c383c279123694d7a586ec47320d1cb1
|
||||
https://conda.anaconda.org/conda-forge/noarch/traitlets-5.11.2-pyhd8ed1ab_0.conda#bd3f90f7551e1cffb1f402880eb2cef1
|
||||
https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda#4df15c51a543e806d439490b862be1c6
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7
|
||||
https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda#0944dc65cb4a9b5b68522c3bb585d41c
|
||||
https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03
|
||||
https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9
|
||||
https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda#bdb77b28cf16deac0eef431a068320e8
|
||||
https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f
|
||||
https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda#82617d07b2f5f5a96296d3c19684b37a
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/y-py-0.5.9-py39h1efe9e1_0.conda#806142b2ca4bb7cc3eda216f2d8cb223
|
||||
https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a
|
||||
https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49
|
||||
https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.0-pyhd8ed1ab_0.conda#056f04e51dd63337e8d7c425c18c86f1
|
||||
https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219
|
||||
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda#6b1b907661838a75d067a22f87996b2e
|
||||
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717
|
||||
https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e
|
||||
https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.16.0-py39hdf53b9e_0.conda#6dd793656e9dc5ffb637e7c2d2ef5bfb
|
||||
https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda#c8eaca39e2b6abae1fc96acc929ae939
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda#48b0d98e0c0ec810d3ccc2a0926c8c0e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2
|
||||
https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40
|
||||
https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de
|
||||
https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1
|
||||
https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801
|
||||
https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984
|
||||
https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda#a33161b983172ba6ef69d5fc850650cd
|
||||
https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2#fed45fc5ea0813240707998abe49f520
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/ruamel.yaml-0.17.35-py39h898b7ef_0.conda#fb0d8819c9aa49ff933a8cdcba55e874
|
||||
https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda#3788984d535770cad699efaeb6cb3037
|
||||
https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48
|
||||
https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea
|
||||
https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/argon2-cffi-bindings-21.2.0-py39h898b7ef_4.conda#4baffaf857eafd23b03ca7974695df21
|
||||
https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda#b77d8c2313158e6e461ca0efb1c2c508
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-41.0.4-py39hea2e5f7_0.conda#39584d24ca21fde78c21b6620f5f42af
|
||||
https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2#642d35437078749ef23a5dca2c9bb1f3
|
||||
https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda#7c27ea1bdbe520bb830dcadd59f55cbf
|
||||
https://conda.anaconda.org/conda-forge/noarch/mako-1.2.4-pyhd8ed1ab_0.tar.bz2#0d072f0edc017b6318dbab701e053f94
|
||||
https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0
|
||||
https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.22-py39h7cc1d5f_0.conda#1c74b3c81fb26ac7c50281ebe4d80d78
|
||||
https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af
|
||||
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda#367386d2575a0e62412448eda1012efd
|
||||
https://conda.anaconda.org/conda-forge/noarch/alembic-1.12.0-pyhd8ed1ab_0.conda#ba29026b587195548ef82444518061f7
|
||||
https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4
|
||||
https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2#4cb68948e0b8429534380243d063a27a
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.1-pyhd8ed1ab_0.conda#78aff5d2af74e6537c1ca73017f01f4f
|
||||
https://conda.anaconda.org/conda-forge/linux-aarch64/jupyter_core-5.4.0-py39h4420490_0.conda#5b140264aa2a194473cb7ea5aef9f7aa
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-0.2.4-pyhd8ed1ab_0.conda#be5d4633c1cc40343ed417153a184006
|
||||
https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda#a4986c6bb5b0d05a38855b0880a5f425
|
||||
https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda#34f7d568bf59d18e3fef8c405cbece21
|
||||
https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.2-pyhd8ed1ab_0.conda#5ee5ad3af20138020065985de57f0711
|
||||
https://conda.anaconda.org/conda-forge/noarch/certipy-0.1.3-py_0.tar.bz2#23486713ef5712923e7c57cae609b22e
|
||||
https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.1-pyhd8ed1ab_0.conda#daca0665e6fe8a376e48b9f0b5865326
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_client-7.4.9-pyhd8ed1ab_0.conda#5cbf9a31a19d4ef9103adb7d71fd45fd
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_telemetry-0.1.0-pyhd8ed1ab_1.tar.bz2#bb9ebdb6d5aa2622484aff1faceee181
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda#61ba076de6530d9301a0053b02f093d2
|
||||
https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda#4bbbe67d5df19db30f04b8e344dc9976
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipython-8.16.1-pyh0d859eb_0.conda#7e52cb0dbf01b90365bfe433ec8bd3c0
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.7.0-pyhd8ed1ab_2.conda#088f0493279a7f7eebd514df47d65851
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-base-3.1.1-pyh2a2186d_0.conda#78fc5dfd4577a7ba172fa65eb64b6afb
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.25.2-pyh2140261_0.conda#226f2032ec491cc6e9ce66072660e4f6
|
||||
https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.1-pyhd8ed1ab_0.conda#2605fae5ee27100e5f10037baebf4d41
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.9.2-pyhd8ed1ab_0.conda#01e4314c780ca73759c694ce3ece281f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server-1.24.0-pyhd8ed1ab_0.conda#7f0d2ec2d4954188ff23503f39823409
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.9.2-pyhd8ed1ab_0.conda#1ad46253f2eb46fb8c9b2c22b7ca012f
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-resource-usage-0.7.1-pyhd8ed1ab_0.conda#62ed54dc748d19d0cf056a3f90cc8f12
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.0-pyhd8ed1ab_0.conda#a12525b037a703d7f4512da737d700e6
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda#a52834fa7e3d12abc5efdf06b2097a05
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.9.2-pyhd8ed1ab_0.conda#16ccaddfcfa0a1a606a9ecf6a52d6c11
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda#67e0fe74c156267d9159e9133df7fd37
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter_server_ydoc-0.8.0-pyhd8ed1ab_0.conda#780280d42fbcb2eaf654a6ba7a3e5bb5
|
||||
https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.0.0-pyhb4ecaf3_1.conda#a0be31e9bd84d6eae87cdbf74c56b90b
|
||||
https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.6-pyha770c72_0.conda#2e2422cf19f555ef3ddbbeaf2eac7545
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyter-offlinenotebook-0.2.2-pyh1d7be83_0.tar.bz2#fe55056ce4bc4bd4953ba440270735fb
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterlab-3.6.6-pyhd8ed1ab_0.conda#05def61d4c64b0f3161eaeb3b00cc790
|
||||
https://conda.anaconda.org/conda-forge/noarch/jupyterhub-singleuser-3.1.1-pyh2a2186d_0.conda#6d0a3394efe9ff7c0ad1ed03a6ca3720
|
|
@ -1,133 +0,0 @@
|
|||
# AUTO GENERATED FROM environment.py-3.9.yml, DO NOT MANUALLY MODIFY
|
||||
# Frozen on 2021-02-22 12:28:32 UTC
|
||||
name: r2d
|
||||
channels:
|
||||
- conda-forge
|
||||
- defaults
|
||||
- conda-forge/label/broken
|
||||
dependencies:
|
||||
- _libgcc_mutex=0.1=conda_forge
|
||||
- _openmp_mutex=4.5=1_gnu
|
||||
- alembic=1.5.5=pyhd8ed1ab_0
|
||||
- anyio=2.1.0=py39hf3d152e_0
|
||||
- argon2-cffi=20.1.0=py39hbd71b63_2
|
||||
- async_generator=1.10=py_0
|
||||
- attrs=20.3.0=pyhd3deb0d_0
|
||||
- babel=2.9.0=pyhd3deb0d_0
|
||||
- backcall=0.2.0=pyh9f0ad1d_0
|
||||
- backports=1.0=py_2
|
||||
- backports.functools_lru_cache=1.6.1=py_0
|
||||
- bleach=3.3.0=pyh44b312d_0
|
||||
- blinker=1.4=py_1
|
||||
- brotlipy=0.7.0=py39h3811e60_1001
|
||||
- c-ares=1.17.1=h36c2ea0_0
|
||||
- ca-certificates=2020.12.5=ha878542_0
|
||||
- certifi=2020.12.5=py39hf3d152e_1
|
||||
- certipy=0.1.3=py_0
|
||||
- cffi=1.14.5=py39he32792d_0
|
||||
- chardet=4.0.0=py39hf3d152e_1
|
||||
- cryptography=3.4.4=py39h95dcef6_0
|
||||
- decorator=4.4.2=py_0
|
||||
- defusedxml=0.6.0=py_0
|
||||
- entrypoints=0.3=py39hde42818_1002
|
||||
- idna=2.10=pyh9f0ad1d_0
|
||||
- importlib-metadata=3.4.0=py39hf3d152e_0
|
||||
- importlib_metadata=3.4.0=hd8ed1ab_0
|
||||
- ipykernel=5.5.0=py39hef51801_1
|
||||
- ipython=7.20.0=py39hef51801_2
|
||||
- ipython_genutils=0.2.0=py_1
|
||||
- ipywidgets=7.6.3=pyhd3deb0d_0
|
||||
- jedi=0.18.0=py39hf3d152e_2
|
||||
- jinja2=2.11.3=pyh44b312d_0
|
||||
- json5=0.9.5=pyh9f0ad1d_0
|
||||
- jsonschema=3.2.0=py_2
|
||||
- jupyter-offlinenotebook=0.2.1=pyhd8ed1ab_0
|
||||
- jupyter-resource-usage=0.5.1=pyhd8ed1ab_0
|
||||
- jupyter_client=6.1.11=pyhd8ed1ab_1
|
||||
- jupyter_core=4.7.1=py39hf3d152e_0
|
||||
- jupyter_server=1.4.0=py39hf3d152e_0
|
||||
- jupyter_telemetry=0.1.0=pyhd8ed1ab_1
|
||||
- jupyterhub-base=1.3.0=py39hf3d152e_0
|
||||
- jupyterhub-singleuser=1.3.0=py39hf3d152e_0
|
||||
- jupyterlab=3.0.7=pyhd8ed1ab_0
|
||||
- jupyterlab_pygments=0.1.2=pyh9f0ad1d_0
|
||||
- jupyterlab_server=2.3.0=pyhd8ed1ab_0
|
||||
- jupyterlab_widgets=1.0.0=pyhd8ed1ab_1
|
||||
- krb5=1.17.2=h926e7f8_0
|
||||
- ld_impl_linux-64=2.35.1=hea4e1c9_2
|
||||
- libcurl=7.71.1=hcdd3856_8
|
||||
- libedit=3.1.20191231=he28a2e2_2
|
||||
- libev=4.33=h516909a_1
|
||||
- libffi=3.3=h58526e2_2
|
||||
- libgcc-ng=9.3.0=h2828fa1_18
|
||||
- libgomp=9.3.0=h2828fa1_18
|
||||
- libnghttp2=1.43.0=h812cca2_0
|
||||
- libsodium=1.0.18=h516909a_1
|
||||
- libssh2=1.9.0=hab1572f_5
|
||||
- libstdcxx-ng=9.3.0=h6de172a_18
|
||||
- mako=1.1.4=pyh44b312d_0
|
||||
- markupsafe=1.1.1=py39h3811e60_3
|
||||
- mistune=0.8.4=py39h3811e60_1003
|
||||
- nbclassic=0.2.6=pyhd8ed1ab_0
|
||||
- nbclient=0.5.2=pyhd8ed1ab_0
|
||||
- nbconvert=6.0.7=py39hf3d152e_3
|
||||
- nbformat=5.1.2=pyhd8ed1ab_1
|
||||
- ncurses=6.2=h58526e2_4
|
||||
- nest-asyncio=1.4.3=pyhd8ed1ab_0
|
||||
- notebook=6.2.0=py39hf3d152e_0
|
||||
- nteract_on_jupyter=2.1.3=py_0
|
||||
- oauthlib=3.0.1=py_0
|
||||
- openssl=1.1.1j=h7f98852_0
|
||||
- packaging=20.9=pyh44b312d_0
|
||||
- pamela=1.0.0=py_0
|
||||
- pandoc=2.11.4=h7f98852_0
|
||||
- pandocfilters=1.4.2=py_1
|
||||
- parso=0.8.1=pyhd8ed1ab_0
|
||||
- pexpect=4.8.0=pyh9f0ad1d_2
|
||||
- pickleshare=0.7.5=py39hde42818_1002
|
||||
- pip=21.0.1=pyhd8ed1ab_0
|
||||
- prometheus_client=0.9.0=pyhd3deb0d_0
|
||||
- prompt-toolkit=3.0.16=pyha770c72_0
|
||||
- psutil=5.8.0=py39h3811e60_1
|
||||
- ptyprocess=0.7.0=pyhd3deb0d_0
|
||||
- pycparser=2.20=pyh9f0ad1d_2
|
||||
- pycurl=7.43.0.6=py39h72e3413_1
|
||||
- pygments=2.8.0=pyhd8ed1ab_0
|
||||
- pyjwt=2.0.1=pyhd8ed1ab_0
|
||||
- pyopenssl=20.0.1=pyhd8ed1ab_0
|
||||
- pyparsing=2.4.7=pyh9f0ad1d_0
|
||||
- pyrsistent=0.17.3=py39h3811e60_2
|
||||
- pysocks=1.7.1=py39hf3d152e_3
|
||||
- python=3.9.2=hffdb5ce_0_cpython
|
||||
- python-dateutil=2.8.1=py_0
|
||||
- python-editor=1.0.4=py_0
|
||||
- python-json-logger=2.0.1=pyh9f0ad1d_0
|
||||
- python_abi=3.9=1_cp39
|
||||
- pytz=2021.1=pyhd8ed1ab_0
|
||||
- pyzmq=22.0.3=py39hea8fd45_0
|
||||
- readline=8.0=he28a2e2_2
|
||||
- requests=2.25.1=pyhd3deb0d_0
|
||||
- ruamel.yaml=0.16.12=py39h3811e60_2
|
||||
- ruamel.yaml.clib=0.2.2=py39h3811e60_2
|
||||
- send2trash=1.5.0=py_0
|
||||
- setuptools=49.6.0=py39hf3d152e_3
|
||||
- six=1.15.0=pyh9f0ad1d_0
|
||||
- sniffio=1.2.0=py39hf3d152e_1
|
||||
- sqlalchemy=1.3.23=py39h3811e60_0
|
||||
- sqlite=3.34.0=h74cdb3f_0
|
||||
- terminado=0.9.2=py39hf3d152e_0
|
||||
- testpath=0.4.4=py_0
|
||||
- tk=8.6.10=hed695b0_1
|
||||
- tornado=6.1=py39h3811e60_1
|
||||
- traitlets=5.0.5=py_0
|
||||
- tzdata=2021a=he74cb21_0
|
||||
- urllib3=1.26.3=pyhd8ed1ab_0
|
||||
- wcwidth=0.2.5=pyh9f0ad1d_2
|
||||
- webencodings=0.5.1=py_1
|
||||
- wheel=0.36.2=pyhd3deb0d_0
|
||||
- widgetsnbextension=3.5.1=py39hf3d152e_4
|
||||
- xz=5.2.5=h516909a_1
|
||||
- zeromq=4.3.4=h9c3ff4c_0
|
||||
- zipp=3.4.0=py_0
|
||||
- zlib=1.2.11=h516909a_1010
|
||||
prefix: /opt/conda/envs/r2d
|
|
@ -1,12 +1,15 @@
|
|||
# AUTO GENERATED FROM environment.yml, DO NOT MANUALLY MODIFY
|
||||
# Generated on 2021-02-22 12:28:32 UTC
|
||||
# Generated on 2023-10-14 22:05:49 UTC
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- python=3.9.*
|
||||
- ipywidgets==7.6.3
|
||||
- jupyter-offlinenotebook==0.2.1
|
||||
- jupyter-resource-usage==0.5.1
|
||||
- jupyterlab==3.0.7
|
||||
- jupyterhub-singleuser==1.3.0
|
||||
- nbconvert==6.0.7
|
||||
- notebook==6.2.0
|
||||
- nteract_on_jupyter==2.1.3
|
||||
- nodejs=18
|
||||
- pip
|
||||
- ipywidgets==8.* # https://github.com/jupyter-widgets/ipywidgets
|
||||
- jupyter-offlinenotebook==0.2.* # https://github.com/manics/jupyter-offlinenotebook
|
||||
- jupyter-resource-usage==0.7.* # https://github.com/jupyter-server/jupyter-resource-usage
|
||||
- jupyter_server==1.* # https://github.com/jupyter-server/jupyter_server
|
||||
- jupyterhub-singleuser==3.* # https://github.com/jupyterhub/jupyterhub
|
||||
- jupyterlab==3.* # https://github.com/jupyterlab/jupyterlab
|
||||
- notebook==6.* # https://github.com/jupyter/notebook
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- python=3.7
|
||||
- ipywidgets==7.6.3
|
||||
- jupyter-offlinenotebook==0.2.1
|
||||
- jupyter-resource-usage==0.5.1
|
||||
- jupyterlab==3.0.7
|
||||
- jupyterhub-singleuser==1.3.0
|
||||
- nbconvert==6.0.7
|
||||
- notebook==6.2.0
|
||||
- nteract_on_jupyter==2.1.3
|
||||
- python=3.10
|
||||
- nodejs=18
|
||||
- pip
|
||||
- ipywidgets==8.* # https://github.com/jupyter-widgets/ipywidgets
|
||||
- jupyter-offlinenotebook==0.2.* # https://github.com/manics/jupyter-offlinenotebook
|
||||
- jupyter-resource-usage==0.7.* # https://github.com/jupyter-server/jupyter-resource-usage
|
||||
- jupyter_server==1.* # https://github.com/jupyter-server/jupyter_server
|
||||
- jupyterhub-singleuser==3.* # https://github.com/jupyterhub/jupyterhub
|
||||
- jupyterlab==3.* # https://github.com/jupyterlab/jupyterlab
|
||||
- notebook==6.* # https://github.com/jupyter/notebook
|
||||
|
|
|
@ -2,47 +2,35 @@
|
|||
"""
|
||||
Freeze the conda environment.yml
|
||||
|
||||
It runs the freeze in a continuumio/miniconda3 image to ensure portability
|
||||
Using conda-lock
|
||||
|
||||
Usage:
|
||||
|
||||
python freeze.py [3.8]
|
||||
"""
|
||||
|
||||
from datetime import datetime
|
||||
import os
|
||||
import pathlib
|
||||
import shutil
|
||||
from argparse import ArgumentParser
|
||||
from datetime import datetime
|
||||
from subprocess import check_call
|
||||
import sys
|
||||
|
||||
from ruamel.yaml import YAML
|
||||
|
||||
|
||||
DOCKER_IMAGE = "condaforge/mambaforge:4.9.2-5"
|
||||
# set mamba and/or conda versions
|
||||
# if needed to differ from what's in the image
|
||||
MAMBA_VERSION = ""
|
||||
CONDA_VERSION = ""
|
||||
|
||||
HERE = pathlib.Path(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
ENV_FILE = HERE / "environment.yml"
|
||||
FROZEN_FILE = os.path.splitext(ENV_FILE)[0] + ".frozen.yml"
|
||||
|
||||
ENV_FILE_T = HERE / "environment.py-{py}.yml"
|
||||
FROZEN_FILE_T = os.path.splitext(ENV_FILE_T)[0] + ".frozen.yml"
|
||||
|
||||
yaml = YAML(typ="rt")
|
||||
|
||||
|
||||
def freeze(env_file, frozen_file):
|
||||
"""Freeze a conda environment.yml
|
||||
def freeze(env_file, frozen_file, platform="linux-64"):
|
||||
"""Freeze a conda environment
|
||||
|
||||
By running in docker:
|
||||
By running:
|
||||
|
||||
mamba env create
|
||||
mamba env export
|
||||
conda-lock --mamba --platform=linux-64 -f environment.yml
|
||||
|
||||
Result will be stored in frozen_file
|
||||
"""
|
||||
|
@ -58,43 +46,33 @@ def freeze(env_file, frozen_file):
|
|||
return
|
||||
print(f"Freezing {env_file} -> {frozen_file}")
|
||||
|
||||
# FIXME: conda-lock 0.8 requires {platform} in template
|
||||
# https://github.com/conda-incubator/conda-lock/pull/78
|
||||
frozen_template = str(frozen_dest) + ".{platform}"
|
||||
frozen_tempfile = pathlib.Path(frozen_template.format(platform=platform))
|
||||
|
||||
check_call(
|
||||
[
|
||||
"conda-lock",
|
||||
# FIXME: adopt micromamba after ordering is fixed
|
||||
# https://github.com/conda-incubator/conda-lock/issues/79
|
||||
"--mamba",
|
||||
"--kind=explicit",
|
||||
f"--platform={platform}",
|
||||
f"--filename-template={frozen_template}",
|
||||
f"--file={env_file}",
|
||||
]
|
||||
)
|
||||
|
||||
with frozen_dest.open("w") as f:
|
||||
f.write(
|
||||
f"# AUTO GENERATED FROM {env_file.relative_to(HERE)}, DO NOT MANUALLY MODIFY\n"
|
||||
)
|
||||
f.write(f"# Frozen on {datetime.utcnow():%Y-%m-%d %H:%M:%S UTC}\n")
|
||||
with frozen_tempfile.open() as temp:
|
||||
f.write(temp.read())
|
||||
|
||||
check_call(
|
||||
[
|
||||
"docker",
|
||||
"run",
|
||||
"--rm",
|
||||
"-v" f"{HERE}:/r2d",
|
||||
"-it",
|
||||
DOCKER_IMAGE,
|
||||
"sh",
|
||||
"-c",
|
||||
"; ".join(
|
||||
[
|
||||
"set -ex",
|
||||
"conda config --set channel_priority strict",
|
||||
"conda config --add channels conda-forge",
|
||||
f"mamba install -yq -S mamba={MAMBA_VERSION}"
|
||||
if MAMBA_VERSION
|
||||
else "true",
|
||||
f"mamba install -yq -S conda={CONDA_VERSION}"
|
||||
if CONDA_VERSION
|
||||
else "true",
|
||||
"conda config --system --set auto_update_conda false",
|
||||
f"mamba env create -v -f /r2d/{env_file.relative_to(HERE)} -n r2d",
|
||||
# add conda-forge broken channel as lowest priority in case
|
||||
# any of our frozen packages are marked as broken after freezing
|
||||
"conda config --append channels conda-forge/label/broken",
|
||||
f"mamba env export -n r2d >> /r2d/{frozen_file.relative_to(HERE)}",
|
||||
]
|
||||
),
|
||||
]
|
||||
)
|
||||
os.remove(frozen_tempfile)
|
||||
|
||||
|
||||
def set_python(py_env_file, py):
|
||||
|
@ -125,13 +103,30 @@ def set_python(py_env_file, py):
|
|||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# allow specifying which Pythons to update on argv
|
||||
pys = sys.argv[1:] or ("2.7", "3.6", "3.7", "3.8", "3.9")
|
||||
default_py = "3.7"
|
||||
for py in pys:
|
||||
env_file = pathlib.Path(str(ENV_FILE_T).format(py=py))
|
||||
set_python(env_file, py)
|
||||
frozen_file = pathlib.Path(os.path.splitext(env_file)[0] + ".frozen.yml")
|
||||
freeze(env_file, frozen_file)
|
||||
if py == default_py:
|
||||
shutil.copy(frozen_file, FROZEN_FILE)
|
||||
parser = ArgumentParser(
|
||||
description=(
|
||||
"Refreeze conda environments. See "
|
||||
"https://repo2docker.readthedocs.io/en/latest/contributing/tasks.html#update-and-freeze-buildpack-dependencies"
|
||||
)
|
||||
)
|
||||
parser.add_argument(
|
||||
"py",
|
||||
nargs="*",
|
||||
help="Python version(s) to update and freeze",
|
||||
default=("3.7", "3.8", "3.9", "3.10", "3.11"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"platform",
|
||||
nargs="*",
|
||||
help="Platform(s) to update and freeze",
|
||||
default=("linux-64", "linux-aarch64"),
|
||||
)
|
||||
args = parser.parse_args()
|
||||
for py in args.py:
|
||||
for platform in args.platform:
|
||||
env_file = pathlib.Path(str(ENV_FILE_T).format(py=py))
|
||||
set_python(env_file, py)
|
||||
frozen_file = pathlib.Path(
|
||||
os.path.splitext(env_file)[0] + f"-{platform}.lock"
|
||||
)
|
||||
freeze(env_file, frozen_file, platform)
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
#!/bin/bash
|
||||
# This downloads and installs a pinned version of micromamba
|
||||
# and sets up the base environment
|
||||
set -ex
|
||||
|
||||
cd $(dirname $0)
|
||||
|
||||
export MAMBA_VERSION=1.5.7
|
||||
export CONDA_VERSION=24.3.0
|
||||
|
||||
URL="https://anaconda.org/conda-forge/micromamba/${MAMBA_VERSION}/download/${CONDA_PLATFORM}/micromamba-${MAMBA_VERSION}-0.tar.bz2"
|
||||
|
||||
# make sure we don't do anything funky with user's $HOME
|
||||
# since this is run as root
|
||||
unset HOME
|
||||
mkdir -p ${CONDA_DIR}
|
||||
|
||||
export MICROMAMBA_EXE="/usr/local/bin/micromamba"
|
||||
|
||||
time wget -qO- ${URL} | tar -xvj bin/micromamba
|
||||
mv bin/micromamba "$MICROMAMBA_EXE"
|
||||
chmod 0755 "$MICROMAMBA_EXE"
|
||||
|
||||
eval "$(${MICROMAMBA_EXE} shell hook -p ${CONDA_DIR} -s posix)"
|
||||
|
||||
micromamba activate
|
||||
|
||||
export PATH="${PWD}/bin:$PATH"
|
||||
|
||||
cat <<EOT >> ${CONDA_DIR}/.condarc
|
||||
channels:
|
||||
- conda-forge
|
||||
- defaults
|
||||
auto_update_conda: false
|
||||
show_channel_urls: true
|
||||
update_dependencies: false
|
||||
# channel_priority: flexible
|
||||
EOT
|
||||
|
||||
micromamba install conda=${CONDA_VERSION} mamba=${MAMBA_VERSION} -y
|
||||
|
||||
echo "installing notebook env:"
|
||||
cat "${NB_ENVIRONMENT_FILE}"
|
||||
|
||||
|
||||
time ${MAMBA_EXE} create -p ${NB_PYTHON_PREFIX} --file "${NB_ENVIRONMENT_FILE}"
|
||||
|
||||
if [[ ! -z "${NB_REQUIREMENTS_FILE:-}" ]]; then
|
||||
echo "installing pip requirements"
|
||||
cat "${NB_REQUIREMENTS_FILE}"
|
||||
${NB_PYTHON_PREFIX}/bin/python -mpip install --no-cache --no-deps -r "${NB_REQUIREMENTS_FILE}"
|
||||
fi
|
||||
# empty conda history file,
|
||||
# which seems to result in some effective pinning of packages in the initial env,
|
||||
# which we don't intend.
|
||||
# this file must not be *removed*, however
|
||||
echo '' > ${NB_PYTHON_PREFIX}/conda-meta/history
|
||||
|
||||
if [[ ! -z "${KERNEL_ENVIRONMENT_FILE:-}" ]]; then
|
||||
# install kernel env and register kernelspec
|
||||
echo "installing kernel env:"
|
||||
cat "${KERNEL_ENVIRONMENT_FILE}"
|
||||
time ${MAMBA_EXE} create -p ${KERNEL_PYTHON_PREFIX} --file "${KERNEL_ENVIRONMENT_FILE}"
|
||||
|
||||
if [[ ! -z "${KERNEL_REQUIREMENTS_FILE:-}" ]]; then
|
||||
echo "installing pip requirements for kernel"
|
||||
cat "${KERNEL_REQUIREMENTS_FILE}"
|
||||
${KERNEL_PYTHON_PREFIX}/bin/python -mpip install --no-cache --no-deps -r "${KERNEL_REQUIREMENTS_FILE}"
|
||||
fi
|
||||
|
||||
${KERNEL_PYTHON_PREFIX}/bin/ipython kernel install --prefix "${NB_PYTHON_PREFIX}"
|
||||
echo '' > ${KERNEL_PYTHON_PREFIX}/conda-meta/history
|
||||
${MAMBA_EXE} list -p ${KERNEL_PYTHON_PREFIX}
|
||||
fi
|
||||
|
||||
# Clean things out!
|
||||
time ${MAMBA_EXE} clean --all -f -y
|
||||
|
||||
# Remove the pip cache created as part of installing micromamba
|
||||
rm -rf /root/.cache
|
||||
|
||||
chown -R $NB_USER:$NB_USER ${CONDA_DIR}
|
||||
|
||||
${MAMBA_EXE} list -p ${NB_PYTHON_PREFIX}
|
||||
|
||||
# Set NPM config
|
||||
${NB_PYTHON_PREFIX}/bin/npm config --global set prefix ${NPM_DIR}
|
|
@ -1,80 +0,0 @@
|
|||
#!/bin/bash
|
||||
# This downloads and installs a pinned version of miniforge
|
||||
# and sets up the base environment
|
||||
set -ex
|
||||
|
||||
|
||||
cd $(dirname $0)
|
||||
MINIFORGE_VERSION=4.9.2-2
|
||||
MAMBA_VERSION=0.7.4
|
||||
# SHA256 for installers can be obtained from https://github.com/conda-forge/miniforge/releases
|
||||
SHA256SUM="7a7bfaff87680298304a97ba69bcf92f66c810995a7155a2918b99fafb8ca1dc"
|
||||
|
||||
URL="https://github.com/conda-forge/miniforge/releases/download/${MINIFORGE_VERSION}/Mambaforge-${MINIFORGE_VERSION}-Linux-x86_64.sh"
|
||||
INSTALLER_PATH=/tmp/miniforge-installer.sh
|
||||
|
||||
# make sure we don't do anything funky with user's $HOME
|
||||
# since this is run as root
|
||||
unset HOME
|
||||
|
||||
time wget --quiet $URL -O ${INSTALLER_PATH}
|
||||
chmod +x ${INSTALLER_PATH}
|
||||
|
||||
# check sha256 checksum
|
||||
if ! echo "${SHA256SUM} ${INSTALLER_PATH}" | sha256sum --quiet -c -; then
|
||||
echo "sha256 mismatch for ${INSTALLER_PATH}, exiting!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
time bash ${INSTALLER_PATH} -b -p ${CONDA_DIR}
|
||||
export PATH="${CONDA_DIR}/bin:$PATH"
|
||||
|
||||
# Preserve behavior of miniconda - packages come from conda-forge + defaults
|
||||
conda config --system --append channels defaults
|
||||
|
||||
# Do not attempt to auto update conda or dependencies
|
||||
conda config --system --set auto_update_conda false
|
||||
conda config --system --set show_channel_urls true
|
||||
|
||||
# bug in conda 4.3.>15 prevents --set update_dependencies
|
||||
echo 'update_dependencies: false' >> ${CONDA_DIR}/.condarc
|
||||
|
||||
# avoid future changes to default channel_priority behavior
|
||||
conda config --system --set channel_priority "flexible"
|
||||
|
||||
time mamba install -y mamba==${MAMBA_VERSION}
|
||||
|
||||
echo "installing notebook env:"
|
||||
cat /tmp/environment.yml
|
||||
time mamba env create -p ${NB_PYTHON_PREFIX} -f /tmp/environment.yml
|
||||
|
||||
# empty conda history file,
|
||||
# which seems to result in some effective pinning of packages in the initial env,
|
||||
# which we don't intend.
|
||||
# this file must not be *removed*, however
|
||||
echo '' > ${NB_PYTHON_PREFIX}/conda-meta/history
|
||||
|
||||
if [[ -f /tmp/kernel-environment.yml ]]; then
|
||||
# install kernel env and register kernelspec
|
||||
echo "installing kernel env:"
|
||||
cat /tmp/kernel-environment.yml
|
||||
|
||||
time mamba env create -p ${KERNEL_PYTHON_PREFIX} -f /tmp/kernel-environment.yml
|
||||
${KERNEL_PYTHON_PREFIX}/bin/ipython kernel install --prefix "${NB_PYTHON_PREFIX}"
|
||||
echo '' > ${KERNEL_PYTHON_PREFIX}/conda-meta/history
|
||||
mamba list -p ${KERNEL_PYTHON_PREFIX}
|
||||
fi
|
||||
|
||||
# Clean things out!
|
||||
time mamba clean --all -f -y
|
||||
|
||||
# Remove the big installer so we don't increase docker image size too much
|
||||
rm ${INSTALLER_PATH}
|
||||
|
||||
# Remove the pip cache created as part of installing miniforge
|
||||
rm -rf /root/.cache
|
||||
|
||||
chown -R $NB_USER:$NB_USER ${CONDA_DIR}
|
||||
|
||||
mamba list -n root
|
||||
mamba list -p ${NB_PYTHON_PREFIX}
|
|
@ -1,7 +1,10 @@
|
|||
"""Generates a variety of Dockerfiles based on an input matrix
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
import docker
|
||||
|
||||
from .base import BuildPack
|
||||
|
||||
|
||||
|
@ -28,14 +31,15 @@ class DockerBuildPack(BuildPack):
|
|||
build_args,
|
||||
cache_from,
|
||||
extra_build_kwargs,
|
||||
platform=None,
|
||||
):
|
||||
"""Build a Docker image based on the Dockerfile in the source repo."""
|
||||
# If you work on this bit of code check the corresponding code in
|
||||
# buildpacks/base.py where it is duplicated
|
||||
if not isinstance(memory_limit, int):
|
||||
raise ValueError(
|
||||
"The memory limit has to be specified as an"
|
||||
"integer but is '{}'".format(type(memory_limit))
|
||||
"The memory limit has to be specified as an "
|
||||
f"integer but is '{type(memory_limit)}'"
|
||||
)
|
||||
limits = {}
|
||||
if memory_limit:
|
||||
|
@ -50,14 +54,12 @@ class DockerBuildPack(BuildPack):
|
|||
dockerfile=self.binder_path(self.dockerfile),
|
||||
tag=image_spec,
|
||||
buildargs=build_args,
|
||||
decode=True,
|
||||
forcerm=True,
|
||||
rm=True,
|
||||
container_limits=limits,
|
||||
cache_from=cache_from,
|
||||
labels=self.get_labels(),
|
||||
platform=platform,
|
||||
)
|
||||
|
||||
build_kwargs.update(extra_build_kwargs)
|
||||
|
||||
for line in client.build(**build_kwargs):
|
||||
yield line
|
||||
yield from client.build(**build_kwargs)
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
"""Generates a Dockerfile based on an input matrix for Julia"""
|
||||
|
||||
import functools
|
||||
import os
|
||||
from functools import lru_cache
|
||||
|
||||
import requests
|
||||
import semver
|
||||
import toml
|
||||
|
||||
from ...semver import find_semver_match
|
||||
from ..python import PythonBuildPack
|
||||
from .semver import find_semver_match, semver
|
||||
|
||||
|
||||
class JuliaProjectTomlBuildPack(PythonBuildPack):
|
||||
|
@ -16,14 +21,14 @@ class JuliaProjectTomlBuildPack(PythonBuildPack):
|
|||
# Note that these must remain ordered, in order for the find_semver_match()
|
||||
# function to behave correctly.
|
||||
@property
|
||||
@functools.lru_cache(maxsize=1)
|
||||
@lru_cache(maxsize=1)
|
||||
def all_julias(self):
|
||||
try:
|
||||
json = requests.get(
|
||||
"https://julialang-s3.julialang.org/bin/versions.json"
|
||||
).json()
|
||||
except Exception as e:
|
||||
raise RuntimeError("Failed to fetch available Julia versions: {e}")
|
||||
raise RuntimeError(f"Failed to fetch available Julia versions: {e}")
|
||||
vers = [semver.VersionInfo.parse(v) for v in json.keys()]
|
||||
# filter out pre-release versions not supported by find_semver_match()
|
||||
filtered_vers = [v for v in vers if v.prerelease is None]
|
||||
|
@ -47,13 +52,24 @@ class JuliaProjectTomlBuildPack(PythonBuildPack):
|
|||
compat = project_toml["compat"]["julia"]
|
||||
except:
|
||||
# Default version which needs to be manually updated with new major.minor releases
|
||||
compat = "1.5"
|
||||
#
|
||||
# NOTE: Updates to the default version should go hand in hand with
|
||||
# updates to tests/julia/project/verify where is intent to
|
||||
# test the version.
|
||||
#
|
||||
# FIXME: When compat = "1.6" is set below and passed to
|
||||
# find_semver_match, we get 1.8.2 as of 2022-10-09. We should
|
||||
# clarify the desired behavior and have a unit test of
|
||||
# find_semver_match to validate it.
|
||||
#
|
||||
compat = "1.6"
|
||||
|
||||
match = find_semver_match(compat, self.all_julias)
|
||||
if match is None:
|
||||
raise RuntimeError("Failed to find a matching Julia version: {compat}")
|
||||
return match
|
||||
|
||||
@lru_cache()
|
||||
def get_build_env(self):
|
||||
"""Get additional environment settings for Julia and Jupyter
|
||||
|
||||
|
@ -66,23 +82,41 @@ class JuliaProjectTomlBuildPack(PythonBuildPack):
|
|||
will be installed
|
||||
- `JULIA_DEPOT_PATH`: path where Julia libraries are installed.
|
||||
- `JULIA_VERSION`: default version of julia to be installed
|
||||
- `JULIA_ARCH`: machine architecture used in Julia download URLs
|
||||
- `JULIA_ARCH_SHORT`: machine architecture used in Julia download URLs
|
||||
- `JUPYTER`: environment variable required by IJulia to point to
|
||||
the `jupyter` executable
|
||||
|
||||
For example, a tuple may be `('JULIA_VERSION', '0.6.0')`.
|
||||
|
||||
"""
|
||||
if self.platform == "linux/arm64":
|
||||
julia_arch = julia_arch_short = "aarch64"
|
||||
else:
|
||||
julia_arch = "x86_64"
|
||||
julia_arch_short = "x64"
|
||||
return super().get_build_env() + [
|
||||
("JULIA_PATH", "${APP_BASE}/julia"),
|
||||
("JULIA_DEPOT_PATH", "${JULIA_PATH}/pkg"),
|
||||
("JULIA_VERSION", self.julia_version),
|
||||
("JULIA_ARCH", julia_arch),
|
||||
("JULIA_ARCH_SHORT", julia_arch_short),
|
||||
("JUPYTER", "${NB_PYTHON_PREFIX}/bin/jupyter"),
|
||||
("JUPYTER_DATA_DIR", "${NB_PYTHON_PREFIX}/share/jupyter"),
|
||||
]
|
||||
|
||||
def get_env(self):
|
||||
return super().get_env() + [("JULIA_PROJECT", "${REPO_DIR}")]
|
||||
@property
|
||||
def project_dir(self):
|
||||
if self.binder_dir:
|
||||
return "${REPO_DIR}/" + self.binder_dir
|
||||
else:
|
||||
return "${REPO_DIR}"
|
||||
|
||||
@lru_cache()
|
||||
def get_env(self):
|
||||
return super().get_env() + [("JULIA_PROJECT", self.project_dir)]
|
||||
|
||||
@lru_cache()
|
||||
def get_path(self):
|
||||
"""Adds path to Julia binaries to user's PATH.
|
||||
|
||||
|
@ -93,6 +127,7 @@ class JuliaProjectTomlBuildPack(PythonBuildPack):
|
|||
"""
|
||||
return super().get_path() + ["${JULIA_PATH}/bin"]
|
||||
|
||||
@lru_cache()
|
||||
def get_build_scripts(self):
|
||||
"""
|
||||
Return series of build-steps common to "ALL" Julia repositories
|
||||
|
@ -109,7 +144,7 @@ class JuliaProjectTomlBuildPack(PythonBuildPack):
|
|||
"root",
|
||||
r"""
|
||||
mkdir -p ${JULIA_PATH} && \
|
||||
curl -sSL "https://julialang-s3.julialang.org/bin/linux/x64/${JULIA_VERSION%[.-]*}/julia-${JULIA_VERSION}-linux-x86_64.tar.gz" | tar -xz -C ${JULIA_PATH} --strip-components 1
|
||||
curl -sSL "https://julialang-s3.julialang.org/bin/linux/${JULIA_ARCH_SHORT}/${JULIA_VERSION%[.-]*}/julia-${JULIA_VERSION}-linux-${JULIA_ARCH}.tar.gz" | tar -xz -C ${JULIA_PATH} --strip-components 1
|
||||
""",
|
||||
),
|
||||
(
|
||||
|
@ -121,6 +156,7 @@ class JuliaProjectTomlBuildPack(PythonBuildPack):
|
|||
),
|
||||
]
|
||||
|
||||
@lru_cache()
|
||||
def get_assemble_scripts(self):
|
||||
"""
|
||||
Return series of build-steps specific to "this" Julia repository
|
||||
|
@ -135,15 +171,19 @@ class JuliaProjectTomlBuildPack(PythonBuildPack):
|
|||
The parent, CondaBuildPack, will add the build steps for
|
||||
any needed Python packages found in environment.yml.
|
||||
"""
|
||||
return super().get_assemble_scripts() + [
|
||||
scripts = super().get_assemble_scripts()
|
||||
scripts.append(
|
||||
(
|
||||
"${NB_USER}",
|
||||
r"""
|
||||
JULIA_PROJECT="" julia -e "using Pkg; Pkg.add(\"IJulia\"); using IJulia; installkernel(\"Julia\", \"--project=${REPO_DIR}\");" && \
|
||||
julia --project=${REPO_DIR} -e 'using Pkg; Pkg.instantiate(); Pkg.resolve(); pkg"precompile"'
|
||||
""",
|
||||
JULIA_PROJECT="" julia -e "using Pkg; Pkg.add(\"IJulia\"); using IJulia; installkernel(\"Julia\", \"--project={project}\");" && \
|
||||
julia --project={project} -e 'using Pkg; Pkg.instantiate(); Pkg.resolve(); pkg"precompile"'
|
||||
""".format(
|
||||
project=self.project_dir
|
||||
),
|
||||
)
|
||||
]
|
||||
)
|
||||
return scripts
|
||||
|
||||
def detect(self):
|
||||
"""
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
"""Generates a Dockerfile based on an input matrix with REQUIRE for legacy Julia"""
|
||||
|
||||
from distutils.version import LooseVersion as V
|
||||
import os
|
||||
from functools import lru_cache
|
||||
|
||||
from ...semver import parse_version as V
|
||||
from ..python import PythonBuildPack
|
||||
|
||||
|
||||
|
@ -54,6 +55,7 @@ class JuliaRequireBuildPack(PythonBuildPack):
|
|||
self._julia_version = julia_version
|
||||
return self._julia_version
|
||||
|
||||
@lru_cache()
|
||||
def get_build_env(self):
|
||||
"""Get additional environment settings for Julia and Jupyter
|
||||
|
||||
|
@ -69,12 +71,27 @@ class JuliaRequireBuildPack(PythonBuildPack):
|
|||
- `JULIA_DEPOT_PATH`: path where Julia libraries are installed.
|
||||
Similar to JULIA_PKGDIR, used in 1.x.
|
||||
- `JULIA_VERSION`: default version of julia to be installed
|
||||
- `JULIA_ARCH`: machine architecture used in Julia download URLs
|
||||
- `JULIA_ARCH_SHORT`: machine architecture used in Julia download URLs
|
||||
- `JUPYTER`: environment variable required by IJulia to point to
|
||||
the `jupyter` executable
|
||||
|
||||
For example, a tuple may be `('JULIA_VERSION', '0.6.0')`.
|
||||
|
||||
"""
|
||||
if self.platform == "linux/arm64":
|
||||
julia_arch = julia_arch_short = "aarch64"
|
||||
else:
|
||||
julia_arch = "x86_64"
|
||||
julia_arch_short = "x64"
|
||||
|
||||
if V(self.julia_version) < V("0.7"):
|
||||
# IJulia with Julia 0.6 isn't compatible with more recent jupyter-core
|
||||
# point it to the one in the kernel env
|
||||
# I _think_ this is only relevant during installation
|
||||
jupyter = "${KERNEL_PYTHON_PREFIX}/bin/jupyter"
|
||||
else:
|
||||
jupyter = "${NB_PYTHON_PREFIX}/bin/jupyter"
|
||||
return super().get_build_env() + [
|
||||
("JULIA_PATH", "${APP_BASE}/julia"),
|
||||
("JULIA_HOME", "${JULIA_PATH}/bin"), # julia <= 0.6
|
||||
|
@ -82,9 +99,12 @@ class JuliaRequireBuildPack(PythonBuildPack):
|
|||
("JULIA_PKGDIR", "${JULIA_PATH}/pkg"),
|
||||
("JULIA_DEPOT_PATH", "${JULIA_PKGDIR}"), # julia >= 0.7
|
||||
("JULIA_VERSION", self.julia_version),
|
||||
("JUPYTER", "${NB_PYTHON_PREFIX}/bin/jupyter"),
|
||||
("JULIA_ARCH", julia_arch),
|
||||
("JULIA_ARCH_SHORT", julia_arch_short),
|
||||
("JUPYTER", jupyter),
|
||||
]
|
||||
|
||||
@lru_cache()
|
||||
def get_path(self):
|
||||
"""Adds path to Julia binaries to user's PATH.
|
||||
|
||||
|
@ -95,6 +115,7 @@ class JuliaRequireBuildPack(PythonBuildPack):
|
|||
"""
|
||||
return super().get_path() + ["${JULIA_HOME}"]
|
||||
|
||||
@lru_cache()
|
||||
def get_build_scripts(self):
|
||||
"""
|
||||
Return series of build-steps common to "ALL" Julia repositories
|
||||
|
@ -111,7 +132,7 @@ class JuliaRequireBuildPack(PythonBuildPack):
|
|||
"root",
|
||||
r"""
|
||||
mkdir -p ${JULIA_PATH} && \
|
||||
curl -sSL "https://julialang-s3.julialang.org/bin/linux/x64/${JULIA_VERSION%[.-]*}/julia-${JULIA_VERSION}-linux-x86_64.tar.gz" | tar -xz -C ${JULIA_PATH} --strip-components 1
|
||||
curl -sSL "https://julialang-s3.julialang.org/bin/linux/${JULIA_ARCH_SHORT}/${JULIA_VERSION%[.-]*}/julia-${JULIA_VERSION}-linux-${JULIA_ARCH}.tar.gz" | tar -xz -C ${JULIA_PATH} --strip-components 1
|
||||
""",
|
||||
),
|
||||
(
|
||||
|
@ -132,6 +153,7 @@ class JuliaRequireBuildPack(PythonBuildPack):
|
|||
),
|
||||
]
|
||||
|
||||
@lru_cache()
|
||||
def get_assemble_scripts(self):
|
||||
"""
|
||||
Return series of build-steps specific to "this" Julia repository
|
||||
|
@ -153,12 +175,13 @@ class JuliaRequireBuildPack(PythonBuildPack):
|
|||
r"""
|
||||
julia /tmp/install-repo-dependencies.jl "%(require)s"
|
||||
"""
|
||||
% {"require": require}
|
||||
% {"require": require},
|
||||
# TODO: For some reason, `rm`ing the file fails with permission denied.
|
||||
# && rm /tmp/install-repo-dependencies.jl
|
||||
)
|
||||
]
|
||||
|
||||
@lru_cache()
|
||||
def get_build_script_files(self):
|
||||
files = {
|
||||
"julia/install-repo-dependencies.jl": "/tmp/install-repo-dependencies.jl"
|
||||
|
|
|
@ -7,6 +7,7 @@ and IPython kernel.
|
|||
|
||||
Note: This buildpack has been deprecated.
|
||||
"""
|
||||
|
||||
import logging
|
||||
|
||||
|
||||
|
@ -16,11 +17,14 @@ class LegacyBinderDockerBuildPack:
|
|||
This buildpack has been deprecated.
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def detect(self):
|
||||
"""Check if current repo should be built with the Legacy BuildPack."""
|
||||
log = logging.getLogger("repo2docker")
|
||||
try:
|
||||
with open("Dockerfile", "r") as f:
|
||||
with open("Dockerfile") as f:
|
||||
for line in f:
|
||||
if line.startswith("FROM"):
|
||||
if "andrewosh/binder-base" in line.split("#")[0].lower():
|
||||
|
|
|
@ -1,24 +1,30 @@
|
|||
"""BuildPack for nixpkgs environments"""
|
||||
import os
|
||||
|
||||
from ..base import BuildPack, BaseImage
|
||||
import os
|
||||
from functools import lru_cache
|
||||
|
||||
from ..base import BaseImage
|
||||
|
||||
|
||||
class NixBuildPack(BaseImage):
|
||||
"""A nix Package Manager BuildPack"""
|
||||
|
||||
@lru_cache()
|
||||
def get_path(self):
|
||||
"""Return paths to be added to PATH environemnt variable"""
|
||||
return super().get_path() + ["/home/${NB_USER}/.nix-profile/bin"]
|
||||
|
||||
@lru_cache()
|
||||
def get_env(self):
|
||||
"""Ordered list of environment variables to be set for this image"""
|
||||
|
||||
return super().get_env() + [
|
||||
("NIX_PATH", "nixpkgs=/home/${NB_USER}/.nix-defexpr/channels/nixpkgs"),
|
||||
("NIX_SSL_CERT_FILE", "/etc/ssl/certs/ca-certificates.crt"),
|
||||
("GIT_SSL_CAINFO", "/etc/ssl/certs/ca-certificates.crt"),
|
||||
]
|
||||
|
||||
@lru_cache()
|
||||
def get_build_scripts(self):
|
||||
"""
|
||||
Return series of build-steps common to all nix repositories.
|
||||
|
@ -30,6 +36,10 @@ class NixBuildPack(BaseImage):
|
|||
- install nix package manager for user
|
||||
|
||||
"""
|
||||
if self.platform == "linux/arm64":
|
||||
nix_arch = "aarch64"
|
||||
else:
|
||||
nix_arch = "x86_64"
|
||||
return super().get_build_scripts() + [
|
||||
(
|
||||
"root",
|
||||
|
@ -43,13 +53,14 @@ class NixBuildPack(BaseImage):
|
|||
),
|
||||
(
|
||||
"${NB_USER}",
|
||||
"""
|
||||
bash /home/${NB_USER}/.local/bin/install-nix.bash && \
|
||||
rm /home/${NB_USER}/.local/bin/install-nix.bash
|
||||
f"""
|
||||
NIX_ARCH={nix_arch} bash /home/${{NB_USER}}/.local/bin/install-nix.bash && \
|
||||
rm /home/${{NB_USER}}/.local/bin/install-nix.bash
|
||||
""",
|
||||
),
|
||||
]
|
||||
|
||||
@lru_cache()
|
||||
def get_build_script_files(self):
|
||||
"""Dict of files to be copied to the container image for use in building"""
|
||||
return {
|
||||
|
@ -57,21 +68,21 @@ class NixBuildPack(BaseImage):
|
|||
"nix/nix-shell-wrapper": "/usr/local/bin/nix-shell-wrapper",
|
||||
}
|
||||
|
||||
@lru_cache()
|
||||
def get_assemble_scripts(self):
|
||||
"""Return series of build-steps specific to this source repository."""
|
||||
return super().get_assemble_scripts() + [
|
||||
(
|
||||
"${NB_USER}",
|
||||
"""
|
||||
f"""
|
||||
nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs && \
|
||||
nix-channel --update && \
|
||||
nix-shell {}
|
||||
""".format(
|
||||
self.binder_path("default.nix")
|
||||
),
|
||||
nix-shell {self.binder_path("default.nix")}
|
||||
""",
|
||||
)
|
||||
]
|
||||
|
||||
@lru_cache()
|
||||
def get_start_script(self):
|
||||
"""The path to a script to be executed as ENTRYPOINT"""
|
||||
# the shell wrapper script duplicates the behaviour of other buildpacks
|
||||
|
|
|
@ -2,13 +2,17 @@
|
|||
# This downloads and installs a pinned version of nix
|
||||
set -ex
|
||||
|
||||
NIX_VERSION="2.3.9"
|
||||
NIX_SHA256="49763fd7fa06bcb712ced2f3f11afd275e3a4d7bc5ff0d6fd1d50a4c3ce7bbf4"
|
||||
NIX_VERSION="2.13.2"
|
||||
if [ "$NIX_ARCH" = "aarch64" ]; then
|
||||
NIX_SHA256="4ae275a46a2441d3459ae389a90ce6e8f7eff12c2a084b2d003ba6f8d0899603"
|
||||
else
|
||||
NIX_SHA256="beaec0f28899c22f33adbe30e4ecfceef87b797278c5210ee693e22e9719dfb4"
|
||||
fi
|
||||
|
||||
# Do all our operations in /tmp, since we can't rely on current directory being writeable yet.
|
||||
cd /tmp
|
||||
wget --quiet https://nixos.org/releases/nix/nix-$NIX_VERSION/nix-$NIX_VERSION-x86_64-linux.tar.xz
|
||||
echo "$NIX_SHA256 nix-$NIX_VERSION-x86_64-linux.tar.xz" | sha256sum -c
|
||||
tar xJf nix-*-x86_64-linux.tar.xz
|
||||
sh nix-*-x86_64-linux/install
|
||||
rm -r nix-*-x86_64-linux*
|
||||
wget --quiet https://nixos.org/releases/nix/nix-$NIX_VERSION/nix-$NIX_VERSION-$NIX_ARCH-linux.tar.xz
|
||||
echo "$NIX_SHA256 nix-$NIX_VERSION-$NIX_ARCH-linux.tar.xz" | sha256sum -c
|
||||
tar xJf nix-*-$NIX_ARCH-linux.tar.xz
|
||||
sh nix-*-$NIX_ARCH-linux/install
|
||||
rm -r nix-*-$NIX_ARCH-linux*
|
||||
|
|
|
@ -8,9 +8,11 @@ same as the Python or Conda build packs.
|
|||
import json
|
||||
import os
|
||||
import re
|
||||
from functools import lru_cache
|
||||
|
||||
import toml
|
||||
|
||||
from ...semver import parse_version as V
|
||||
from ..conda import CondaBuildPack
|
||||
|
||||
VERSION_PAT = re.compile(r"\d+(\.\d+)*")
|
||||
|
@ -63,17 +65,22 @@ class PipfileBuildPack(CondaBuildPack):
|
|||
|
||||
# extract major.minor
|
||||
if py_version:
|
||||
if len(py_version.split(".")) == 1:
|
||||
self._python_version = self.major_pythons.get(py_version[0])
|
||||
py_version_info = py_version.split(".")
|
||||
if len(py_version_info) == 1:
|
||||
self._python_version = self.major_pythons[py_version_info[0]]
|
||||
else:
|
||||
# return major.minor
|
||||
self._python_version = ".".join(py_version.split(".")[:2])
|
||||
self._python_version = ".".join(py_version_info[:2])
|
||||
return self._python_version
|
||||
else:
|
||||
# use the default Python
|
||||
self._python_version = self.major_pythons["3"]
|
||||
self.log.warning(
|
||||
f"Python version unspecified, using current default Python version {self._python_version}. This will change in the future."
|
||||
)
|
||||
return self._python_version
|
||||
|
||||
@lru_cache()
|
||||
def get_preassemble_script_files(self):
|
||||
"""Return files needed for preassembly"""
|
||||
files = super().get_preassemble_script_files()
|
||||
|
@ -83,15 +90,25 @@ class PipfileBuildPack(CondaBuildPack):
|
|||
files[path] = path
|
||||
return files
|
||||
|
||||
@lru_cache()
|
||||
def get_preassemble_scripts(self):
|
||||
"""scripts to run prior to staging the repo contents"""
|
||||
scripts = super().get_preassemble_scripts()
|
||||
# install pipenv to install dependencies within Pipfile.lock or Pipfile
|
||||
if V(self.python_version) < V("3.6"):
|
||||
# last pipenv version to support 2.7, 3.5
|
||||
pipenv_version = "2021.5.29"
|
||||
else:
|
||||
pipenv_version = "2022.1.8"
|
||||
scripts.append(
|
||||
("${NB_USER}", "${KERNEL_PYTHON_PREFIX}/bin/pip install pipenv==2018.11.26")
|
||||
(
|
||||
"${NB_USER}",
|
||||
f"${{KERNEL_PYTHON_PREFIX}}/bin/pip install --no-cache-dir pipenv=={pipenv_version}",
|
||||
)
|
||||
)
|
||||
return scripts
|
||||
|
||||
@lru_cache()
|
||||
def get_assemble_scripts(self):
|
||||
"""Return series of build-steps specific to this repository."""
|
||||
# If we have either Pipfile.lock, Pipfile, or runtime.txt declare the
|
||||
|
@ -104,8 +121,8 @@ class PipfileBuildPack(CondaBuildPack):
|
|||
# environment.
|
||||
assemble_scripts = super().get_assemble_scripts()
|
||||
|
||||
if self.py2:
|
||||
# using Python 2 as a kernel, but Python 3 for the notebook server
|
||||
if self.separate_kernel_env:
|
||||
# using legacy Python (e.g. 2.7) as a kernel
|
||||
|
||||
# requirements3.txt allows for packages to be installed to the
|
||||
# notebook servers Python environment
|
||||
|
@ -114,9 +131,7 @@ class PipfileBuildPack(CondaBuildPack):
|
|||
assemble_scripts.append(
|
||||
(
|
||||
"${NB_USER}",
|
||||
'${{NB_PYTHON_PREFIX}}/bin/pip install --no-cache-dir -r "{}"'.format(
|
||||
nb_requirements_file
|
||||
),
|
||||
f'${{NB_PYTHON_PREFIX}}/bin/pip install --no-cache-dir -r "{nb_requirements_file}"',
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -154,12 +169,15 @@ class PipfileBuildPack(CondaBuildPack):
|
|||
"${NB_USER}",
|
||||
"""(cd {working_directory} && \\
|
||||
PATH="${{KERNEL_PYTHON_PREFIX}}/bin:$PATH" \\
|
||||
pipenv install {install_option} --system --dev \\
|
||||
pipenv install {install_option} --system --dev && \\
|
||||
pipenv --clear \\
|
||||
)""".format(
|
||||
working_directory=working_directory,
|
||||
install_option="--ignore-pipfile"
|
||||
if os.path.exists(pipfile_lock)
|
||||
else "--skip-lock",
|
||||
install_option=(
|
||||
"--ignore-pipfile"
|
||||
if os.path.exists(pipfile_lock)
|
||||
else "--skip-lock"
|
||||
),
|
||||
),
|
||||
)
|
||||
)
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
"""Generates Dockerfiles based on an input matrix based on Python."""
|
||||
import os
|
||||
|
||||
from ..conda import CondaBuildPack
|
||||
import os
|
||||
from functools import lru_cache
|
||||
|
||||
from ...utils import is_local_pip_requirement, open_guess_encoding
|
||||
from ..conda import CondaBuildPack
|
||||
|
||||
|
||||
class PythonBuildPack(CondaBuildPack):
|
||||
|
@ -23,6 +25,9 @@ class PythonBuildPack(CondaBuildPack):
|
|||
# not a Python runtime (e.g. R, which subclasses this)
|
||||
# use the default Python
|
||||
self._python_version = self.major_pythons["3"]
|
||||
self.log.warning(
|
||||
f"Python version unspecified, using current default Python version {self._python_version}. This will change in the future."
|
||||
)
|
||||
return self._python_version
|
||||
|
||||
py_version_info = runtime.split("-", 1)[1].split(".")
|
||||
|
@ -45,8 +50,8 @@ class PythonBuildPack(CondaBuildPack):
|
|||
# whether it's distinct from the notebook or the same.
|
||||
pip = "${KERNEL_PYTHON_PREFIX}/bin/pip"
|
||||
scripts = []
|
||||
if self.py2:
|
||||
# using python 2 kernel,
|
||||
if self.separate_kernel_env:
|
||||
# using legacy Python kernel
|
||||
# requirements3.txt allows installation in the notebook server env
|
||||
nb_requirements_file = self.binder_path("requirements3.txt")
|
||||
if os.path.exists(nb_requirements_file):
|
||||
|
@ -55,9 +60,7 @@ class PythonBuildPack(CondaBuildPack):
|
|||
"${NB_USER}",
|
||||
# want the $NB_PYHTON_PREFIX environment variable, not for
|
||||
# Python's string formatting to try and replace this
|
||||
'${{NB_PYTHON_PREFIX}}/bin/pip install --no-cache-dir -r "{}"'.format(
|
||||
nb_requirements_file
|
||||
),
|
||||
f'${{NB_PYTHON_PREFIX}}/bin/pip install --no-cache-dir -r "{nb_requirements_file}"',
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -67,7 +70,7 @@ class PythonBuildPack(CondaBuildPack):
|
|||
scripts.append(
|
||||
(
|
||||
"${NB_USER}",
|
||||
'{} install --no-cache-dir -r "{}"'.format(pip, requirements_file),
|
||||
f'{pip} install --no-cache-dir -r "{requirements_file}"',
|
||||
)
|
||||
)
|
||||
return scripts
|
||||
|
@ -95,6 +98,7 @@ class PythonBuildPack(CondaBuildPack):
|
|||
# allow assembly from subset
|
||||
return True
|
||||
|
||||
@lru_cache()
|
||||
def get_preassemble_script_files(self):
|
||||
assemble_files = super().get_preassemble_script_files()
|
||||
for name in ("requirements.txt", "requirements3.txt"):
|
||||
|
@ -103,6 +107,7 @@ class PythonBuildPack(CondaBuildPack):
|
|||
assemble_files[requirements_txt] = requirements_txt
|
||||
return assemble_files
|
||||
|
||||
@lru_cache()
|
||||
def get_preassemble_scripts(self):
|
||||
"""Return scripts to run before adding the full repository"""
|
||||
scripts = super().get_preassemble_scripts()
|
||||
|
@ -110,6 +115,7 @@ class PythonBuildPack(CondaBuildPack):
|
|||
scripts.extend(self._get_pip_scripts())
|
||||
return scripts
|
||||
|
||||
@lru_cache()
|
||||
def get_assemble_scripts(self):
|
||||
"""Return series of build steps that require the full repository"""
|
||||
# If we have a runtime.txt & that's set to python-2.7,
|
||||
|
@ -126,9 +132,7 @@ class PythonBuildPack(CondaBuildPack):
|
|||
|
||||
# setup.py exists *and* binder dir is not used
|
||||
if not self.binder_dir and os.path.exists(setup_py):
|
||||
assemble_scripts.append(
|
||||
("${NB_USER}", "{} install --no-cache-dir .".format(pip))
|
||||
)
|
||||
assemble_scripts.append(("${NB_USER}", f"{pip} install --no-cache-dir ."))
|
||||
return assemble_scripts
|
||||
|
||||
def detect(self):
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
#!/bin/bash -l
|
||||
# This is an executable that launches Python in a login shell
|
||||
# to ensure that full profile setup occurs.
|
||||
# shebang on linux only allows 1 argument,
|
||||
# so we couldn't pick a login shell in one shebang line
|
||||
# for a Python script
|
||||
|
||||
# -u means unbuffered, which one ~always wants in a container
|
||||
# otherwise output can be mysteriously missing
|
||||
|
||||
exec python3 -u "$@"
|
|
@ -1,12 +1,17 @@
|
|||
import re
|
||||
import os
|
||||
import datetime
|
||||
import os
|
||||
import re
|
||||
from functools import lru_cache
|
||||
|
||||
import requests
|
||||
|
||||
from distutils.version import LooseVersion as V
|
||||
|
||||
from ..semver import parse_version as V
|
||||
from ._r_base import rstudio_base_scripts
|
||||
from .python import PythonBuildPack
|
||||
from ._r_base import rstudio_base_scripts, DEVTOOLS_VERSION, IRKERNEL_VERSION
|
||||
|
||||
# Aproximately the first snapshot on RSPM (Posit package manager)
|
||||
# that seems to have a working IRKernel.
|
||||
RSPM_CUTOFF_DATE = datetime.date(2018, 12, 7)
|
||||
|
||||
|
||||
class RBuildPack(PythonBuildPack):
|
||||
|
@ -20,27 +25,24 @@ class RBuildPack(PythonBuildPack):
|
|||
r-<year>-<month>-<date>
|
||||
|
||||
Where 'year', 'month' and 'date' refer to a specific
|
||||
date snapshot of https://mran.microsoft.com/timemachine
|
||||
from which libraries are to be installed.
|
||||
date whose CRAN snapshot we will use to fetch packages.
|
||||
Uses https://packagemanager.posit.co.
|
||||
|
||||
2. A `DESCRIPTION` file signaling an R package
|
||||
|
||||
If there is no `runtime.txt`, then the MRAN snapshot is set to latest
|
||||
If there is no `runtime.txt`, then the CRAN snapshot is set to latest
|
||||
date that is guaranteed to exist across timezones.
|
||||
|
||||
Additional R packages are installed if specified either
|
||||
|
||||
- in a file `install.R`, that will be executed at build time,
|
||||
and can be used for installing packages from both MRAN and GitHub
|
||||
and can be used for installing packages from both CRAN and GitHub
|
||||
|
||||
- as dependencies in a `DESCRIPTION` file
|
||||
|
||||
- are needed by a specific tool
|
||||
|
||||
The `r-base` package from Ubuntu apt repositories is used to install
|
||||
R itself, rather than any of the methods from https://cran.r-project.org/.
|
||||
|
||||
The `r-base-dev` package is installed as advised in RStudio instructions.
|
||||
R is installed from https://docs.rstudio.com/resources/install-r/
|
||||
"""
|
||||
|
||||
@property
|
||||
|
@ -65,40 +67,46 @@ class RBuildPack(PythonBuildPack):
|
|||
Will return the version specified by the user or the current default
|
||||
version.
|
||||
"""
|
||||
# Available versions at https://cran.r-project.org/src/base/
|
||||
version_map = {
|
||||
"3.4": "3.4",
|
||||
"3.5": "3.5.3-1bionic",
|
||||
"3.5.0": "3.5.0-1bionic",
|
||||
"3.5.1": "3.5.1-2bionic",
|
||||
"3.5.2": "3.5.2-1bionic",
|
||||
"3.5.3": "3.5.3-1bionic",
|
||||
"3.6": "3.6.1-3bionic",
|
||||
"3.6.0": "3.6.0-2bionic",
|
||||
"3.6.1": "3.6.1-3bionic",
|
||||
"4.0": "4.0.2-1.1804.0",
|
||||
"4.0.2": "4.0.2-1.1804.0",
|
||||
"4.2": "4.2.1",
|
||||
"4.1": "4.1.3",
|
||||
"4.0": "4.0.5",
|
||||
"3.6": "3.6.3",
|
||||
"3.5": "3.5.3",
|
||||
"3.4": "3.4.4",
|
||||
"3.3": "3.3.3",
|
||||
}
|
||||
|
||||
# the default if nothing is specified
|
||||
r_version = "3.6"
|
||||
# Use full version is needed here, so it a valid semver
|
||||
#
|
||||
# NOTE: When updating this version, also update
|
||||
# - tests/unit/test_r.py -> test_version_specification
|
||||
# - tests/r/r-rspm-apt/verify
|
||||
#
|
||||
r_version = version_map["4.2"]
|
||||
|
||||
if not hasattr(self, "_r_version"):
|
||||
parts = self.runtime.split("-")
|
||||
# If runtime.txt is not set, or if it isn't of the form r-<version>-<yyyy>-<mm>-<dd>,
|
||||
# we don't use any of it in determining r version and just use the default
|
||||
if len(parts) == 5:
|
||||
r_version = parts[1]
|
||||
if r_version not in version_map:
|
||||
raise ValueError(
|
||||
"Version '{}' of R is not supported.".format(r_version)
|
||||
)
|
||||
# For versions of form x.y, we want to explicitly provide x.y.z - latest patchlevel
|
||||
# available. Users can however explicitly specify the full version to get something specific
|
||||
if r_version in version_map:
|
||||
r_version = version_map[r_version]
|
||||
|
||||
# translate to the full version string
|
||||
self._r_version = version_map.get(r_version)
|
||||
self._r_version = r_version
|
||||
|
||||
return self._r_version
|
||||
|
||||
@property
|
||||
def checkpoint_date(self):
|
||||
"""
|
||||
Return the date of MRAN checkpoint to use for this repo
|
||||
Return the date of CRAN checkpoint to use for this repo
|
||||
|
||||
Returns '' if no date is specified
|
||||
"""
|
||||
|
@ -131,15 +139,29 @@ class RBuildPack(PythonBuildPack):
|
|||
if not self.binder_dir and os.path.exists(description_R):
|
||||
if not self.checkpoint_date:
|
||||
# no R snapshot date set through runtime.txt
|
||||
# set the R runtime to the latest date that is guaranteed to
|
||||
# be on MRAN across timezones
|
||||
two_days_ago = datetime.date.today() - datetime.timedelta(days=2)
|
||||
self._checkpoint_date = self._get_latest_working_mran_date(
|
||||
two_days_ago, 3
|
||||
# Set it to two days ago from today
|
||||
self._checkpoint_date = datetime.date.today() - datetime.timedelta(
|
||||
days=2
|
||||
)
|
||||
self._runtime = "r-{}".format(str(self._checkpoint_date))
|
||||
self._runtime = f"r-{str(self._checkpoint_date)}"
|
||||
return True
|
||||
|
||||
@lru_cache()
|
||||
def get_env(self):
|
||||
"""
|
||||
Set custom env vars needed for RStudio to load
|
||||
"""
|
||||
return super().get_env() + [
|
||||
# rstudio (rsession) can't seem to find R unless we explicitly tell it where
|
||||
# it is - just $PATH isn't enough. I discovered these are the env vars it
|
||||
# looks for by digging through RStudio source and finding
|
||||
# https://github.com/rstudio/rstudio/blob/v2022.02.3+492/src/cpp/r/session/RDiscovery.cpp
|
||||
("R_HOME", f"/opt/R/{self.r_version}/lib/R"),
|
||||
("R_DOC_DIR", "${R_HOME}/doc"),
|
||||
("LD_LIBRARY_PATH", "${R_HOME}/lib:${LD_LIBRARY_PATH}"),
|
||||
]
|
||||
|
||||
@lru_cache()
|
||||
def get_path(self):
|
||||
"""
|
||||
Return paths to be added to the PATH environment variable.
|
||||
|
@ -149,6 +171,7 @@ class RBuildPack(PythonBuildPack):
|
|||
"""
|
||||
return super().get_path() + ["/usr/lib/rstudio-server/bin/"]
|
||||
|
||||
@lru_cache()
|
||||
def get_build_env(self):
|
||||
"""
|
||||
Return environment variables to be set.
|
||||
|
@ -162,6 +185,7 @@ class RBuildPack(PythonBuildPack):
|
|||
("R_LIBS_USER", "${APP_BASE}/rlibs")
|
||||
]
|
||||
|
||||
@lru_cache()
|
||||
def get_packages(self):
|
||||
"""
|
||||
Return list of packages to be installed.
|
||||
|
@ -175,39 +199,57 @@ class RBuildPack(PythonBuildPack):
|
|||
"libapparmor1",
|
||||
"sudo",
|
||||
"lsb-release",
|
||||
"libssl-dev",
|
||||
]
|
||||
# For R 3.4 we use the default Ubuntu package, for other versions we
|
||||
# install from a different PPA
|
||||
if V(self.r_version) < V("3.5"):
|
||||
packages.append("r-base")
|
||||
packages.append("r-base-dev")
|
||||
packages.append("libclang-dev")
|
||||
|
||||
return super().get_packages().union(packages)
|
||||
|
||||
def _get_latest_working_mran_date(self, startdate, max_prior):
|
||||
"""
|
||||
Look for a working MRAN snapshot
|
||||
|
||||
Starts from `startdate` and tries up to `max_prior` previous days.
|
||||
Raises `requests.HTTPError` with the last tried URL if no working snapshot found.
|
||||
"""
|
||||
for days in range(max_prior + 1):
|
||||
test_date = startdate - datetime.timedelta(days=days)
|
||||
mran_url = "https://mran.microsoft.com/snapshot/{}".format(
|
||||
test_date.isoformat()
|
||||
@lru_cache()
|
||||
def get_rspm_snapshot_url(self, snapshot_date, max_days_prior=7):
|
||||
for i in range(max_days_prior):
|
||||
snapshots = requests.post(
|
||||
"https://packagemanager.posit.co/__api__/url",
|
||||
# Ask for midnight UTC snapshot
|
||||
json={
|
||||
"repo": "all",
|
||||
"snapshot": (snapshot_date - datetime.timedelta(days=i)).strftime(
|
||||
"%Y-%m-%dT00:00:00Z"
|
||||
),
|
||||
},
|
||||
).json()
|
||||
# Construct a snapshot URL that will give us binary packages for appropriate ubuntu version
|
||||
if "upsi" in snapshots:
|
||||
return (
|
||||
# Env variables here are expanded by envsubst in the Dockerfile, after sourcing
|
||||
# /etc/os-release. This allows us to use distro specific variables here to get
|
||||
# appropriate binary packages without having to hard code version names here.
|
||||
"https://packagemanager.posit.co/all/__linux__/${VERSION_CODENAME}/"
|
||||
+ snapshots["upsi"]
|
||||
)
|
||||
raise ValueError(
|
||||
"No snapshot found for {} or {} days prior in packagemanager.posit.co".format(
|
||||
snapshot_date.strftime("%Y-%m-%d"), max_days_prior
|
||||
)
|
||||
r = requests.head(mran_url)
|
||||
if r.ok:
|
||||
return test_date
|
||||
self.log.warning(
|
||||
"Failed to get MRAN snapshot URL %s: %s %s",
|
||||
mran_url,
|
||||
r.status_code,
|
||||
r.reason,
|
||||
)
|
||||
r.raise_for_status()
|
||||
)
|
||||
|
||||
@lru_cache()
|
||||
def get_devtools_snapshot_url(self):
|
||||
"""
|
||||
Return url of snapshot to use for getting devtools install
|
||||
|
||||
devtools is part of our 'core' base install, so we should have some
|
||||
control over what version we install here.
|
||||
"""
|
||||
# Picked from https://packagemanager.posit.co/client/#/repos/1/overview
|
||||
# Hardcoded rather than dynamically determined from a date to avoid extra API calls
|
||||
# Plus, we can always use packagemanager.posit.co here as we always install the
|
||||
# necessary apt packages.
|
||||
# Env variables here are expanded by envsubst in the Dockerfile, after sourcing
|
||||
# /etc/os-release. This allows us to use distro specific variables here to get
|
||||
# appropriate binary packages without having to hard code version names here.
|
||||
return "https://packagemanager.posit.co/all/__linux__/${VERSION_CODENAME}/2022-06-03+Y3JhbiwyOjQ1MjYyMTU7RkM5ODcwN0M"
|
||||
|
||||
@lru_cache()
|
||||
def get_build_scripts(self):
|
||||
"""
|
||||
Return series of build-steps common to all R repositories
|
||||
|
@ -220,113 +262,106 @@ class RBuildPack(PythonBuildPack):
|
|||
for installing R packages into
|
||||
- RStudio
|
||||
- R's devtools package, at a particular frozen version
|
||||
(determined by MRAN)
|
||||
(determined by CRAN)
|
||||
- IRKernel
|
||||
- nbrsessionproxy (to access RStudio via Jupyter Notebook)
|
||||
|
||||
We set the snapshot date used to install R libraries from based on the
|
||||
contents of runtime.txt.
|
||||
"""
|
||||
if self.checkpoint_date < RSPM_CUTOFF_DATE:
|
||||
raise RuntimeError(
|
||||
f'Microsoft killed MRAN, the source of R package snapshots before {RSPM_CUTOFF_DATE.strftime("%Y-%m-%d")}. '
|
||||
f'This repo has a snapshot date of {self.checkpoint_date.strftime("%Y-%m-%d")} specified in runtime.txt. '
|
||||
"Please use a newer snapshot date"
|
||||
)
|
||||
|
||||
mran_url = "https://mran.microsoft.com/snapshot/{}".format(
|
||||
self.checkpoint_date.isoformat()
|
||||
)
|
||||
cran_mirror_url = self.get_rspm_snapshot_url(self.checkpoint_date)
|
||||
|
||||
scripts = []
|
||||
# For R 3.4 we want to use the default Ubuntu package but otherwise
|
||||
# we use the packages from R's own repo
|
||||
if V(self.r_version) >= V("3.5"):
|
||||
if V(self.r_version) >= V("4"):
|
||||
vs = "40"
|
||||
else:
|
||||
vs = "35"
|
||||
scripts += [
|
||||
(
|
||||
"root",
|
||||
rf"""
|
||||
echo "deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran{vs}/" > /etc/apt/sources.list.d/r-ubuntu.list
|
||||
""",
|
||||
),
|
||||
# Dont use apt-key directly, as gpg does not always respect *_proxy vars. This increase the chances
|
||||
# of being able to reach it from behind a firewall
|
||||
(
|
||||
"root",
|
||||
r"""
|
||||
wget --quiet -O - 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xe298a3a825c0d65dfd57cbb651716619e084dab9' | apt-key add -
|
||||
""",
|
||||
),
|
||||
(
|
||||
"root",
|
||||
r"""
|
||||
apt-get update && \
|
||||
apt-get install --yes r-base={R_version} \
|
||||
r-base-dev={R_version} \
|
||||
r-recommended={R_version} \
|
||||
libclang-dev && \
|
||||
apt-get -qq purge && \
|
||||
apt-get -qq clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
""".format(
|
||||
R_version=self.r_version
|
||||
),
|
||||
),
|
||||
]
|
||||
if self.platform != "linux/amd64":
|
||||
raise RuntimeError(
|
||||
f"RStudio is only available for linux/amd64 ({self.platform})"
|
||||
)
|
||||
scripts = [
|
||||
(
|
||||
"root",
|
||||
rf"""
|
||||
apt-get update > /dev/null && \
|
||||
apt-get install --yes --no-install-recommends \
|
||||
libclang-dev \
|
||||
libzmq3-dev > /dev/null && \
|
||||
wget --quiet -O /tmp/r-{self.r_version}.deb \
|
||||
https://cdn.rstudio.com/r/ubuntu-$(. /etc/os-release && echo $VERSION_ID | sed 's/\.//')/pkgs/r-{self.r_version}_1_amd64.deb && \
|
||||
apt install --yes --no-install-recommends /tmp/r-{self.r_version}.deb > /dev/null && \
|
||||
rm /tmp/r-{self.r_version}.deb && \
|
||||
apt-get -qq purge && \
|
||||
apt-get -qq clean && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
ln -s /opt/R/{self.r_version}/bin/R /usr/local/bin/R && \
|
||||
ln -s /opt/R/{self.r_version}/bin/Rscript /usr/local/bin/Rscript && \
|
||||
R --version
|
||||
""",
|
||||
),
|
||||
]
|
||||
|
||||
scripts.append(
|
||||
scripts += rstudio_base_scripts(self.r_version)
|
||||
|
||||
scripts += [
|
||||
(
|
||||
"root",
|
||||
r"""
|
||||
mkdir -p ${R_LIBS_USER} && \
|
||||
chown -R ${NB_USER}:${NB_USER} ${R_LIBS_USER}
|
||||
""",
|
||||
)
|
||||
)
|
||||
scripts += rstudio_base_scripts()
|
||||
scripts += [
|
||||
),
|
||||
(
|
||||
"root",
|
||||
# Set paths so that RStudio shares libraries with base R
|
||||
# install. This first comments out any R_LIBS_USER that
|
||||
# might be set in /etc/R/Renviron and then sets it.
|
||||
r"""
|
||||
sed -i -e '/^R_LIBS_USER=/s/^/#/' /etc/R/Renviron && \
|
||||
echo "R_LIBS_USER=${R_LIBS_USER}" >> /etc/R/Renviron
|
||||
rf"""
|
||||
sed -i -e '/^R_LIBS_USER=/s/^/#/' /opt/R/{self.r_version}/lib/R/etc/Renviron && \
|
||||
echo "R_LIBS_USER=${{R_LIBS_USER}}" >> /opt/R/{self.r_version}/lib/R/etc/Renviron
|
||||
""",
|
||||
),
|
||||
(
|
||||
"root",
|
||||
# RStudio's CRAN mirror needs this to figure out which binary package to serve.
|
||||
# If not set properly, it will just serve up source packages
|
||||
# Quite hilarious, IMO.
|
||||
# See https://docs.rstudio.com/rspm/1.0.12/admin/binaries.html
|
||||
# Set mirror for RStudio too, by modifying rsession.conf
|
||||
rf"""
|
||||
R RHOME && \
|
||||
mkdir -p /etc/rstudio && \
|
||||
EXPANDED_CRAN_MIRROR_URL="$(. /etc/os-release && echo {cran_mirror_url} | envsubst)" && \
|
||||
echo "options(repos = c(CRAN = \"${{EXPANDED_CRAN_MIRROR_URL}}\"))" > /opt/R/{self.r_version}/lib/R/etc/Rprofile.site && \
|
||||
echo "r-cran-repos=${{EXPANDED_CRAN_MIRROR_URL}}" > /etc/rstudio/rsession.conf
|
||||
""",
|
||||
),
|
||||
(
|
||||
"root",
|
||||
# Configure log-level and send to stderr
|
||||
# Set log-level=debug to investigate problems
|
||||
# https://docs.posit.co/ide/server-pro/server_management/logging.html
|
||||
rf"""
|
||||
printf '[*]\nlog-level=info\nlogger-type=stderr\n' > /etc/rstudio/logging.conf
|
||||
""",
|
||||
),
|
||||
(
|
||||
"${NB_USER}",
|
||||
# Install a pinned version of IRKernel and set it up for use!
|
||||
r"""
|
||||
R --quiet -e "install.packages('devtools', repos='https://mran.microsoft.com/snapshot/{devtools_version}', method='libcurl')" && \
|
||||
R --quiet -e "devtools::install_github('IRkernel/IRkernel', ref='{irkernel_version}')" && \
|
||||
R --quiet -e "IRkernel::installspec(prefix='$NB_PYTHON_PREFIX')"
|
||||
""".format(
|
||||
devtools_version=DEVTOOLS_VERSION, irkernel_version=IRKERNEL_VERSION
|
||||
),
|
||||
),
|
||||
(
|
||||
"${NB_USER}",
|
||||
# Install shiny library
|
||||
r"""
|
||||
R --quiet -e "install.packages('shiny', repos='{}', method='libcurl')"
|
||||
""".format(
|
||||
mran_url
|
||||
),
|
||||
),
|
||||
(
|
||||
"root",
|
||||
# We set the default CRAN repo to the MRAN one at given date
|
||||
# We set download method to be curl so we get HTTPS support
|
||||
r"""
|
||||
echo "options(repos = c(CRAN='{mran_url}'), download.file.method = 'libcurl')" > /etc/R/Rprofile.site
|
||||
""".format(
|
||||
mran_url=mran_url
|
||||
),
|
||||
# Install a pinned version of devtools, IRKernel and shiny
|
||||
rf"""
|
||||
export EXPANDED_CRAN_MIRROR_URL="$(. /etc/os-release && echo {cran_mirror_url} | envsubst)" && \
|
||||
R --quiet -e "install.packages(c('devtools', 'IRkernel', 'shiny'), repos=Sys.getenv(\"EXPANDED_CRAN_MIRROR_URL\"))" && \
|
||||
R --quiet -e "IRkernel::installspec(prefix=Sys.getenv(\"NB_PYTHON_PREFIX\"))"
|
||||
""",
|
||||
),
|
||||
]
|
||||
|
||||
return super().get_build_scripts() + scripts
|
||||
|
||||
@lru_cache()
|
||||
def get_preassemble_script_files(self):
|
||||
files = super().get_preassemble_script_files()
|
||||
installR_path = self.binder_path("install.R")
|
||||
|
@ -335,6 +370,7 @@ class RBuildPack(PythonBuildPack):
|
|||
|
||||
return files
|
||||
|
||||
@lru_cache()
|
||||
def get_preassemble_scripts(self):
|
||||
"""Install contents of install.R
|
||||
|
||||
|
@ -352,12 +388,15 @@ class RBuildPack(PythonBuildPack):
|
|||
scripts += [
|
||||
(
|
||||
"${NB_USER}",
|
||||
"Rscript %s && touch /tmp/.preassembled || true" % installR_path,
|
||||
# Delete /tmp/downloaded_packages only if install.R fails, as the second
|
||||
# invocation of install.R might be able to reuse them
|
||||
f"Rscript {installR_path} && touch /tmp/.preassembled || true && rm -rf /tmp/downloaded_packages",
|
||||
)
|
||||
]
|
||||
|
||||
return super().get_preassemble_scripts() + scripts
|
||||
|
||||
@lru_cache()
|
||||
def get_assemble_scripts(self):
|
||||
"""Install the dependencies of or the repository itself"""
|
||||
assemble_scripts = super().get_assemble_scripts()
|
||||
|
@ -368,9 +407,8 @@ class RBuildPack(PythonBuildPack):
|
|||
(
|
||||
"${NB_USER}",
|
||||
# only run install.R if the pre-assembly failed
|
||||
"if [ ! -f /tmp/.preassembled ]; then Rscript {}; fi".format(
|
||||
installR_path
|
||||
),
|
||||
# Delete any downloaded packages in /tmp, as they aren't reused by R
|
||||
f"""if [ ! -f /tmp/.preassembled ]; then Rscript {installR_path}; rm -rf /tmp/downloaded_packages; fi""",
|
||||
)
|
||||
]
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Ładowanie…
Reference in New Issue