mirror of
https://github.com/kennethreitz/pipenv.git
synced 2026-06-05 22:50:18 +00:00
Generated
+1
-323
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "44189c3f4dc6499d20a5c0b5d1f875b0dc242943175e3e38a6e9719fc5860f7d"
|
||||
"sha256": "f4d89c0aab5c4e865f8c96ba24613fb1e66bae803a3ceaeadb6abf0061898091"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {},
|
||||
@@ -37,29 +37,6 @@
|
||||
],
|
||||
"version": "==1.4.3"
|
||||
},
|
||||
"argon2-cffi": {
|
||||
"hashes": [
|
||||
"sha256:1029fef2f7808a89e3baa306f5ace36e768a2d847ee7b056399adcd7707f6256",
|
||||
"sha256:206857d870c6ca3c92514ca70a3c371be47383f7ae6a448f5a16aa17baa550ba",
|
||||
"sha256:3558a7e22b886efad0c99b23b9be24880213b4e2d1630095459978cfcae570e2",
|
||||
"sha256:457fd6de741859aa91c750ffad97f12675c4356047e43392c5fb21f5d9f48b24",
|
||||
"sha256:4a1daa9f6960cdbdb865efcabac4158693459f52e7582c9f8a7c92dc61cdc8e1",
|
||||
"sha256:4bfb603184ea678563c0f1f1872367e81a3d2b70646a627d38ccede68d7b9194",
|
||||
"sha256:5d7493ed10e384b84b6dac862fe96c443297a25b991a8364d94a67b6cd1e9569",
|
||||
"sha256:5fb080047517add8d27baeb38a314814b5ab9c72630606788909b3f60a8f054a",
|
||||
"sha256:7453b16496b5629005a43c5f5707ef8a31fcfa5bb0ed34b5ba7b86a3cc9d02f2",
|
||||
"sha256:81548a27b919861040cb928a350733f4f9455dd67c7d1ba92eb5960a1d7f8b26",
|
||||
"sha256:84fd768d523f87097d572cdfb98e868cdbdc8e80e3d444787fd32e7f6ae25b02",
|
||||
"sha256:8b4cf6c0298f33b92fcd50f19899175b7421690fc8bc6ac68368320c158cbf51",
|
||||
"sha256:af6a4799411eee3f7133fead973727f5fefacd18ea23f51039e70cae51ceb109",
|
||||
"sha256:df7d60a4cf58dc08319fedc0506b42ec0fa5221c6e1f9e2e89fcddff92507390",
|
||||
"sha256:f9072e9f70185a57e36228d34aad4bb644e6a8b4fd6a45f856c666f38f6de96c",
|
||||
"sha256:fbae1d08b52f9a791500c650ab51ba00e374eaeccb5dbaa41b99dab4fd4115e8",
|
||||
"sha256:fe91e3bd95aeae70366693dcc970db03a71619d19df6fbaabf662c3b3c54cdf8",
|
||||
"sha256:fec86ee6f913154846171f66ee30c893c0cde3d434911f8b31c1f84a9aea410e"
|
||||
],
|
||||
"version": "==19.1.0"
|
||||
},
|
||||
"arpeggio": {
|
||||
"hashes": [
|
||||
"sha256:a5258b84f76661d558492fa87e42db634df143685a0e51802d59cae7daad8732",
|
||||
@@ -135,39 +112,6 @@
|
||||
],
|
||||
"version": "==2019.6.16"
|
||||
},
|
||||
"cffi": {
|
||||
"hashes": [
|
||||
"sha256:041c81822e9f84b1d9c401182e174996f0bae9991f33725d059b771744290774",
|
||||
"sha256:046ef9a22f5d3eed06334d01b1e836977eeef500d9b78e9ef693f9380ad0b83d",
|
||||
"sha256:066bc4c7895c91812eff46f4b1c285220947d4aa46fa0a2651ff85f2afae9c90",
|
||||
"sha256:066c7ff148ae33040c01058662d6752fd73fbc8e64787229ea8498c7d7f4041b",
|
||||
"sha256:2444d0c61f03dcd26dbf7600cf64354376ee579acad77aef459e34efcb438c63",
|
||||
"sha256:300832850b8f7967e278870c5d51e3819b9aad8f0a2c8dbe39ab11f119237f45",
|
||||
"sha256:34c77afe85b6b9e967bd8154e3855e847b70ca42043db6ad17f26899a3df1b25",
|
||||
"sha256:46de5fa00f7ac09f020729148ff632819649b3e05a007d286242c4882f7b1dc3",
|
||||
"sha256:4aa8ee7ba27c472d429b980c51e714a24f47ca296d53f4d7868075b175866f4b",
|
||||
"sha256:4d0004eb4351e35ed950c14c11e734182591465a33e960a4ab5e8d4f04d72647",
|
||||
"sha256:4e3d3f31a1e202b0f5a35ba3bc4eb41e2fc2b11c1eff38b362de710bcffb5016",
|
||||
"sha256:50bec6d35e6b1aaeb17f7c4e2b9374ebf95a8975d57863546fa83e8d31bdb8c4",
|
||||
"sha256:55cad9a6df1e2a1d62063f79d0881a414a906a6962bc160ac968cc03ed3efcfb",
|
||||
"sha256:5662ad4e4e84f1eaa8efce5da695c5d2e229c563f9d5ce5b0113f71321bcf753",
|
||||
"sha256:59b4dc008f98fc6ee2bb4fd7fc786a8d70000d058c2bbe2698275bc53a8d3fa7",
|
||||
"sha256:73e1ffefe05e4ccd7bcea61af76f36077b914f92b76f95ccf00b0c1b9186f3f9",
|
||||
"sha256:a1f0fd46eba2d71ce1589f7e50a9e2ffaeb739fb2c11e8192aa2b45d5f6cc41f",
|
||||
"sha256:a2e85dc204556657661051ff4bab75a84e968669765c8a2cd425918699c3d0e8",
|
||||
"sha256:a5457d47dfff24882a21492e5815f891c0ca35fefae8aa742c6c263dac16ef1f",
|
||||
"sha256:a8dccd61d52a8dae4a825cdbb7735da530179fea472903eb871a5513b5abbfdc",
|
||||
"sha256:ae61af521ed676cf16ae94f30fe202781a38d7178b6b4ab622e4eec8cefaff42",
|
||||
"sha256:b012a5edb48288f77a63dba0840c92d0504aa215612da4541b7b42d849bc83a3",
|
||||
"sha256:d2c5cfa536227f57f97c92ac30c8109688ace8fa4ac086d19d0af47d134e2909",
|
||||
"sha256:d42b5796e20aacc9d15e66befb7a345454eef794fdb0737d1af593447c6c8f45",
|
||||
"sha256:dee54f5d30d775f525894d67b1495625dd9322945e7fee00731952e0368ff42d",
|
||||
"sha256:e070535507bd6aa07124258171be2ee8dfc19119c28ca94c9dfb7efd23564512",
|
||||
"sha256:e1ff2748c84d97b065cc95429814cdba39bcbd77c9c85c89344b317dc0d9cbff",
|
||||
"sha256:ed851c75d1e0e043cbf5ca9a8e1b13c4c90f3fbd863dacb01c0808e2b5204201"
|
||||
],
|
||||
"version": "==1.12.3"
|
||||
},
|
||||
"chardet": {
|
||||
"hashes": [
|
||||
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
|
||||
@@ -221,27 +165,6 @@
|
||||
],
|
||||
"version": "==4.4.0"
|
||||
},
|
||||
"devpi-client": {
|
||||
"hashes": [
|
||||
"sha256:05398402d4335a8173d9118df409d16e085a6dacf54300851212d2f6370e1497",
|
||||
"sha256:e9e19e87c61a75bc93137553db69554c69efb82cfc7ee83e0305cf6abfc91aa0"
|
||||
],
|
||||
"version": "==4.4.0"
|
||||
},
|
||||
"devpi-common": {
|
||||
"hashes": [
|
||||
"sha256:2c7a6471c0f5b07ac9257adec3b3c3a89193ee672fdeb0a6f29487dc9d675e0c",
|
||||
"sha256:c743abd38447258e27cdb733fa905c275e5dd3eeae25bab9ff59182a1083ed91"
|
||||
],
|
||||
"version": "==3.3.2"
|
||||
},
|
||||
"devpi-server": {
|
||||
"hashes": [
|
||||
"sha256:96ab6390ea8aa2e80b4acdcf8e37f105af6ce7d0cb4efa18ba82de8e8b6c91ad",
|
||||
"sha256:e92de95c869927ba628d25b024c460b63740d52ebba11dae79146d8cc3b6a033"
|
||||
],
|
||||
"version": "==4.9.0"
|
||||
},
|
||||
"docutils": {
|
||||
"hashes": [
|
||||
"sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6",
|
||||
@@ -276,13 +199,6 @@
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==1.6.0"
|
||||
},
|
||||
"filelock": {
|
||||
"hashes": [
|
||||
"sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59",
|
||||
"sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"
|
||||
],
|
||||
"version": "==3.0.12"
|
||||
},
|
||||
"flake8": {
|
||||
"hashes": [
|
||||
"sha256:859996073f341f2670741b51ec1e67a01da142831aa1fdc6242dbf88dffbe661",
|
||||
@@ -337,14 +253,6 @@
|
||||
"markers": "python_version < '3.2'",
|
||||
"version": "==3.2.0"
|
||||
},
|
||||
"hupper": {
|
||||
"hashes": [
|
||||
"sha256:5869ec2a46ba8ad481b0a27ca68f3e01dc7d3424925b7c872d9fcdff44b43442",
|
||||
"sha256:8532d116fef1f89add74dbd8d5e6541cb3278b04f4fe9780a1356cb6adba1141"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==1.8.1"
|
||||
},
|
||||
"idna": {
|
||||
"hashes": [
|
||||
"sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
|
||||
@@ -506,31 +414,6 @@
|
||||
"ref": "a2ba0b30c86339cae5ef3a03046fc9c583452c40",
|
||||
"version": "==0.3.1.dev0"
|
||||
},
|
||||
"passlib": {
|
||||
"extras": [
|
||||
"argon2"
|
||||
],
|
||||
"hashes": [
|
||||
"sha256:3d948f64138c25633613f303bcc471126eae67c04d5e3f6b7b8ce6242f8653e0",
|
||||
"sha256:43526aea08fa32c6b6dbbbe9963c4c767285b78147b7437597f992812f69d280"
|
||||
],
|
||||
"version": "==1.7.1"
|
||||
},
|
||||
"pastedeploy": {
|
||||
"hashes": [
|
||||
"sha256:d423fb9d51fdcf853aa4ff43ac7ec469b643ea19590f67488122d6d0d772350a",
|
||||
"sha256:fe53697ec2754703096b75d0ba29112b0590b4ce46726fe4f9408fd006e4eefc"
|
||||
],
|
||||
"version": "==2.0.1"
|
||||
},
|
||||
"path.py": {
|
||||
"hashes": [
|
||||
"sha256:de7cd643affbc23e56533a6e8d551ecdee4983501a08c24e4e71565202d8cdaa",
|
||||
"sha256:ea40833e76c50485fffd3e094d52e9e8701ba8c62a3b8f67c655c28a9538aac1"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==11.5.2"
|
||||
},
|
||||
"pathlib2": {
|
||||
"hashes": [
|
||||
"sha256:25199318e8cc3c25dcb45cbe084cc061051336d5a9ea2a12448d3d8cb748f742",
|
||||
@@ -561,22 +444,6 @@
|
||||
],
|
||||
"version": "==1.5.0.1"
|
||||
},
|
||||
"plaster": {
|
||||
"hashes": [
|
||||
"sha256:215c921a438b5349931fd7df9a5a11a3572947f20f4bc6dd622ac08f1c3ba249",
|
||||
"sha256:8351c7c7efdf33084c1de88dd0f422cbe7342534537b553c49b857b12d98c8c3"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==1.0"
|
||||
},
|
||||
"plaster-pastedeploy": {
|
||||
"hashes": [
|
||||
"sha256:391d93a4e1ff81fc3bae27508ebb765b61f1724ae6169f83577f06b6357be7fd",
|
||||
"sha256:7c8aa37c917b615c70bf942b24dc1e0455c49f62f1a2214b1a0dd98871644bbb"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==0.7"
|
||||
},
|
||||
"pluggy": {
|
||||
"hashes": [
|
||||
"sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc",
|
||||
@@ -585,21 +452,6 @@
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==0.12.0"
|
||||
},
|
||||
"psutil": {
|
||||
"hashes": [
|
||||
"sha256:028a1ec3c6197eadd11e7b46e8cc2f0720dc18ac6d7aabdb8e8c0d6c9704f000",
|
||||
"sha256:503e4b20fa9d3342bcf58191bbc20a4a5ef79ca7df8972e6197cc14c5513e73d",
|
||||
"sha256:863a85c1c0a5103a12c05a35e59d336e1d665747e531256e061213e2e90f63f3",
|
||||
"sha256:954f782608bfef9ae9f78e660e065bd8ffcfaea780f9f2c8a133bb7cb9e826d7",
|
||||
"sha256:b6e08f965a305cd84c2d07409bc16fbef4417d67b70c53b299116c5b895e3f45",
|
||||
"sha256:bc96d437dfbb8865fc8828cf363450001cb04056bbdcdd6fc152c436c8a74c61",
|
||||
"sha256:cf49178021075d47c61c03c0229ac0c60d5e2830f8cab19e2d88e579b18cdb76",
|
||||
"sha256:d5350cb66690915d60f8b233180f1e49938756fb2d501c93c44f8fb5b970cc63",
|
||||
"sha256:eba238cf1989dfff7d483c029acb0ac4fcbfc15de295d682901f0e2497e6781a"
|
||||
],
|
||||
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==5.6.3"
|
||||
},
|
||||
"py": {
|
||||
"hashes": [
|
||||
"sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa",
|
||||
@@ -616,12 +468,6 @@
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==2.5.0"
|
||||
},
|
||||
"pycparser": {
|
||||
"hashes": [
|
||||
"sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"
|
||||
],
|
||||
"version": "==2.19"
|
||||
},
|
||||
"pyflakes": {
|
||||
"hashes": [
|
||||
"sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0",
|
||||
@@ -646,14 +492,6 @@
|
||||
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==2.4.0"
|
||||
},
|
||||
"pyramid": {
|
||||
"hashes": [
|
||||
"sha256:51bf64647345237c00d2fe558935e0e4938c156e29f17e203457fd8e1d757dc7",
|
||||
"sha256:d80ccb8cfa550139b50801591d4ca8a5575334adb493c402fce2312f55d07d66"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==1.10.4"
|
||||
},
|
||||
"pytest": {
|
||||
"hashes": [
|
||||
"sha256:4a784f1d4f2ef198fe9b7aef793e9fa1a3b2f84e822d9b3a64a181293a572d45",
|
||||
@@ -662,24 +500,6 @@
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==4.6.3"
|
||||
},
|
||||
"pytest-devpi-server": {
|
||||
"hashes": [
|
||||
"sha256:1e1a4f4783f6833e49ae72956e68694b26de85e094d39c9cc6e5900774ecf2b9",
|
||||
"sha256:a8f37e448d0a8c11c10f51b48a2bae4007431786223c39c3e22343e41f3aa8ee",
|
||||
"sha256:c54e2ad77f9e2031d0284038b2bd1044debfcd1965be81c3d990df39e80503a3",
|
||||
"sha256:d5e06acdd89966417d781d93cd08a2f1c21265bc06d5e4c1dd9309cdd0af988f"
|
||||
],
|
||||
"version": "==1.7.0"
|
||||
},
|
||||
"pytest-fixture-config": {
|
||||
"hashes": [
|
||||
"sha256:1413e5e2c6572a3d7709de7ad69dc35004393d777a7883c8431b6f78a2e28fd0",
|
||||
"sha256:41a17417721f6862ce6b40e3280fddd8e1659b2c306ec46b237d7021fec5218e",
|
||||
"sha256:9bda6a817a3ac91a118dd42274cb3cc42dc0290a11317a7217d17eaae82800c5",
|
||||
"sha256:a0e35e239e70fa12614bbe9ca51d3238fbeb89519deb80cd365b487665a666b0"
|
||||
],
|
||||
"version": "==1.7.0"
|
||||
},
|
||||
"pytest-forked": {
|
||||
"hashes": [
|
||||
"sha256:5fe33fbd07d7b1302c95310803a5e5726a4ff7f19d5a542b7ce57c76fed8135f",
|
||||
@@ -691,24 +511,6 @@
|
||||
"editable": true,
|
||||
"path": "./tests/pytest-pypi"
|
||||
},
|
||||
"pytest-server-fixtures": {
|
||||
"hashes": [
|
||||
"sha256:0fa5b1be6a84180e50ff91a58580e81ad3eb45828878a07942fbe384fcd86d1f",
|
||||
"sha256:3d93f2ca4bb0a949a55cbdd3598fc44bc3199277dd6b31be39df7f7ebb7a3280",
|
||||
"sha256:42a6020e60fd0c362dae0a594777b85e6b4a6d84ff3972ac3261e7de5f2f27fc",
|
||||
"sha256:716e8911e0184d0fd41aa04c2980f04f7bf1d603d90d40de4817b8d6f7b5c7d6"
|
||||
],
|
||||
"version": "==1.7.0"
|
||||
},
|
||||
"pytest-shutil": {
|
||||
"hashes": [
|
||||
"sha256:03c67282a0c520a790ca8db6f65e18851fae3786f45e3ae34e8d9fccbf266a72",
|
||||
"sha256:343a6902a8ed0cbd29cf8954e2726382228a2ad2f5f7eac589b0d0dff878d806",
|
||||
"sha256:b3568a675cb092c9b15c789ebd3046b79cfaca476868939748729d14557a98ff",
|
||||
"sha256:d8165261de76e7508505c341d94c02b113dc963f274543abca74dbfabd021261"
|
||||
],
|
||||
"version": "==1.7.0"
|
||||
},
|
||||
"pytest-tap": {
|
||||
"hashes": [
|
||||
"sha256:3b05ec931424bbe44e944726b68f7ef185bb6d25ce9ce21ac52c9af7ffa9b506",
|
||||
@@ -724,14 +526,6 @@
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==1.29.0"
|
||||
},
|
||||
"python-dateutil": {
|
||||
"hashes": [
|
||||
"sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb",
|
||||
"sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==2.8.0"
|
||||
},
|
||||
"pytz": {
|
||||
"hashes": [
|
||||
"sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda",
|
||||
@@ -746,13 +540,6 @@
|
||||
],
|
||||
"version": "==24.0"
|
||||
},
|
||||
"repoze.lru": {
|
||||
"hashes": [
|
||||
"sha256:0429a75e19380e4ed50c0694e26ac8819b4ea7851ee1fc7583c8572db80aff77",
|
||||
"sha256:f77bf0e1096ea445beadd35f3479c5cff2aa1efe604a133e67150bc8630a62ea"
|
||||
],
|
||||
"version": "==0.7"
|
||||
},
|
||||
"requests": {
|
||||
"hashes": [
|
||||
"sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
|
||||
@@ -784,30 +571,6 @@
|
||||
"index": "pypi",
|
||||
"version": "==0.14.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"
|
||||
],
|
||||
"markers": "python_version >= '3.5'",
|
||||
"version": "==0.15.97"
|
||||
},
|
||||
"scandir": {
|
||||
"hashes": [
|
||||
"sha256:2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e",
|
||||
@@ -878,12 +641,6 @@
|
||||
"markers": "sys_platform == 'linux'",
|
||||
"version": "==0.8.5"
|
||||
},
|
||||
"strictyaml": {
|
||||
"hashes": [
|
||||
"sha256:06d7100587695a0edfabd772a6c6fb69071fc38c413df599e22dfd40e52f5fad"
|
||||
],
|
||||
"version": "==1.0.1"
|
||||
},
|
||||
"tap.py": {
|
||||
"hashes": [
|
||||
"sha256:8ad62ba6898fcef4913c67d468d0c4beae3109b74c03363538145e31b1840b29",
|
||||
@@ -912,14 +669,6 @@
|
||||
],
|
||||
"version": "==19.2.0"
|
||||
},
|
||||
"tox": {
|
||||
"hashes": [
|
||||
"sha256:f5c8e446b51edd2ea97df31d4ded8c8b72e7d6c619519da6bb6084b9dd5770f9",
|
||||
"sha256:f87fd33892a2df0950e5e034def9468988b8d008c7e9416be665fcc0dd45b14f"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==3.12.1"
|
||||
},
|
||||
"tqdm": {
|
||||
"hashes": [
|
||||
"sha256:14a285392c32b6f8222ecfbcd217838f88e11630affe9006cd0e94c7eff3cb61",
|
||||
@@ -928,13 +677,6 @@
|
||||
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==4.32.2"
|
||||
},
|
||||
"translationstring": {
|
||||
"hashes": [
|
||||
"sha256:4ee44cfa58c52ade8910ea0ebc3d2d84bdcad9fa0422405b1801ec9b9a65b72d",
|
||||
"sha256:e26c7bf383413234ed442e0980a2ebe192b95e3745288a8fd2805156d27515b4"
|
||||
],
|
||||
"version": "==1.3"
|
||||
},
|
||||
"twine": {
|
||||
"hashes": [
|
||||
"sha256:0fb0bfa3df4f62076cab5def36b1a71a2e4acb4d1fa5c97475b048117b1a6446",
|
||||
@@ -960,13 +702,6 @@
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' and python_version < '4'",
|
||||
"version": "==1.25.3"
|
||||
},
|
||||
"venusian": {
|
||||
"hashes": [
|
||||
"sha256:2f2d077a1eedc3fda40425f65687c8c494da7e83d7c23bc2c4d1a40eb3ca5b6d",
|
||||
"sha256:64ec8285b80b110d0ae5db4280e90e31848a59db98db1aba4d7d46f48ce91e3e"
|
||||
],
|
||||
"version": "==1.2.0"
|
||||
},
|
||||
"virtualenv": {
|
||||
"hashes": [
|
||||
"sha256:b7335cddd9260a3dd214b73a2521ffc09647bde3e9457fcca31dc3be3999d04a",
|
||||
@@ -983,13 +718,6 @@
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==0.5.3"
|
||||
},
|
||||
"waitress": {
|
||||
"hashes": [
|
||||
"sha256:4e2a6e6fca56d6d3c279f68a2b2cc9b4798d834ea3c3a9db3e2b76b6d66f4526",
|
||||
"sha256:90fe750cd40b282fae877d3c866255d485de18e8a232e93de42ebd9fb750eebb"
|
||||
],
|
||||
"version": "==1.3.0"
|
||||
},
|
||||
"wcwidth": {
|
||||
"hashes": [
|
||||
"sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e",
|
||||
@@ -1004,14 +732,6 @@
|
||||
],
|
||||
"version": "==0.5.1"
|
||||
},
|
||||
"webob": {
|
||||
"hashes": [
|
||||
"sha256:05aaab7975e0ee8af2026325d656e5ce14a71f1883c52276181821d6d5bf7086",
|
||||
"sha256:36db8203c67023d68c1b00208a7bf55e3b10de2aa317555740add29c619de12b"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==1.8.5"
|
||||
},
|
||||
"werkzeug": {
|
||||
"hashes": [
|
||||
"sha256:865856ebb55c4dcd0630cdd8f3331a1847a819dda7e8c750d3db6f2aa6c0209c",
|
||||
@@ -1027,48 +747,6 @@
|
||||
],
|
||||
"markers": "python_version >= '2.7'",
|
||||
"version": "==0.5.1"
|
||||
},
|
||||
"zope.deprecation": {
|
||||
"hashes": [
|
||||
"sha256:0d453338f04bacf91bbfba545d8bcdf529aa829e67b705eac8c1a7fdce66e2df",
|
||||
"sha256:f1480b74995958b24ce37b0ef04d3663d2683e5d6debc96726eff18acf4ea113"
|
||||
],
|
||||
"version": "==4.4.0"
|
||||
},
|
||||
"zope.interface": {
|
||||
"hashes": [
|
||||
"sha256:086707e0f413ff8800d9c4bc26e174f7ee4c9c8b0302fbad68d083071822316c",
|
||||
"sha256:1157b1ec2a1f5bf45668421e3955c60c610e31913cc695b407a574efdbae1f7b",
|
||||
"sha256:11ebddf765bff3bbe8dbce10c86884d87f90ed66ee410a7e6c392086e2c63d02",
|
||||
"sha256:14b242d53f6f35c2d07aa2c0e13ccb710392bcd203e1b82a1828d216f6f6b11f",
|
||||
"sha256:1b3d0dcabc7c90b470e59e38a9acaa361be43b3a6ea644c0063951964717f0e5",
|
||||
"sha256:20a12ab46a7e72b89ce0671e7d7a6c3c1ca2c2766ac98112f78c5bddaa6e4375",
|
||||
"sha256:298f82c0ab1b182bd1f34f347ea97dde0fffb9ecf850ecf7f8904b8442a07487",
|
||||
"sha256:2f6175722da6f23dbfc76c26c241b67b020e1e83ec7fe93c9e5d3dd18667ada2",
|
||||
"sha256:3b877de633a0f6d81b600624ff9137312d8b1d0f517064dfc39999352ab659f0",
|
||||
"sha256:4265681e77f5ac5bac0905812b828c9fe1ce80c6f3e3f8574acfb5643aeabc5b",
|
||||
"sha256:550695c4e7313555549aa1cdb978dc9413d61307531f123558e438871a883d63",
|
||||
"sha256:5f4d42baed3a14c290a078e2696c5f565501abde1b2f3f1a1c0a94fbf6fbcc39",
|
||||
"sha256:62dd71dbed8cc6a18379700701d959307823b3b2451bdc018594c48956ace745",
|
||||
"sha256:7040547e5b882349c0a2cc9b50674b1745db551f330746af434aad4f09fba2cc",
|
||||
"sha256:7e099fde2cce8b29434684f82977db4e24f0efa8b0508179fce1602d103296a2",
|
||||
"sha256:7e5c9a5012b2b33e87980cee7d1c82412b2ebabcb5862d53413ba1a2cfde23aa",
|
||||
"sha256:81295629128f929e73be4ccfdd943a0906e5fe3cdb0d43ff1e5144d16fbb52b1",
|
||||
"sha256:95cc574b0b83b85be9917d37cd2fad0ce5a0d21b024e1a5804d044aabea636fc",
|
||||
"sha256:968d5c5702da15c5bf8e4a6e4b67a4d92164e334e9c0b6acf080106678230b98",
|
||||
"sha256:9e998ba87df77a85c7bed53240a7257afe51a07ee6bc3445a0bf841886da0b97",
|
||||
"sha256:a0c39e2535a7e9c195af956610dba5a1073071d2d85e9d2e5d789463f63e52ab",
|
||||
"sha256:a15e75d284178afe529a536b0e8b28b7e107ef39626a7809b4ee64ff3abc9127",
|
||||
"sha256:a6a6ff82f5f9b9702478035d8f6fb6903885653bff7ec3a1e011edc9b1a7168d",
|
||||
"sha256:b639f72b95389620c1f881d94739c614d385406ab1d6926a9ffe1c8abbea23fe",
|
||||
"sha256:bad44274b151d46619a7567010f7cde23a908c6faa84b97598fd2f474a0c6891",
|
||||
"sha256:bbcef00d09a30948756c5968863316c949d9cedbc7aabac5e8f0ffbdb632e5f1",
|
||||
"sha256:d788a3999014ddf416f2dc454efa4a5dbeda657c6aba031cf363741273804c6b",
|
||||
"sha256:eed88ae03e1ef3a75a0e96a55a99d7937ed03e53d0cffc2451c208db445a2966",
|
||||
"sha256:f99451f3a579e73b5dd58b1b08d1179791d49084371d9a47baad3b22417f0317"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==4.6.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+88
-133
@@ -37,14 +37,15 @@ from .utils import (
|
||||
get_canonical_names, is_pinned, is_pypi_url, is_required_version, is_star,
|
||||
is_valid_url, parse_indexes, pep423_name, prepare_pip_source_args,
|
||||
proper_case, python_version, venv_resolve_deps, run_command,
|
||||
is_python_command, find_python, make_posix, interrupt_handled_subprocess
|
||||
is_python_command, find_python, make_posix, interrupt_handled_subprocess,
|
||||
get_indexes_from_requirement, get_source_list, get_project_index,
|
||||
)
|
||||
|
||||
|
||||
if is_type_checking():
|
||||
from typing import Dict, List, Mapping, Optional, Union
|
||||
from typing import Dict, List, Mapping, Optional, Union, Text
|
||||
from pipenv.vendor.requirementslib.models.requirements import Requirement
|
||||
TSourceDict = Dict[str, Union[str, bool]]
|
||||
TSourceDict = Dict[Text, Union[Text, bool]]
|
||||
|
||||
|
||||
# Packages that should be ignored later.
|
||||
@@ -690,8 +691,10 @@ def _cleanup_procs(procs, failed_deps_queue, retry=True):
|
||||
def batch_install(deps_list, procs, failed_deps_queue,
|
||||
requirements_dir, no_deps=True, ignore_hashes=False,
|
||||
allow_global=False, blocking=False, pypi_mirror=None,
|
||||
retry=True):
|
||||
retry=True, sequential_deps=None):
|
||||
from .vendor.requirementslib.models.utils import strip_extras_markers_from_requirement
|
||||
if sequential_deps is None:
|
||||
sequential_deps = []
|
||||
failed = (not retry)
|
||||
install_deps = not no_deps
|
||||
if not failed:
|
||||
@@ -699,31 +702,30 @@ def batch_install(deps_list, procs, failed_deps_queue,
|
||||
else:
|
||||
label = INSTALL_LABEL2
|
||||
|
||||
deps_to_install = deps_list[:]
|
||||
deps_to_install.extend(sequential_deps)
|
||||
sequential_dep_names = [d.name for d in sequential_deps]
|
||||
|
||||
deps_list_bar = progress.bar(
|
||||
deps_list, width=32,
|
||||
deps_to_install, width=32,
|
||||
label=label
|
||||
)
|
||||
|
||||
|
||||
indexes = []
|
||||
trusted_hosts = []
|
||||
# Install these because
|
||||
for dep in deps_list_bar:
|
||||
extra_indexes = []
|
||||
if dep.req.req:
|
||||
dep.req.req = strip_extras_markers_from_requirement(dep.req.req)
|
||||
if dep.markers:
|
||||
dep.markers = str(strip_extras_markers_from_requirement(dep.get_markers()))
|
||||
index = None
|
||||
if dep.index:
|
||||
index = project.find_source(dep.index)
|
||||
indexes.append(index)
|
||||
if not index.get("verify_ssl", False):
|
||||
trusted_hosts.append(urllib3_util.parse_url(index.get("url")).host)
|
||||
# Install the module.
|
||||
is_artifact = False
|
||||
if no_deps:
|
||||
link = getattr(dep.req, "link", None)
|
||||
is_wheel = False
|
||||
if link:
|
||||
is_wheel = link.is_wheel
|
||||
is_wheel = getattr(link, "is_wheel", False) if link else False
|
||||
if dep.is_file_or_url and (dep.is_direct_url or any(
|
||||
dep.req.uri.endswith(ext) for ext in ["zip", "tar.gz"]
|
||||
)):
|
||||
@@ -734,12 +736,6 @@ def batch_install(deps_list, procs, failed_deps_queue,
|
||||
install_deps = True
|
||||
no_deps = False
|
||||
|
||||
extra_indexes = []
|
||||
if not index and indexes:
|
||||
index = next(iter(indexes))
|
||||
if len(indexes) > 1:
|
||||
extra_indexes = indexes[1:]
|
||||
|
||||
with vistir.contextmanagers.temp_environ():
|
||||
if not allow_global:
|
||||
os.environ["PIP_USER"] = vistir.compat.fs_str("0")
|
||||
@@ -754,7 +750,7 @@ def batch_install(deps_list, procs, failed_deps_queue,
|
||||
allow_global=allow_global,
|
||||
no_deps=not install_deps,
|
||||
block=any([dep.editable, dep.is_vcs, blocking]),
|
||||
index=index,
|
||||
index=dep.index,
|
||||
requirements_dir=requirements_dir,
|
||||
pypi_mirror=pypi_mirror,
|
||||
trusted_hosts=trusted_hosts,
|
||||
@@ -762,11 +758,13 @@ def batch_install(deps_list, procs, failed_deps_queue,
|
||||
use_pep517=not failed,
|
||||
)
|
||||
c.dep = dep
|
||||
if dep.is_vcs or dep.editable:
|
||||
# if dep.is_vcs or dep.editable:
|
||||
is_sequential = sequential_deps and dep.name in sequential_dep_names
|
||||
if is_sequential:
|
||||
c.block()
|
||||
|
||||
procs.put(c)
|
||||
if procs.full() or procs.qsize() == len(deps_list):
|
||||
if procs.full() or procs.qsize() == len(deps_list) or is_sequential:
|
||||
_cleanup_procs(procs, failed_deps_queue, retry=retry)
|
||||
|
||||
|
||||
@@ -834,20 +832,33 @@ def do_install_dependencies(
|
||||
failed_deps_queue = queue.Queue()
|
||||
if skip_lock:
|
||||
ignore_hashes = True
|
||||
|
||||
editable_or_vcs_deps = [dep for dep in deps_list if (dep.editable or dep.vcs)]
|
||||
normal_deps = [dep for dep in deps_list if not (dep.editable or dep.vcs)]
|
||||
install_kwargs = {
|
||||
"no_deps": no_deps, "ignore_hashes": ignore_hashes, "allow_global": allow_global,
|
||||
"blocking": not concurrent, "pypi_mirror": pypi_mirror
|
||||
"blocking": not concurrent, "pypi_mirror": pypi_mirror,
|
||||
"sequential_deps": editable_or_vcs_deps
|
||||
}
|
||||
|
||||
# with project.environment.activated():
|
||||
batch_install(
|
||||
deps_list, procs, failed_deps_queue, requirements_dir, **install_kwargs
|
||||
normal_deps, procs, failed_deps_queue, requirements_dir, **install_kwargs
|
||||
)
|
||||
|
||||
if not procs.empty():
|
||||
_cleanup_procs(procs, failed_deps_queue)
|
||||
|
||||
# click.echo(crayons.normal(
|
||||
# decode_for_output("Installing editable and vcs dependencies…"), bold=True
|
||||
# ))
|
||||
|
||||
# install_kwargs.update({"blocking": True})
|
||||
# # XXX: All failed and editable/vcs deps should be installed in sequential mode!
|
||||
# procs = queue.Queue(maxsize=1)
|
||||
# batch_install(
|
||||
# editable_or_vcs_deps, procs, failed_deps_queue, requirements_dir,
|
||||
# **install_kwargs
|
||||
# )
|
||||
|
||||
# Iterate over the hopefully-poorly-packaged dependencies…
|
||||
if not failed_deps_queue.empty():
|
||||
click.echo(
|
||||
@@ -857,10 +868,7 @@ def do_install_dependencies(
|
||||
while not failed_deps_queue.empty():
|
||||
failed_dep = failed_deps_queue.get()
|
||||
retry_list.append(failed_dep)
|
||||
install_kwargs.update({
|
||||
"retry": False,
|
||||
"blocking": True,
|
||||
})
|
||||
install_kwargs.update({"retry": False})
|
||||
batch_install(
|
||||
retry_list, procs, failed_deps_queue, requirements_dir, **install_kwargs
|
||||
)
|
||||
@@ -1323,54 +1331,6 @@ def get_pip_args(
|
||||
return list(vistir.misc.dedup(arg_set))
|
||||
|
||||
|
||||
def get_project_index(index=None, trusted_hosts=None):
|
||||
# type: (Optional[Union[str, TSourceDict]], Optional[List[str]]) -> TSourceDict
|
||||
from .vendor.urllib3.util import parse_url
|
||||
if trusted_hosts is None:
|
||||
trusted_hosts = []
|
||||
if isinstance(index, vistir.compat.Mapping):
|
||||
return index
|
||||
try:
|
||||
source = project.find_source(index)
|
||||
except SourceNotFound:
|
||||
index_url = parse_url(index)
|
||||
src_name = project.src_name_from_url(index)
|
||||
verify_ssl = index_url.host not in trusted_hosts
|
||||
source = {"url": index, "verify_ssl": verify_ssl, "name": src_name}
|
||||
return source
|
||||
|
||||
|
||||
def get_source_list(
|
||||
index=None, # type: Optional[Union[str, TSourceDict]]
|
||||
extra_indexes=None, # type: Optional[List[str]]
|
||||
trusted_hosts=None, # type: Optional[List[str]]
|
||||
pypi_mirror=None, # type: Optional[str]
|
||||
):
|
||||
# type: (...) -> List[TSourceDict]
|
||||
sources = [] # type: List[TSourceDict]
|
||||
if index:
|
||||
sources.append(get_project_index(index))
|
||||
if extra_indexes:
|
||||
if isinstance(extra_indexes, six.string_types):
|
||||
extra_indexes = [extra_indexes,]
|
||||
for source in extra_indexes:
|
||||
extra_src = get_project_index(source)
|
||||
if not sources or extra_src["url"] != sources[0]["url"]:
|
||||
sources.append(extra_src)
|
||||
else:
|
||||
for source in project.pipfile_sources:
|
||||
if not sources or source["url"] != sources[0]["url"]:
|
||||
sources.append(source)
|
||||
if not sources:
|
||||
sources = project.pipfile_sources
|
||||
if pypi_mirror:
|
||||
sources = [
|
||||
create_mirror_source(pypi_mirror) if is_pypi_url(source["url"]) else source
|
||||
for source in sources
|
||||
]
|
||||
return sources
|
||||
|
||||
|
||||
def get_requirement_line(
|
||||
requirement, # type: Requirement
|
||||
src_dir=None, # type: Optional[str]
|
||||
@@ -1452,8 +1412,7 @@ def pip_install(
|
||||
|
||||
trusted_hosts.extend(os.environ.get("PIP_TRUSTED_HOSTS", []))
|
||||
if not allow_global:
|
||||
src_dir = project.virtualenv_src_location
|
||||
# src_dir = os.getenv("PIP_SRC", os.getenv("PIP_SRC_DIR", project.virtualenv_src_location))
|
||||
src_dir = os.getenv("PIP_SRC", os.getenv("PIP_SRC_DIR", project.virtualenv_src_location))
|
||||
else:
|
||||
src_dir = os.getenv("PIP_SRC", os.getenv("PIP_SRC_DIR"))
|
||||
if requirement:
|
||||
@@ -1462,16 +1421,26 @@ def pip_install(
|
||||
elif not (requirement.is_vcs or requirement.editable or requirement.vcs):
|
||||
ignore_hashes = False
|
||||
line = None
|
||||
if requirement.vcs:
|
||||
line = requirement.line_instance.get_line(
|
||||
with_prefix=True, with_hashes=False, with_markers=True, as_list=True
|
||||
)
|
||||
else:
|
||||
r = write_requirement_to_file(
|
||||
requirement, requirements_dir=requirements_dir, src_dir=src_dir,
|
||||
include_hashes=not ignore_hashes
|
||||
)
|
||||
# Try installing for each source in project.sources.
|
||||
if not index and requirement.index:
|
||||
index = requirement.index
|
||||
if index and not extra_indexes:
|
||||
extra_indexes = list(project.sources)
|
||||
if requirement and requirement.vcs or requirement.editable:
|
||||
requirement.index = None
|
||||
# Install dependencies when a package is a non-editable VCS dependency.
|
||||
# Don't specify a source directory when using --system.
|
||||
if not requirement.editable and no_deps is not True:
|
||||
# Leave this off becauase old lockfiles don't have all deps included
|
||||
# TODO: When can it be turned back on?
|
||||
no_deps = False
|
||||
elif requirement.editable and no_deps is None:
|
||||
no_deps = True
|
||||
|
||||
r = write_requirement_to_file(
|
||||
requirement, requirements_dir=requirements_dir, src_dir=src_dir,
|
||||
include_hashes=not ignore_hashes
|
||||
)
|
||||
sources = get_source_list(
|
||||
index, extra_indexes=extra_indexes, trusted_hosts=trusted_hosts,
|
||||
pypi_mirror=pypi_mirror
|
||||
@@ -1481,22 +1450,13 @@ def pip_install(
|
||||
if "--hash" not in fh.read():
|
||||
ignore_hashes = True
|
||||
if environments.is_verbose():
|
||||
piplogger.setLevel(logging.INFO)
|
||||
piplogger.setLevel(logging.WARN)
|
||||
if requirement:
|
||||
click.echo(
|
||||
crayons.normal("Installing {0!r}".format(requirement.name), bold=True),
|
||||
err=True,
|
||||
)
|
||||
|
||||
if requirement and requirement.vcs:
|
||||
# Install dependencies when a package is a non-editable VCS dependency.
|
||||
# Don't specify a source directory when using --system.
|
||||
if not requirement.editable and no_deps is not True:
|
||||
# Leave this off becauase old lockfiles don't have all deps included
|
||||
# TODO: When can it be turned back on?
|
||||
no_deps = False
|
||||
elif requirement.editable and no_deps is None:
|
||||
no_deps = True
|
||||
pip_command = [which_pip(allow_global=allow_global), "install"]
|
||||
pip_args = get_pip_args(
|
||||
pre=pre, verbose=environments.is_verbose(), upgrade=True,
|
||||
@@ -2068,7 +2028,7 @@ def do_install(
|
||||
from .vendor.requirementslib.models.requirements import Requirement
|
||||
|
||||
# make a tuple of (display_name, entry)
|
||||
pkg_list = packages + ["-e {0}".format(pkg) for pkg in editable_packages]
|
||||
pkg_list = packages + ['-e {0}'.format(pkg) for pkg in editable_packages]
|
||||
if not system and not project.virtualenv_exists:
|
||||
do_init(
|
||||
dev=dev,
|
||||
@@ -2123,21 +2083,33 @@ def do_install(
|
||||
pypi_mirror=pypi_mirror,
|
||||
)
|
||||
if not c.ok:
|
||||
sp.write_err(vistir.compat.fs_str(
|
||||
"{0}: {1}".format(
|
||||
crayons.red("WARNING"),
|
||||
"Failed installing package {0}".format(pkg_line)
|
||||
sp.write_err(u"{0}: {1}".format(
|
||||
crayons.red("WARNING"),
|
||||
vistir.compat.fs_str("Failed installing package {0}".format(pkg_line)))
|
||||
)
|
||||
sp.write_err(
|
||||
vistir.compat.fs_str(u"Error text: {0}".format(c.out))
|
||||
)
|
||||
sp.write_err(
|
||||
vistir.compat.fs_str(u"{0}".format(c.err))
|
||||
)
|
||||
sp.write_err(
|
||||
u"{0} An error occurred while installing {1}!".format(
|
||||
crayons.red(u"Error: ", bold=True), crayons.green(pkg_line)
|
||||
),
|
||||
))
|
||||
sp.write_err(vistir.compat.fs_str(
|
||||
"Error text: {0}".format(c.out)
|
||||
))
|
||||
sp.write_err(vistir.compat.fs_str(
|
||||
"{0}".format(c.err)
|
||||
))
|
||||
raise RuntimeError(c.err)
|
||||
if environments.is_verbose():
|
||||
click.echo(crayons.blue(format_pip_output(c.out)))
|
||||
)
|
||||
sp.write_err(crayons.blue(vistir.compat.fs_str(format_pip_error(c.err))))
|
||||
if environments.is_verbose():
|
||||
sp.write_err(crayons.blue(vistir.compat.fs_str(format_pip_output(c.out))))
|
||||
if "setup.py egg_info" in c.err:
|
||||
sp.write_err(vistir.compat.fs_str(
|
||||
"This is likely caused by a bug in {0}. "
|
||||
"Report this to its maintainers.".format(
|
||||
crayons.green(pkg_requirement.name)
|
||||
)
|
||||
))
|
||||
sp.red.fail(environments.PIPENV_SPINNER_FAIL_TEXT.format("Installation Failed"))
|
||||
sys.exit(1)
|
||||
except (ValueError, RuntimeError) as e:
|
||||
sp.write_err(vistir.compat.fs_str(
|
||||
"{0}: {1}".format(crayons.red("WARNING"), e),
|
||||
@@ -2145,7 +2117,7 @@ def do_install(
|
||||
sp.red.fail(environments.PIPENV_SPINNER_FAIL_TEXT.format(
|
||||
"Installation Failed",
|
||||
))
|
||||
# sys.exit(1)
|
||||
sys.exit(1)
|
||||
# Warn if --editable wasn't passed.
|
||||
if pkg_requirement.is_vcs and not pkg_requirement.editable and not PIPENV_RESOLVE_VCS:
|
||||
sp.write_err(
|
||||
@@ -2157,23 +2129,6 @@ def do_install(
|
||||
crayons.red("$ pipenv lock"),
|
||||
)
|
||||
)
|
||||
# Ensure that package was successfully installed.
|
||||
if c.return_code != 0:
|
||||
sp.write_err(vistir.compat.fs_str(
|
||||
"{0} An error occurred while installing {1}!".format(
|
||||
crayons.red("Error: ", bold=True), crayons.green(pkg_line)
|
||||
),
|
||||
))
|
||||
sp.write_err(vistir.compat.fs_str(crayons.blue(format_pip_error(c.err))))
|
||||
if "setup.py egg_info" in c.err:
|
||||
sp.write_err(vistir.compat.fs_str(
|
||||
"This is likely caused by a bug in {0}. "
|
||||
"Report this to its maintainers.".format(
|
||||
crayons.green(pkg_requirement.name)
|
||||
)
|
||||
))
|
||||
sp.fail(environments.PIPENV_SPINNER_FAIL_TEXT.format("Installation Failed"))
|
||||
sys.exit(1)
|
||||
sp.write(vistir.compat.fs_str(
|
||||
u"{0} {1} {2} {3}{4}".format(
|
||||
crayons.normal(u"Adding", bold=True),
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[pytest]
|
||||
addopts = -ra -n auto
|
||||
plugins = pytest_devpi_server xdist
|
||||
plugins = xdist
|
||||
testpaths = tests
|
||||
; Add vendor and patched in addition to the default list of ignored dirs
|
||||
; Additionally, ignore tasks, news, test subdirectories and peeps directory
|
||||
|
||||
@@ -24,8 +24,7 @@ from pipenv.vendor.vistir.path import mkdir_p, create_tracked_tempdir, handle_re
|
||||
from pipenv._compat import Path
|
||||
from pipenv.exceptions import VirtualenvActivationException
|
||||
from pipenv.vendor import delegator, toml, tomlkit
|
||||
from pytest_pypi.app import prepare_fixtures
|
||||
from _pytest_devpi_server import DevpiServer as _DevpiServer
|
||||
from pytest_pypi.app import prepare_fixtures, prepare_packages as prepare_pypi_packages
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
warnings.simplefilter("default", category=ResourceWarning)
|
||||
@@ -43,78 +42,6 @@ class ServerNotDead(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class DevpiServer(_DevpiServer):
|
||||
|
||||
term_signal = signal.SIGTERM if not os.name == "nt" else signal.CTRL_C_EVENT
|
||||
kill_signal = signal.SIGKILL if not os.name == "nt" else signal.CTRL_BREAK_EVENT
|
||||
|
||||
def _find_and_kill(self, retries, signal):
|
||||
log.debug("Killing server running at {}:{} using signal {}".format(self.hostname, self.port, signal))
|
||||
for _ in range(retries):
|
||||
cd_path = "/"
|
||||
pids = []
|
||||
netstat_cmd = ""
|
||||
if sys.platform == "darwin":
|
||||
netstat_cmd = "lsof -n -i:{} | grep LISTEN | awk '{{ print $2 }}'".format(self.port)
|
||||
elif sys.platform == "linux":
|
||||
netstat_cmd = ("netstat -anp 2>/dev/null | grep %s:%s | grep LISTEN | "
|
||||
"awk '{ print $7 }' | cut -d'/' -f1" % (socket.gethostbyname(self.hostname), self.port))
|
||||
else:
|
||||
procs = self.run("tasklist /NH /FI devpi-server.exe", capture=True)
|
||||
pids = [
|
||||
task.strip().split()[1] for task in procs.strip().splitlines()
|
||||
if "No tasks are running" not in task.strip()
|
||||
]
|
||||
if netstat_cmd:
|
||||
pids = [
|
||||
p.strip() for p in
|
||||
self.run(netstat_cmd, capture=True, cd=cd_path).split('\n')
|
||||
if p.strip()
|
||||
]
|
||||
|
||||
if not pids:
|
||||
# No PIDs remaining, server has died.
|
||||
break
|
||||
|
||||
for pid in pids:
|
||||
try:
|
||||
pid = int(pid)
|
||||
except ValueError:
|
||||
log.error("Can't determine port, process shutting down or owned by someone else")
|
||||
else:
|
||||
try:
|
||||
os.kill(pid, signal)
|
||||
except OSError as oe:
|
||||
if oe.errno == errno.ESRCH: # Process doesn't appear to exist.
|
||||
log.error("For some reason couldn't find PID {} to kill.".format(p))
|
||||
else:
|
||||
raise
|
||||
self.run("taskkill /f /pid %s" % pid, capture=False, check_rc=False)
|
||||
time.sleep(self.kill_retry_delay)
|
||||
else:
|
||||
raise ServerNotDead("Server not dead after %d retries" % retries)
|
||||
|
||||
def kill(self, retries=5):
|
||||
"""Kill all running versions of this server.
|
||||
Just killing the thread.server pid isn't good enough, it may have spawned children.
|
||||
"""
|
||||
# Prevent traceback printed when the server goes away as we kill it
|
||||
if self.server:
|
||||
self.server.exit = True
|
||||
|
||||
if self.dead:
|
||||
return
|
||||
|
||||
try:
|
||||
self._find_and_kill(retries, self.term_signal)
|
||||
except ServerNotDead:
|
||||
log.error("Server not dead after %d retries, trying with SIGKILL" % retries)
|
||||
try:
|
||||
self._find_and_kill(retries, self.kill_signal)
|
||||
except ServerNotDead:
|
||||
log.error("Server still not dead, giving up")
|
||||
|
||||
|
||||
def check_internet():
|
||||
has_internet = False
|
||||
for url in ("http://httpbin.org/ip", "http://clients3.google.com/generate_204"):
|
||||
@@ -174,18 +101,7 @@ TESTS_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
PYPI_VENDOR_DIR = os.path.join(TESTS_ROOT, 'pypi')
|
||||
WE_HAVE_HG = check_for_mercurial()
|
||||
prepare_fixtures(os.path.join(PYPI_VENDOR_DIR, "fixtures"))
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def pipenv_devpi_server():
|
||||
with DevpiServer(offline=False) as server:
|
||||
server.start()
|
||||
server.api("index", "-c", "pipenv", "bases=root/pypi", "volatile=False")
|
||||
server.index = "pipenv"
|
||||
for path in Path(PYPI_VENDOR_DIR).iterdir():
|
||||
if path.is_dir():
|
||||
server.api("upload", "--from-dir", path.as_posix())
|
||||
yield server
|
||||
prepare_pypi_packages(PYPI_VENDOR_DIR)
|
||||
|
||||
|
||||
def pytest_runtest_setup(item):
|
||||
@@ -263,7 +179,7 @@ def isolate(create_tmpdir):
|
||||
fp.write(
|
||||
b"[user]\n\tname = pipenv\n\temail = pipenv@pipenv.org\n"
|
||||
)
|
||||
os.environ["GIT_CONFIG"] = fs_str(git_config_file)
|
||||
# os.environ["GIT_CONFIG"] = fs_str(git_config_file)
|
||||
os.environ["GIT_CONFIG_NOSYSTEM"] = fs_str("1")
|
||||
os.environ["GIT_AUTHOR_NAME"] = fs_str("pipenv")
|
||||
os.environ["GIT_AUTHOR_EMAIL"] = fs_str("pipenv@pipenv.org")
|
||||
@@ -409,7 +325,7 @@ class _PipenvInstance(object):
|
||||
self.pipfile_path = None
|
||||
self.chdir = chdir
|
||||
|
||||
if self.pypi:
|
||||
if self.pypi and "PIPENV_PYPI_URL" not in os.environ:
|
||||
os.environ['PIPENV_PYPI_URL'] = fs_str('{0}'.format(self.pypi))
|
||||
# os.environ['PIPENV_PYPI_URL'] = fs_str('{0}'.format(self.pypi.url))
|
||||
# os.environ['PIPENV_TEST_INDEX'] = fs_str('{0}/simple'.format(self.pypi.url))
|
||||
@@ -512,16 +428,17 @@ def pip_src_dir(request, vistir_tmpdir):
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def PipenvInstance(pip_src_dir, monkeypatch, pipenv_devpi_server, pypi):
|
||||
def PipenvInstance(pip_src_dir, monkeypatch, pypi):
|
||||
with temp_environ(), monkeypatch.context() as m:
|
||||
m.setattr(shutil, "rmtree", _rmtree_func)
|
||||
original_umask = os.umask(0o007)
|
||||
os.environ["PIPENV_NOSPIN"] = fs_str("1")
|
||||
os.environ["CI"] = fs_str("1")
|
||||
os.environ['PIPENV_DONT_USE_PYENV'] = fs_str('1')
|
||||
os.environ["PIPENV_TEST_INDEX"] = "{0}/{1}/{2}/+simple".format(pipenv_devpi_server.uri, pipenv_devpi_server.user, pipenv_devpi_server.index)
|
||||
os.environ["PIPENV_PYPI_INDEX"] = pipenv_devpi_server.index
|
||||
os.environ["ARTIFACT_PYPI_URL"] = pypi.url
|
||||
m.setenv("PIPENV_NOSPIN", fs_str("1"))
|
||||
m.setenv("CI", fs_str("1"))
|
||||
m.setenv('PIPENV_DONT_USE_PYENV', fs_str('1'))
|
||||
m.setenv("PIPENV_TEST_INDEX", "{0}/simple".format(pypi.url))
|
||||
m.setenv("PIPENV_PYPI_INDEX", "simple")
|
||||
m.setenv("ARTIFACT_PYPI_URL", pypi.url)
|
||||
m.setenv("PIPENV_PYPI_URL", pypi.url)
|
||||
warnings.simplefilter("ignore", category=ResourceWarning)
|
||||
warnings.filterwarnings("ignore", category=ResourceWarning, message="unclosed.*<ssl.SSLSocket.*>")
|
||||
try:
|
||||
@@ -531,13 +448,15 @@ def PipenvInstance(pip_src_dir, monkeypatch, pipenv_devpi_server, pypi):
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def PipenvInstance_NoPyPI(monkeypatch, pip_src_dir):
|
||||
def PipenvInstance_NoPyPI(monkeypatch, pip_src_dir, pypi):
|
||||
with temp_environ(), monkeypatch.context() as m:
|
||||
m.setattr(shutil, "rmtree", _rmtree_func)
|
||||
original_umask = os.umask(0o007)
|
||||
os.environ["PIPENV_NOSPIN"] = fs_str("1")
|
||||
os.environ["CI"] = fs_str("1")
|
||||
os.environ['PIPENV_DONT_USE_PYENV'] = fs_str('1')
|
||||
m.setenv("PIPENV_NOSPIN", fs_str("1"))
|
||||
m.setenv("CI", fs_str("1"))
|
||||
m.setenv('PIPENV_DONT_USE_PYENV', fs_str('1'))
|
||||
m.setenv("PIPENV_TEST_INDEX", "{0}/simple".format(pypi.url))
|
||||
m.setenv("ARTIFACT_PYPI_URL", pypi.url)
|
||||
warnings.simplefilter("ignore", category=ResourceWarning)
|
||||
warnings.filterwarnings("ignore", category=ResourceWarning, message="unclosed.*<ssl.SSLSocket.*>")
|
||||
try:
|
||||
|
||||
@@ -348,7 +348,7 @@ def test_install_does_not_extrapolate_environ(PipenvInstance):
|
||||
f.write(
|
||||
"""
|
||||
[[source]]
|
||||
url = '${PYPI_URL}/${PIPENV_PYPI_INDEX}/+simple'
|
||||
url = '${PYPI_URL}/simple'
|
||||
verify_ssl = true
|
||||
name = 'mockpi'
|
||||
"""
|
||||
@@ -357,14 +357,14 @@ name = 'mockpi'
|
||||
# Ensure simple install does not extrapolate.
|
||||
c = p.pipenv("install")
|
||||
assert c.return_code == 0
|
||||
assert p.pipfile["source"][0]["url"] == "${PYPI_URL}/${PIPENV_PYPI_INDEX}/+simple"
|
||||
assert p.lockfile["_meta"]["sources"][0]["url"] == "${PYPI_URL}/${PIPENV_PYPI_INDEX}/+simple"
|
||||
assert p.pipfile["source"][0]["url"] == "${PYPI_URL}/simple"
|
||||
assert p.lockfile["_meta"]["sources"][0]["url"] == "${PYPI_URL}/simple"
|
||||
|
||||
# Ensure package install does not extrapolate.
|
||||
c = p.pipenv("install six")
|
||||
assert c.return_code == 0
|
||||
assert p.pipfile["source"][0]["url"] == "${PYPI_URL}/${PIPENV_PYPI_INDEX}/+simple"
|
||||
assert p.lockfile["_meta"]["sources"][0]["url"] == "${PYPI_URL}/${PIPENV_PYPI_INDEX}/+simple"
|
||||
assert p.pipfile["source"][0]["url"] == "${PYPI_URL}/simple"
|
||||
assert p.lockfile["_meta"]["sources"][0]["url"] == "${PYPI_URL}/simple"
|
||||
|
||||
|
||||
@pytest.mark.editable
|
||||
|
||||
@@ -393,16 +393,15 @@ def test_lock_updated_source(PipenvInstance):
|
||||
with open(p.pipfile_path, 'w') as f:
|
||||
contents = """
|
||||
[[source]]
|
||||
url = "{url}/${{MY_ENV_VAR}}/+simple"
|
||||
url = "{url}/${{MY_ENV_VAR}}"
|
||||
|
||||
[packages]
|
||||
requests = "==2.14.0"
|
||||
""".strip().format(url=p.pypi)
|
||||
# """.strip().format(url=pypi.url)
|
||||
f.write(contents)
|
||||
|
||||
with temp_environ():
|
||||
os.environ['MY_ENV_VAR'] = p.index
|
||||
os.environ['MY_ENV_VAR'] = 'simple'
|
||||
c = p.pipenv('lock')
|
||||
assert c.return_code == 0
|
||||
assert 'requests' in p.lockfile['default']
|
||||
@@ -410,12 +409,11 @@ requests = "==2.14.0"
|
||||
with open(p.pipfile_path, 'w') as f:
|
||||
contents = """
|
||||
[[source]]
|
||||
url = "{url}"
|
||||
url = "{url}/simple"
|
||||
|
||||
[packages]
|
||||
requests = "==2.14.0"
|
||||
""".strip().format(url=p.index_url)
|
||||
# """.strip().format(url=pypi.url)
|
||||
""".strip().format(url=p.pypi)
|
||||
f.write(contents)
|
||||
|
||||
c = p.pipenv('lock')
|
||||
|
||||
Reference in New Issue
Block a user