nsr51324 commited on
Commit
83c4397
·
verified ·
1 Parent(s): b3ee437

Upload 865 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +14 -0
  2. .venv-1/.gitignore +1 -0
  3. .venv-1/Lib/site-packages/pip-25.1.1.dist-info/INSTALLER +1 -0
  4. .venv-1/Lib/site-packages/pip-25.1.1.dist-info/METADATA +90 -0
  5. .venv-1/Lib/site-packages/pip-25.1.1.dist-info/RECORD +856 -0
  6. .venv-1/Lib/site-packages/pip-25.1.1.dist-info/REQUESTED +0 -0
  7. .venv-1/Lib/site-packages/pip-25.1.1.dist-info/WHEEL +5 -0
  8. .venv-1/Lib/site-packages/pip-25.1.1.dist-info/entry_points.txt +3 -0
  9. .venv-1/Lib/site-packages/pip-25.1.1.dist-info/licenses/AUTHORS.txt +821 -0
  10. .venv-1/Lib/site-packages/pip-25.1.1.dist-info/licenses/LICENSE.txt +20 -0
  11. .venv-1/Lib/site-packages/pip-25.1.1.dist-info/top_level.txt +1 -0
  12. .venv-1/Lib/site-packages/pip/__init__.py +13 -0
  13. .venv-1/Lib/site-packages/pip/__main__.py +24 -0
  14. .venv-1/Lib/site-packages/pip/__pip-runner__.py +50 -0
  15. .venv-1/Lib/site-packages/pip/__pycache__/__init__.cpython-313.pyc +0 -0
  16. .venv-1/Lib/site-packages/pip/__pycache__/__main__.cpython-313.pyc +0 -0
  17. .venv-1/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-313.pyc +0 -0
  18. .venv-1/Lib/site-packages/pip/_internal/__init__.py +18 -0
  19. .venv-1/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-313.pyc +0 -0
  20. .venv-1/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-313.pyc +0 -0
  21. .venv-1/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-313.pyc +0 -0
  22. .venv-1/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-313.pyc +0 -0
  23. .venv-1/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-313.pyc +0 -0
  24. .venv-1/Lib/site-packages/pip/_internal/__pycache__/main.cpython-313.pyc +0 -0
  25. .venv-1/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-313.pyc +0 -0
  26. .venv-1/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-313.pyc +0 -0
  27. .venv-1/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-313.pyc +0 -0
  28. .venv-1/Lib/site-packages/pip/_internal/build_env.py +325 -0
  29. .venv-1/Lib/site-packages/pip/_internal/cache.py +289 -0
  30. .venv-1/Lib/site-packages/pip/_internal/cli/__init__.py +3 -0
  31. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-313.pyc +0 -0
  32. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-313.pyc +0 -0
  33. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-313.pyc +0 -0
  34. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-313.pyc +0 -0
  35. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-313.pyc +0 -0
  36. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/index_command.cpython-313.pyc +0 -0
  37. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-313.pyc +0 -0
  38. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-313.pyc +0 -0
  39. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-313.pyc +0 -0
  40. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-313.pyc +0 -0
  41. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-313.pyc +0 -0
  42. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-313.pyc +0 -0
  43. .venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-313.pyc +0 -0
  44. .venv-1/Lib/site-packages/pip/_internal/cli/autocompletion.py +175 -0
  45. .venv-1/Lib/site-packages/pip/_internal/cli/base_command.py +233 -0
  46. .venv-1/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1133 -0
  47. .venv-1/Lib/site-packages/pip/_internal/cli/command_context.py +27 -0
  48. .venv-1/Lib/site-packages/pip/_internal/cli/index_command.py +173 -0
  49. .venv-1/Lib/site-packages/pip/_internal/cli/main.py +79 -0
  50. .venv-1/Lib/site-packages/pip/_internal/cli/main_parser.py +133 -0
.gitattributes CHANGED
@@ -102,3 +102,17 @@ runs/detect/yolov8_road/labels.jpg filter=lfs diff=lfs merge=lfs -text
102
  runs/detect/yolov8_road/train_batch0.jpg filter=lfs diff=lfs merge=lfs -text
103
  runs/detect/yolov8_road/train_batch1.jpg filter=lfs diff=lfs merge=lfs -text
104
  runs/detect/yolov8_road/train_batch2.jpg filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  runs/detect/yolov8_road/train_batch0.jpg filter=lfs diff=lfs merge=lfs -text
103
  runs/detect/yolov8_road/train_batch1.jpg filter=lfs diff=lfs merge=lfs -text
104
  runs/detect/yolov8_road/train_batch2.jpg filter=lfs diff=lfs merge=lfs -text
105
+ .venv-1/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
106
+ .venv-1/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe filter=lfs diff=lfs merge=lfs -text
107
+ .venv-1/Lib/site-packages/pip/_vendor/distlib/t64.exe filter=lfs diff=lfs merge=lfs -text
108
+ .venv-1/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe filter=lfs diff=lfs merge=lfs -text
109
+ .venv-1/Lib/site-packages/pip/_vendor/distlib/w64.exe filter=lfs diff=lfs merge=lfs -text
110
+ .venv-1/Lib/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
111
+ .venv-1/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
112
+ .venv-1/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
113
+ .venv-1/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-313.pyc filter=lfs diff=lfs merge=lfs -text
114
+ .venv-1/Scripts/pip.exe filter=lfs diff=lfs merge=lfs -text
115
+ .venv-1/Scripts/pip3.13.exe filter=lfs diff=lfs merge=lfs -text
116
+ .venv-1/Scripts/pip3.exe filter=lfs diff=lfs merge=lfs -text
117
+ .venv-1/Scripts/python.exe filter=lfs diff=lfs merge=lfs -text
118
+ .venv-1/Scripts/pythonw.exe filter=lfs diff=lfs merge=lfs -text
.venv-1/.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ *
.venv-1/Lib/site-packages/pip-25.1.1.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
.venv-1/Lib/site-packages/pip-25.1.1.dist-info/METADATA ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.4
2
+ Name: pip
3
+ Version: 25.1.1
4
+ Summary: The PyPA recommended tool for installing Python packages.
5
+ Author-email: The pip developers <distutils-sig@python.org>
6
+ License: MIT
7
+ Project-URL: Homepage, https://pip.pypa.io/
8
+ Project-URL: Documentation, https://pip.pypa.io
9
+ Project-URL: Source, https://github.com/pypa/pip
10
+ Project-URL: Changelog, https://pip.pypa.io/en/stable/news/
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Topic :: Software Development :: Build Tools
15
+ Classifier: Programming Language :: Python
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: Implementation :: CPython
24
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
25
+ Requires-Python: >=3.9
26
+ Description-Content-Type: text/x-rst
27
+ License-File: LICENSE.txt
28
+ License-File: AUTHORS.txt
29
+ Dynamic: license-file
30
+
31
+ pip - The Python Package Installer
32
+ ==================================
33
+
34
+ .. |pypi-version| image:: https://img.shields.io/pypi/v/pip.svg
35
+ :target: https://pypi.org/project/pip/
36
+ :alt: PyPI
37
+
38
+ .. |python-versions| image:: https://img.shields.io/pypi/pyversions/pip
39
+ :target: https://pypi.org/project/pip
40
+ :alt: PyPI - Python Version
41
+
42
+ .. |docs-badge| image:: https://readthedocs.org/projects/pip/badge/?version=latest
43
+ :target: https://pip.pypa.io/en/latest
44
+ :alt: Documentation
45
+
46
+ |pypi-version| |python-versions| |docs-badge|
47
+
48
+ pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes.
49
+
50
+ Please take a look at our documentation for how to install and use pip:
51
+
52
+ * `Installation`_
53
+ * `Usage`_
54
+
55
+ We release updates regularly, with a new version every 3 months. Find more details in our documentation:
56
+
57
+ * `Release notes`_
58
+ * `Release process`_
59
+
60
+ If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms:
61
+
62
+ * `Issue tracking`_
63
+ * `Discourse channel`_
64
+ * `User IRC`_
65
+
66
+ If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms:
67
+
68
+ * `GitHub page`_
69
+ * `Development documentation`_
70
+ * `Development IRC`_
71
+
72
+ Code of Conduct
73
+ ---------------
74
+
75
+ Everyone interacting in the pip project's codebases, issue trackers, chat
76
+ rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
77
+
78
+ .. _package installer: https://packaging.python.org/guides/tool-recommendations/
79
+ .. _Python Package Index: https://pypi.org
80
+ .. _Installation: https://pip.pypa.io/en/stable/installation/
81
+ .. _Usage: https://pip.pypa.io/en/stable/
82
+ .. _Release notes: https://pip.pypa.io/en/stable/news.html
83
+ .. _Release process: https://pip.pypa.io/en/latest/development/release-process/
84
+ .. _GitHub page: https://github.com/pypa/pip
85
+ .. _Development documentation: https://pip.pypa.io/en/latest/development
86
+ .. _Issue tracking: https://github.com/pypa/pip/issues
87
+ .. _Discourse channel: https://discuss.python.org/c/packaging
88
+ .. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa
89
+ .. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev
90
+ .. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
.venv-1/Lib/site-packages/pip-25.1.1.dist-info/RECORD ADDED
@@ -0,0 +1,856 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ../../Scripts/pip.exe,sha256=mBIU9LHFECQeGfQ58PSf-27-Ltt_fv-Lcnu3YoJLCvg,108464
2
+ ../../Scripts/pip3.13.exe,sha256=mBIU9LHFECQeGfQ58PSf-27-Ltt_fv-Lcnu3YoJLCvg,108464
3
+ ../../Scripts/pip3.exe,sha256=mBIU9LHFECQeGfQ58PSf-27-Ltt_fv-Lcnu3YoJLCvg,108464
4
+ pip-25.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
5
+ pip-25.1.1.dist-info/METADATA,sha256=QFxj1tLpk8hGWrgQLRhJYUpwo_1FqBr43OT0srIZcmU,3649
6
+ pip-25.1.1.dist-info/RECORD,,
7
+ pip-25.1.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ pip-25.1.1.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
9
+ pip-25.1.1.dist-info/entry_points.txt,sha256=eeIjuzfnfR2PrhbjnbzFU6MnSS70kZLxwaHHq6M-bD0,87
10
+ pip-25.1.1.dist-info/licenses/AUTHORS.txt,sha256=YzDFTYpeYnwpmODDFTgyKZNKWcfdO10L5Ex_U6kJLRc,11223
11
+ pip-25.1.1.dist-info/licenses/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093
12
+ pip-25.1.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
13
+ pip/__init__.py,sha256=zQQ7Na8YWi0IN86IUKEzDAJtyVpXdJXYDkQ536caUiQ,357
14
+ pip/__main__.py,sha256=WzbhHXTbSE6gBY19mNN9m4s5o_365LOvTYSgqgbdBhE,854
15
+ pip/__pip-runner__.py,sha256=JOoEZTwrtv7jRaXBkgSQKAE04yNyfFmGHxqpHiGHvL0,1450
16
+ pip/__pycache__/__init__.cpython-313.pyc,,
17
+ pip/__pycache__/__main__.cpython-313.pyc,,
18
+ pip/__pycache__/__pip-runner__.cpython-313.pyc,,
19
+ pip/_internal/__init__.py,sha256=MfcoOluDZ8QMCFYal04IqOJ9q6m2V7a0aOsnI-WOxUo,513
20
+ pip/_internal/__pycache__/__init__.cpython-313.pyc,,
21
+ pip/_internal/__pycache__/build_env.cpython-313.pyc,,
22
+ pip/_internal/__pycache__/cache.cpython-313.pyc,,
23
+ pip/_internal/__pycache__/configuration.cpython-313.pyc,,
24
+ pip/_internal/__pycache__/exceptions.cpython-313.pyc,,
25
+ pip/_internal/__pycache__/main.cpython-313.pyc,,
26
+ pip/_internal/__pycache__/pyproject.cpython-313.pyc,,
27
+ pip/_internal/__pycache__/self_outdated_check.cpython-313.pyc,,
28
+ pip/_internal/__pycache__/wheel_builder.cpython-313.pyc,,
29
+ pip/_internal/build_env.py,sha256=60_espLI9X3C2db3Ww2gIcyjNk2cAPNcc5gsVO4DOqg,10924
30
+ pip/_internal/cache.py,sha256=SjhJK1C6NbonrU4AyYXKTOH0CGOk5cJrYt60mRANnPM,10368
31
+ pip/_internal/cli/__init__.py,sha256=Iqg_tKA771XuMO1P4t_sDHnSKPzkUb9D0DqunAmw_ko,131
32
+ pip/_internal/cli/__pycache__/__init__.cpython-313.pyc,,
33
+ pip/_internal/cli/__pycache__/autocompletion.cpython-313.pyc,,
34
+ pip/_internal/cli/__pycache__/base_command.cpython-313.pyc,,
35
+ pip/_internal/cli/__pycache__/cmdoptions.cpython-313.pyc,,
36
+ pip/_internal/cli/__pycache__/command_context.cpython-313.pyc,,
37
+ pip/_internal/cli/__pycache__/index_command.cpython-313.pyc,,
38
+ pip/_internal/cli/__pycache__/main.cpython-313.pyc,,
39
+ pip/_internal/cli/__pycache__/main_parser.cpython-313.pyc,,
40
+ pip/_internal/cli/__pycache__/parser.cpython-313.pyc,,
41
+ pip/_internal/cli/__pycache__/progress_bars.cpython-313.pyc,,
42
+ pip/_internal/cli/__pycache__/req_command.cpython-313.pyc,,
43
+ pip/_internal/cli/__pycache__/spinners.cpython-313.pyc,,
44
+ pip/_internal/cli/__pycache__/status_codes.cpython-313.pyc,,
45
+ pip/_internal/cli/autocompletion.py,sha256=fs0Wy16Ga5tX1IZKvww5BDi7i5zyzfCPvu7cgXlgXys,6864
46
+ pip/_internal/cli/base_command.py,sha256=0A8YuJVJh2YyXU8pdW0eidLg1eklCW5cU01mpI-FAxA,8351
47
+ pip/_internal/cli/cmdoptions.py,sha256=-_V4gjMa0c3U8-vXKAyb5xVViJNzFAxBI3Zx_6Ds5-g,31909
48
+ pip/_internal/cli/command_context.py,sha256=RHgIPwtObh5KhMrd3YZTkl8zbVG-6Okml7YbFX4Ehg0,774
49
+ pip/_internal/cli/index_command.py,sha256=kplkusUgCZy75jNCo-etaDmSG8UvqcR2W50ALDdm6dk,5720
50
+ pip/_internal/cli/main.py,sha256=1bXC7uL3tdb_EZlGVKs6_TgzC9tlKU7zhAZsbZA-IzY,2816
51
+ pip/_internal/cli/main_parser.py,sha256=chZqNmCuO_JYt8ynBCumh4crURaRoXBZ0RxoSYQIwCw,4337
52
+ pip/_internal/cli/parser.py,sha256=VCMtduzECUV87KaHNu-xJ-wLNL82yT3x16V4XBxOAqI,10825
53
+ pip/_internal/cli/progress_bars.py,sha256=r9BD4T2-egcInB1Uh9Jjw3EP9F3INy5kZhGwSePm9jo,4435
54
+ pip/_internal/cli/req_command.py,sha256=1yfssBvnUKNer8D7iT3OHqdJJNdCqRhwDqUFWgieppk,12934
55
+ pip/_internal/cli/spinners.py,sha256=hIJ83GerdFgFCdobIA23Jggetegl_uC4Sp586nzFbPE,5118
56
+ pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116
57
+ pip/_internal/commands/__init__.py,sha256=3405KyFv4l0ruxeF69oosFanxNQcC_fHBGv7Rpt0PXg,4009
58
+ pip/_internal/commands/__pycache__/__init__.cpython-313.pyc,,
59
+ pip/_internal/commands/__pycache__/cache.cpython-313.pyc,,
60
+ pip/_internal/commands/__pycache__/check.cpython-313.pyc,,
61
+ pip/_internal/commands/__pycache__/completion.cpython-313.pyc,,
62
+ pip/_internal/commands/__pycache__/configuration.cpython-313.pyc,,
63
+ pip/_internal/commands/__pycache__/debug.cpython-313.pyc,,
64
+ pip/_internal/commands/__pycache__/download.cpython-313.pyc,,
65
+ pip/_internal/commands/__pycache__/freeze.cpython-313.pyc,,
66
+ pip/_internal/commands/__pycache__/hash.cpython-313.pyc,,
67
+ pip/_internal/commands/__pycache__/help.cpython-313.pyc,,
68
+ pip/_internal/commands/__pycache__/index.cpython-313.pyc,,
69
+ pip/_internal/commands/__pycache__/inspect.cpython-313.pyc,,
70
+ pip/_internal/commands/__pycache__/install.cpython-313.pyc,,
71
+ pip/_internal/commands/__pycache__/list.cpython-313.pyc,,
72
+ pip/_internal/commands/__pycache__/lock.cpython-313.pyc,,
73
+ pip/_internal/commands/__pycache__/search.cpython-313.pyc,,
74
+ pip/_internal/commands/__pycache__/show.cpython-313.pyc,,
75
+ pip/_internal/commands/__pycache__/uninstall.cpython-313.pyc,,
76
+ pip/_internal/commands/__pycache__/wheel.cpython-313.pyc,,
77
+ pip/_internal/commands/cache.py,sha256=IOezTicHjGE5sWdBx2nwPVgbjuJHM3s-BZEkpZLemuY,8107
78
+ pip/_internal/commands/check.py,sha256=Hr_4eiMd9cgVDgEvjtIdw915NmL7ROIWW8enkr8slPQ,2268
79
+ pip/_internal/commands/completion.py,sha256=W9QFQTPLjy2tPACJ_y3g9EgB1pbsh7pvCUX8ocuIdPg,4554
80
+ pip/_internal/commands/configuration.py,sha256=n98enwp6y0b5G6fiRQjaZo43FlJKYve_daMhN-4BRNc,9766
81
+ pip/_internal/commands/debug.py,sha256=DNDRgE9YsKrbYzU0s3VKi8rHtKF4X13CJ_br_8PUXO0,6797
82
+ pip/_internal/commands/download.py,sha256=0qB0nys6ZEPsog451lDsjL5Bx7Z97t-B80oFZKhpzKM,5273
83
+ pip/_internal/commands/freeze.py,sha256=YW-aMmAzzOaBWWobo9g4DPKuWp0dTC32lWMqXzKFLzE,3144
84
+ pip/_internal/commands/hash.py,sha256=EVVOuvGtoPEdFi8SNnmdqlCQrhCxV-kJsdwtdcCnXGQ,1703
85
+ pip/_internal/commands/help.py,sha256=gcc6QDkcgHMOuAn5UxaZwAStsRBrnGSn_yxjS57JIoM,1132
86
+ pip/_internal/commands/index.py,sha256=8UucFVwx6FmM8cNbaPY8iI5kZdV3f6jhqDa-S8aGgpg,5068
87
+ pip/_internal/commands/inspect.py,sha256=PGrY9TRTRCM3y5Ml8Bdk8DEOXquWRfscr4DRo1LOTPc,3189
88
+ pip/_internal/commands/install.py,sha256=SRsiLpead7A8bLdxMqxTAJM3sUFHtgN9zgBT98UQz5E,29757
89
+ pip/_internal/commands/list.py,sha256=Rwtf8B0d0-WrkM7Qsv41-dWg8I_r9BLuZV30wSWnzgU,13274
90
+ pip/_internal/commands/lock.py,sha256=bUYrryKa769UXM61imojoeVVgc_1ZHK-9a0hIJmmlCg,5941
91
+ pip/_internal/commands/search.py,sha256=IrfvxcRCSoZY9A5XAlCF1wtl_y2HPcXslQdHcjzwMNk,5784
92
+ pip/_internal/commands/show.py,sha256=Yh5rGYhR2Io5TkL0fFCMWE1VqqM4xhPHjhbdS3QgEac,8028
93
+ pip/_internal/commands/uninstall.py,sha256=7pOR7enK76gimyxQbzxcG1OsyLXL3DvX939xmM8Fvtg,3892
94
+ pip/_internal/commands/wheel.py,sha256=NEfaVF4f41VBNSn93RL8gkfCEDmdGhbP9xu_dE6cdUk,6346
95
+ pip/_internal/configuration.py,sha256=-KOok6jh3hFzXMPQFPJ1_EFjBpAsge-RSreQuLHLmzo,14005
96
+ pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858
97
+ pip/_internal/distributions/__pycache__/__init__.cpython-313.pyc,,
98
+ pip/_internal/distributions/__pycache__/base.cpython-313.pyc,,
99
+ pip/_internal/distributions/__pycache__/installed.cpython-313.pyc,,
100
+ pip/_internal/distributions/__pycache__/sdist.cpython-313.pyc,,
101
+ pip/_internal/distributions/__pycache__/wheel.cpython-313.pyc,,
102
+ pip/_internal/distributions/base.py,sha256=QeB9qvKXDIjLdPBDE5fMgpfGqMMCr-govnuoQnGuiF8,1783
103
+ pip/_internal/distributions/installed.py,sha256=QinHFbWAQ8oE0pbD8MFZWkwlnfU1QYTccA1vnhrlYOU,842
104
+ pip/_internal/distributions/sdist.py,sha256=PlcP4a6-R6c98XnOM-b6Lkb3rsvh9iG4ok8shaanrzs,6751
105
+ pip/_internal/distributions/wheel.py,sha256=THBYfnv7VVt8mYhMYUtH13S1E7FDwtDyDfmUcl8ai0E,1317
106
+ pip/_internal/exceptions.py,sha256=wpE11H0e4L9G6AH70sRG149z82X7wX530HK-9eA_DIQ,28464
107
+ pip/_internal/index/__init__.py,sha256=tzwMH_fhQeubwMqHdSivasg1cRgTSbNg2CiMVnzMmyU,29
108
+ pip/_internal/index/__pycache__/__init__.cpython-313.pyc,,
109
+ pip/_internal/index/__pycache__/collector.cpython-313.pyc,,
110
+ pip/_internal/index/__pycache__/package_finder.cpython-313.pyc,,
111
+ pip/_internal/index/__pycache__/sources.cpython-313.pyc,,
112
+ pip/_internal/index/collector.py,sha256=RdPO0JLAlmyBWPAWYHPyRoGjz3GNAeTngCNkbGey_mE,16265
113
+ pip/_internal/index/package_finder.py,sha256=RohRzzLExoXl7QDdTiqyxIaQEcHUn6UNOr9KzC1vjL0,38446
114
+ pip/_internal/index/sources.py,sha256=lPBLK5Xiy8Q6IQMio26Wl7ocfZOKkgGklIBNyUJ23fI,8632
115
+ pip/_internal/locations/__init__.py,sha256=vvTMNxghT0aEXrSdqpNtuRDGx08bzJxfDAUUfQ0Vb0A,14309
116
+ pip/_internal/locations/__pycache__/__init__.cpython-313.pyc,,
117
+ pip/_internal/locations/__pycache__/_distutils.cpython-313.pyc,,
118
+ pip/_internal/locations/__pycache__/_sysconfig.cpython-313.pyc,,
119
+ pip/_internal/locations/__pycache__/base.cpython-313.pyc,,
120
+ pip/_internal/locations/_distutils.py,sha256=x6nyVLj7X11Y4khIdf-mFlxMl2FWadtVEgeb8upc_WI,6013
121
+ pip/_internal/locations/_sysconfig.py,sha256=IGzds60qsFneRogC-oeBaY7bEh3lPt_v47kMJChQXsU,7724
122
+ pip/_internal/locations/base.py,sha256=RQiPi1d4FVM2Bxk04dQhXZ2PqkeljEL2fZZ9SYqIQ78,2556
123
+ pip/_internal/main.py,sha256=r-UnUe8HLo5XFJz8inTcOOTiu_sxNhgHb6VwlGUllOI,340
124
+ pip/_internal/metadata/__init__.py,sha256=nGWuZvjQlIHudlMz_-bsUs2LDA2ZKNPGevZoEGcd64Y,5723
125
+ pip/_internal/metadata/__pycache__/__init__.cpython-313.pyc,,
126
+ pip/_internal/metadata/__pycache__/_json.cpython-313.pyc,,
127
+ pip/_internal/metadata/__pycache__/base.cpython-313.pyc,,
128
+ pip/_internal/metadata/__pycache__/pkg_resources.cpython-313.pyc,,
129
+ pip/_internal/metadata/_json.py,sha256=ezrIYazHCINM2QUk1eA9wEAMj3aeGWeDVgGalgUzKpc,2707
130
+ pip/_internal/metadata/base.py,sha256=jCbzdIc8MgWnPR4rfrvSQhSVzSoOyKOXhj3xe8BoG8c,25467
131
+ pip/_internal/metadata/importlib/__init__.py,sha256=jUUidoxnHcfITHHaAWG1G2i5fdBYklv_uJcjo2x7VYE,135
132
+ pip/_internal/metadata/importlib/__pycache__/__init__.cpython-313.pyc,,
133
+ pip/_internal/metadata/importlib/__pycache__/_compat.cpython-313.pyc,,
134
+ pip/_internal/metadata/importlib/__pycache__/_dists.cpython-313.pyc,,
135
+ pip/_internal/metadata/importlib/__pycache__/_envs.cpython-313.pyc,,
136
+ pip/_internal/metadata/importlib/_compat.py,sha256=c6av8sP8BBjAZuFSJow1iWfygUXNM3xRTCn5nqw6B9M,2796
137
+ pip/_internal/metadata/importlib/_dists.py,sha256=ftmYiyfUGUIjnVwt6W-Ijsimy5c28KgmXly5Q5IQ2P4,8279
138
+ pip/_internal/metadata/importlib/_envs.py,sha256=X63CkdAPJCYPhefYSLiQzPf9ijMXm5nL_A_Z68yp2-w,5297
139
+ pip/_internal/metadata/pkg_resources.py,sha256=U07ETAINSGeSRBfWUG93E4tZZbaW_f7PGzEqZN0hulc,10542
140
+ pip/_internal/models/__init__.py,sha256=AjmCEBxX_MH9f_jVjIGNCFJKYCYeSEe18yyvNx4uRKQ,62
141
+ pip/_internal/models/__pycache__/__init__.cpython-313.pyc,,
142
+ pip/_internal/models/__pycache__/candidate.cpython-313.pyc,,
143
+ pip/_internal/models/__pycache__/direct_url.cpython-313.pyc,,
144
+ pip/_internal/models/__pycache__/format_control.cpython-313.pyc,,
145
+ pip/_internal/models/__pycache__/index.cpython-313.pyc,,
146
+ pip/_internal/models/__pycache__/installation_report.cpython-313.pyc,,
147
+ pip/_internal/models/__pycache__/link.cpython-313.pyc,,
148
+ pip/_internal/models/__pycache__/pylock.cpython-313.pyc,,
149
+ pip/_internal/models/__pycache__/scheme.cpython-313.pyc,,
150
+ pip/_internal/models/__pycache__/search_scope.cpython-313.pyc,,
151
+ pip/_internal/models/__pycache__/selection_prefs.cpython-313.pyc,,
152
+ pip/_internal/models/__pycache__/target_python.cpython-313.pyc,,
153
+ pip/_internal/models/__pycache__/wheel.cpython-313.pyc,,
154
+ pip/_internal/models/candidate.py,sha256=zzgFRuw_kWPjKpGw7LC0ZUMD2CQ2EberUIYs8izjdCA,753
155
+ pip/_internal/models/direct_url.py,sha256=lJ1fIVTgk5UG5SzTNR0FpgSGAQjChlH-3otgiEJAhIs,6576
156
+ pip/_internal/models/format_control.py,sha256=wtsQqSK9HaUiNxQEuB-C62eVimw6G4_VQFxV9-_KDBE,2486
157
+ pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030
158
+ pip/_internal/models/installation_report.py,sha256=zRVZoaz-2vsrezj_H3hLOhMZCK9c7TbzWgC-jOalD00,2818
159
+ pip/_internal/models/link.py,sha256=wIAgxhiu05ycLhbtAibknXX5L6X9ju_PPLVnMcvh9B4,21511
160
+ pip/_internal/models/pylock.py,sha256=n3-I26bf2v-Kn6qcx4ATB_Zel2SLhaUxZBmsMeGgYAo,6196
161
+ pip/_internal/models/scheme.py,sha256=PakmHJM3e8OOWSZFtfz1Az7f1meONJnkGuQxFlt3wBE,575
162
+ pip/_internal/models/search_scope.py,sha256=67NEnsYY84784S-MM7ekQuo9KXLH-7MzFntXjapvAo0,4531
163
+ pip/_internal/models/selection_prefs.py,sha256=qaFfDs3ciqoXPg6xx45N1jPLqccLJw4N0s4P0PyHTQ8,2015
164
+ pip/_internal/models/target_python.py,sha256=2XaH2rZ5ZF-K5wcJbEMGEl7SqrTToDDNkrtQ2v_v_-Q,4271
165
+ pip/_internal/models/wheel.py,sha256=10NUTXIRjf2P8oe1Wzolv8oUv7-YurrOduVFUIaDhdM,5506
166
+ pip/_internal/network/__init__.py,sha256=FMy06P__y6jMjUc8z3ZcQdKF-pmZ2zM14_vBeHPGhUI,49
167
+ pip/_internal/network/__pycache__/__init__.cpython-313.pyc,,
168
+ pip/_internal/network/__pycache__/auth.cpython-313.pyc,,
169
+ pip/_internal/network/__pycache__/cache.cpython-313.pyc,,
170
+ pip/_internal/network/__pycache__/download.cpython-313.pyc,,
171
+ pip/_internal/network/__pycache__/lazy_wheel.cpython-313.pyc,,
172
+ pip/_internal/network/__pycache__/session.cpython-313.pyc,,
173
+ pip/_internal/network/__pycache__/utils.cpython-313.pyc,,
174
+ pip/_internal/network/__pycache__/xmlrpc.cpython-313.pyc,,
175
+ pip/_internal/network/auth.py,sha256=D4gASjUrqoDFlSt6gQ767KAAjv6PUyJU0puDlhXNVRE,20809
176
+ pip/_internal/network/cache.py,sha256=JGYT-BUaSMdEBwII_K1UE6qyBItz7hzGkyLl_JRzkBY,4613
177
+ pip/_internal/network/download.py,sha256=6IdZyoERWIsXXFUFL_h_e_xi8Z0G0UlpkodPy8qKv2U,11078
178
+ pip/_internal/network/lazy_wheel.py,sha256=PBdoMoNQQIA84Fhgne38jWF52W4x_KtsHjxgv4dkRKA,7622
179
+ pip/_internal/network/session.py,sha256=msM4es16LmmNEYNkrYyg8fTc7gAHbKFltawfKP27LOI,18771
180
+ pip/_internal/network/utils.py,sha256=Inaxel-NxBu4PQWkjyErdnfewsFCcgHph7dzR1-FboY,4088
181
+ pip/_internal/network/xmlrpc.py,sha256=jW9oDSWamMld3iZOO9RbonVC8ZStkHyppCszoevkuJg,1837
182
+ pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
+ pip/_internal/operations/__pycache__/__init__.cpython-313.pyc,,
184
+ pip/_internal/operations/__pycache__/check.cpython-313.pyc,,
185
+ pip/_internal/operations/__pycache__/freeze.cpython-313.pyc,,
186
+ pip/_internal/operations/__pycache__/prepare.cpython-313.pyc,,
187
+ pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
+ pip/_internal/operations/build/__pycache__/__init__.cpython-313.pyc,,
189
+ pip/_internal/operations/build/__pycache__/build_tracker.cpython-313.pyc,,
190
+ pip/_internal/operations/build/__pycache__/metadata.cpython-313.pyc,,
191
+ pip/_internal/operations/build/__pycache__/metadata_editable.cpython-313.pyc,,
192
+ pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-313.pyc,,
193
+ pip/_internal/operations/build/__pycache__/wheel.cpython-313.pyc,,
194
+ pip/_internal/operations/build/__pycache__/wheel_editable.cpython-313.pyc,,
195
+ pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-313.pyc,,
196
+ pip/_internal/operations/build/build_tracker.py,sha256=-ARW_TcjHCOX7D2NUOGntB4Fgc6b4aolsXkAK6BWL7w,4774
197
+ pip/_internal/operations/build/metadata.py,sha256=INHaeiRfOiLYCXApfDNRo9Cw2xI4VwTc0KItvfdfOjk,1421
198
+ pip/_internal/operations/build/metadata_editable.py,sha256=oWudMsnjy4loO_Jy7g4N9nxsnaEX_iDlVRgCy7pu1rs,1509
199
+ pip/_internal/operations/build/metadata_legacy.py,sha256=wv8cFA0wTqF62Jlm9QwloYZsofOyQ7sWBBmvCcVvn1k,2189
200
+ pip/_internal/operations/build/wheel.py,sha256=sT12FBLAxDC6wyrDorh8kvcZ1jG5qInCRWzzP-UkJiQ,1075
201
+ pip/_internal/operations/build/wheel_editable.py,sha256=yOtoH6zpAkoKYEUtr8FhzrYnkNHQaQBjWQ2HYae1MQg,1417
202
+ pip/_internal/operations/build/wheel_legacy.py,sha256=KXpyGYoCQYcudXNZvohLXgWHaCk4Gf3z0dbS9ol4uu0,3620
203
+ pip/_internal/operations/check.py,sha256=4cnD_2eglsDe5s2CoYkxDt4HcRitTywzLMfTZ-tGQ4U,5911
204
+ pip/_internal/operations/freeze.py,sha256=1_M79jAQKnCxWr-KCCmHuVXOVFGaUJHmoWLfFzgh7K4,9843
205
+ pip/_internal/operations/install/__init__.py,sha256=ak-UETcQPKlFZaWoYKWu5QVXbpFBvg0sXc3i0O4vSYY,50
206
+ pip/_internal/operations/install/__pycache__/__init__.cpython-313.pyc,,
207
+ pip/_internal/operations/install/__pycache__/editable_legacy.cpython-313.pyc,,
208
+ pip/_internal/operations/install/__pycache__/wheel.cpython-313.pyc,,
209
+ pip/_internal/operations/install/editable_legacy.py,sha256=TI6wT8sLqDTprWZLYEOBOe7a6-1B9uwKb7kTBxLIaWY,1282
210
+ pip/_internal/operations/install/wheel.py,sha256=4NYSQ9ypl69iiduh5gUPCK3WNYqouTHZ0rMXoVgkiZw,27553
211
+ pip/_internal/operations/prepare.py,sha256=-i9dYwwJJjN7h6sZTabcz84tizgn7EAsY0sHnLAfs3Q,28363
212
+ pip/_internal/pyproject.py,sha256=GLJ6rWRS5_2noKdajohoLyDty57Z7QXhcUAYghmTnWc,7286
213
+ pip/_internal/req/__init__.py,sha256=dX2QGlfDwEqE5pLjOeM-f2qEgXFn6f2Vdi_zIHAYy1k,3096
214
+ pip/_internal/req/__pycache__/__init__.cpython-313.pyc,,
215
+ pip/_internal/req/__pycache__/constructors.cpython-313.pyc,,
216
+ pip/_internal/req/__pycache__/req_dependency_group.cpython-313.pyc,,
217
+ pip/_internal/req/__pycache__/req_file.cpython-313.pyc,,
218
+ pip/_internal/req/__pycache__/req_install.cpython-313.pyc,,
219
+ pip/_internal/req/__pycache__/req_set.cpython-313.pyc,,
220
+ pip/_internal/req/__pycache__/req_uninstall.cpython-313.pyc,,
221
+ pip/_internal/req/constructors.py,sha256=v1qzCN1mIldwx-nCrPc8JO4lxkm3Fv8M5RWvt8LISjc,18430
222
+ pip/_internal/req/req_dependency_group.py,sha256=5PGuZidqwDeTHZkP4tnNrlPrasfvJBONd1B5S0146zs,2677
223
+ pip/_internal/req/req_file.py,sha256=eys82McgaICOGic2UZRHjD720piKJPwmeSYdXlWwl6w,20234
224
+ pip/_internal/req/req_install.py,sha256=gMoFak9zrhjHlHaOQxPFheHKtIobppFgq1WrKel_nTE,35788
225
+ pip/_internal/req/req_set.py,sha256=j3esG0s6SzoVReX9rWn4rpYNtyET_fwxbwJPRimvRxo,2858
226
+ pip/_internal/req/req_uninstall.py,sha256=PQ6SyocDycUYsLAsTpjkbdwO_qjdo-y8BvQfZ5Avdrw,24075
227
+ pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
228
+ pip/_internal/resolution/__pycache__/__init__.cpython-313.pyc,,
229
+ pip/_internal/resolution/__pycache__/base.cpython-313.pyc,,
230
+ pip/_internal/resolution/base.py,sha256=qlmh325SBVfvG6Me9gc5Nsh5sdwHBwzHBq6aEXtKsLA,583
231
+ pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
232
+ pip/_internal/resolution/legacy/__pycache__/__init__.cpython-313.pyc,,
233
+ pip/_internal/resolution/legacy/__pycache__/resolver.cpython-313.pyc,,
234
+ pip/_internal/resolution/legacy/resolver.py,sha256=3HZiJBRd1FTN6jQpI4qRO8-TbLYeIbUTS6PFvXnXs2w,24068
235
+ pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
236
+ pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-313.pyc,,
237
+ pip/_internal/resolution/resolvelib/__pycache__/base.cpython-313.pyc,,
238
+ pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-313.pyc,,
239
+ pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-313.pyc,,
240
+ pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-313.pyc,,
241
+ pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-313.pyc,,
242
+ pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-313.pyc,,
243
+ pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-313.pyc,,
244
+ pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-313.pyc,,
245
+ pip/_internal/resolution/resolvelib/base.py,sha256=DCf669FsqyQY5uqXeePDHQY1e4QO-pBzWH8O0s9-K94,5023
246
+ pip/_internal/resolution/resolvelib/candidates.py,sha256=U3Qp83jhM_RiJviyrlPCijbps6wYO6VsTDaTnCf_B3o,20241
247
+ pip/_internal/resolution/resolvelib/factory.py,sha256=FCvHc9M8UJ_7iU63QtPiHuq_BmfdnBiMJ8WaDBJNFxk,32668
248
+ pip/_internal/resolution/resolvelib/found_candidates.py,sha256=6lAF_pLQ2_Z0CBOHIFxGp6NfvT1uwIpCui6e-GgI5tk,6000
249
+ pip/_internal/resolution/resolvelib/provider.py,sha256=8ptYOOjfa336D4FZ751EQHR0LDq8jJhIGJXDou8Cv8Y,11190
250
+ pip/_internal/resolution/resolvelib/reporter.py,sha256=EwJAHOjWZ8eTHQWss7zJjmQEj6ooP6oWSwwVXFtgpqQ,3260
251
+ pip/_internal/resolution/resolvelib/requirements.py,sha256=7JG4Z72e5Yk4vU0S5ulGvbqTy4FMQGYhY5zQhX9zTtY,8065
252
+ pip/_internal/resolution/resolvelib/resolver.py,sha256=9zcR4c7UZV1j2ILTmb68Ck_5HdvQvf4cmTBE2bWHkKg,12785
253
+ pip/_internal/self_outdated_check.py,sha256=1PFtttvLAeyCVR3tPoBq2sOlPD0IJ-KSqU6bc1HUk9c,8318
254
+ pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
255
+ pip/_internal/utils/__pycache__/__init__.cpython-313.pyc,,
256
+ pip/_internal/utils/__pycache__/_jaraco_text.cpython-313.pyc,,
257
+ pip/_internal/utils/__pycache__/_log.cpython-313.pyc,,
258
+ pip/_internal/utils/__pycache__/appdirs.cpython-313.pyc,,
259
+ pip/_internal/utils/__pycache__/compat.cpython-313.pyc,,
260
+ pip/_internal/utils/__pycache__/compatibility_tags.cpython-313.pyc,,
261
+ pip/_internal/utils/__pycache__/datetime.cpython-313.pyc,,
262
+ pip/_internal/utils/__pycache__/deprecation.cpython-313.pyc,,
263
+ pip/_internal/utils/__pycache__/direct_url_helpers.cpython-313.pyc,,
264
+ pip/_internal/utils/__pycache__/egg_link.cpython-313.pyc,,
265
+ pip/_internal/utils/__pycache__/entrypoints.cpython-313.pyc,,
266
+ pip/_internal/utils/__pycache__/filesystem.cpython-313.pyc,,
267
+ pip/_internal/utils/__pycache__/filetypes.cpython-313.pyc,,
268
+ pip/_internal/utils/__pycache__/glibc.cpython-313.pyc,,
269
+ pip/_internal/utils/__pycache__/hashes.cpython-313.pyc,,
270
+ pip/_internal/utils/__pycache__/logging.cpython-313.pyc,,
271
+ pip/_internal/utils/__pycache__/misc.cpython-313.pyc,,
272
+ pip/_internal/utils/__pycache__/packaging.cpython-313.pyc,,
273
+ pip/_internal/utils/__pycache__/retry.cpython-313.pyc,,
274
+ pip/_internal/utils/__pycache__/setuptools_build.cpython-313.pyc,,
275
+ pip/_internal/utils/__pycache__/subprocess.cpython-313.pyc,,
276
+ pip/_internal/utils/__pycache__/temp_dir.cpython-313.pyc,,
277
+ pip/_internal/utils/__pycache__/unpacking.cpython-313.pyc,,
278
+ pip/_internal/utils/__pycache__/urls.cpython-313.pyc,,
279
+ pip/_internal/utils/__pycache__/virtualenv.cpython-313.pyc,,
280
+ pip/_internal/utils/__pycache__/wheel.cpython-313.pyc,,
281
+ pip/_internal/utils/_jaraco_text.py,sha256=M15uUPIh5NpP1tdUGBxRau6q1ZAEtI8-XyLEETscFfE,3350
282
+ pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015
283
+ pip/_internal/utils/appdirs.py,sha256=zrIISCn2QxlXYw-zJZZBTrFNTyy_0WNKiI-TOoN6wJo,1705
284
+ pip/_internal/utils/compat.py,sha256=ckkFveBiYQjRWjkNsajt_oWPS57tJvE8XxoC4OIYgCY,2399
285
+ pip/_internal/utils/compatibility_tags.py,sha256=q5W7IrNlqC5ke0AqWRG6aX5pimiqh--xuPCCNwCKPsU,6662
286
+ pip/_internal/utils/datetime.py,sha256=Gt29Ml4ToPSM88j54iu43WKtrU9A-moP4QmMiiqzedU,241
287
+ pip/_internal/utils/deprecation.py,sha256=k7Qg_UBAaaTdyq82YVARA6D7RmcGTXGv7fnfcgigj4Q,3707
288
+ pip/_internal/utils/direct_url_helpers.py,sha256=r2MRtkVDACv9AGqYODBUC9CjwgtsUU1s68hmgfCJMtA,3196
289
+ pip/_internal/utils/egg_link.py,sha256=0FePZoUYKv4RGQ2t6x7w5Z427wbA_Uo3WZnAkrgsuqo,2463
290
+ pip/_internal/utils/entrypoints.py,sha256=4CheZ81OBPPLb3Gn-X_WEPtllUibpwDVzlVQ4RFh7PM,3325
291
+ pip/_internal/utils/filesystem.py,sha256=ajvA-q4ocliW9kPp8Yquh-4vssXbu-UKbo5FV9V4X64,4950
292
+ pip/_internal/utils/filetypes.py,sha256=OCPzUxq3Aa6k_95MiI8DYgkOzutTs47fA-v-vYUJp9E,715
293
+ pip/_internal/utils/glibc.py,sha256=vUkWq_1pJuzcYNcGKLlQmABoUiisK8noYY1yc8Wq4w4,3734
294
+ pip/_internal/utils/hashes.py,sha256=XGGLL0AG8-RhWnyz87xF6MFZ--BKadHU35D47eApCKI,4972
295
+ pip/_internal/utils/logging.py,sha256=zMZK1NxfhM4QMGUyaU9q1grNuDhLSVbSkGCvZBKmaPw,12076
296
+ pip/_internal/utils/misc.py,sha256=DWnYxBUItjRp7hhxEg4ih6P6YpKrykM86dbi_EcU8SQ,23450
297
+ pip/_internal/utils/packaging.py,sha256=CjJOqLNENW-U88ojOllVL40f1ab2W2Bm3KHCavwNNfw,1603
298
+ pip/_internal/utils/retry.py,sha256=mhFbykXjhTnZfgzeuy-vl9c8nECnYn_CMtwNJX2tYzQ,1392
299
+ pip/_internal/utils/setuptools_build.py,sha256=J9EyRantVgu4V-xS_qfQy2mcPLVUM7A-227QdKGUZCA,4482
300
+ pip/_internal/utils/subprocess.py,sha256=EsvqSRiSMHF98T8Txmu6NLU3U--MpTTQjtNgKP0P--M,8988
301
+ pip/_internal/utils/temp_dir.py,sha256=5qOXe8M4JeY6vaFQM867d5zkp1bSwMZ-KT5jymmP0Zg,9310
302
+ pip/_internal/utils/unpacking.py,sha256=4yCqlRAI2zxl5tfxlnLoWLNcEn-k1c3vaet_oaJ42iI,11926
303
+ pip/_internal/utils/urls.py,sha256=qceSOZb5lbNDrHNsv7_S4L4Ytszja5NwPKUMnZHbYnM,1599
304
+ pip/_internal/utils/virtualenv.py,sha256=S6f7csYorRpiD6cvn3jISZYc3I8PJC43H5iMFpRAEDU,3456
305
+ pip/_internal/utils/wheel.py,sha256=MHObYn6d7VyZL10i-W1xoJZ2hT5-wB1WkII70AsYUE8,4493
306
+ pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596
307
+ pip/_internal/vcs/__pycache__/__init__.cpython-313.pyc,,
308
+ pip/_internal/vcs/__pycache__/bazaar.cpython-313.pyc,,
309
+ pip/_internal/vcs/__pycache__/git.cpython-313.pyc,,
310
+ pip/_internal/vcs/__pycache__/mercurial.cpython-313.pyc,,
311
+ pip/_internal/vcs/__pycache__/subversion.cpython-313.pyc,,
312
+ pip/_internal/vcs/__pycache__/versioncontrol.cpython-313.pyc,,
313
+ pip/_internal/vcs/bazaar.py,sha256=EKStcQaKpNu0NK4p5Q10Oc4xb3DUxFw024XrJy40bFQ,3528
314
+ pip/_internal/vcs/git.py,sha256=3KLPrKsDL9xZchmz4H1Obo8fM2Fh8ChrhtDHWjbkj-I,18591
315
+ pip/_internal/vcs/mercurial.py,sha256=oULOhzJ2Uie-06d1omkL-_Gc6meGaUkyogvqG9ZCyPs,5249
316
+ pip/_internal/vcs/subversion.py,sha256=ddTugHBqHzV3ebKlU5QXHPN4gUqlyXbOx8q8NgXKvs8,11735
317
+ pip/_internal/vcs/versioncontrol.py,sha256=cvf_-hnTAjQLXJ3d17FMNhQfcO1AcKWUF10tfrYyP-c,22440
318
+ pip/_internal/wheel_builder.py,sha256=Z5Z2ANADbKdSHY9BHqw9zG5-1AxstO6YM6m9yLWe7Vw,11212
319
+ pip/_vendor/__init__.py,sha256=WzusPTGWIMeQQWSVJ0h2rafGkVTa9WKJ2HT-2-EoZrU,4907
320
+ pip/_vendor/__pycache__/__init__.cpython-313.pyc,,
321
+ pip/_vendor/__pycache__/typing_extensions.cpython-313.pyc,,
322
+ pip/_vendor/cachecontrol/__init__.py,sha256=x9ecUkiwNvAGfE3g0eaRx3VrJZnZWAluA2LRcvab3HQ,677
323
+ pip/_vendor/cachecontrol/__pycache__/__init__.cpython-313.pyc,,
324
+ pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-313.pyc,,
325
+ pip/_vendor/cachecontrol/__pycache__/adapter.cpython-313.pyc,,
326
+ pip/_vendor/cachecontrol/__pycache__/cache.cpython-313.pyc,,
327
+ pip/_vendor/cachecontrol/__pycache__/controller.cpython-313.pyc,,
328
+ pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-313.pyc,,
329
+ pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-313.pyc,,
330
+ pip/_vendor/cachecontrol/__pycache__/serialize.cpython-313.pyc,,
331
+ pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-313.pyc,,
332
+ pip/_vendor/cachecontrol/_cmd.py,sha256=iist2EpzJvDVIhMAxXq8iFnTBsiZAd6iplxfmNboNyk,1737
333
+ pip/_vendor/cachecontrol/adapter.py,sha256=8y6rTPXOzVHmDKCW5CR9sivLVuDv-cpdGcZYdRWNaPw,6599
334
+ pip/_vendor/cachecontrol/cache.py,sha256=OXwv7Fn2AwnKNiahJHnjtvaKLndvVLv_-zO-ltlV9qI,1953
335
+ pip/_vendor/cachecontrol/caches/__init__.py,sha256=dtrrroK5BnADR1GWjCZ19aZ0tFsMfvFBtLQQU1sp_ag,303
336
+ pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-313.pyc,,
337
+ pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-313.pyc,,
338
+ pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-313.pyc,,
339
+ pip/_vendor/cachecontrol/caches/file_cache.py,sha256=d8upFmy_zwaCmlbWEVBlLXFddt8Zw8c5SFpxeOZsdfw,4117
340
+ pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=9rmqwtYu_ljVkW6_oLqbC7EaX_a8YT_yLuna-eS0dgo,1386
341
+ pip/_vendor/cachecontrol/controller.py,sha256=cx0Hl8xLZgUuXuy78Gih9AYjCtqurmYjVJxyA4yWt7w,19101
342
+ pip/_vendor/cachecontrol/filewrapper.py,sha256=2ktXNPE0KqnyzF24aOsKCA58HQq1xeC6l2g6_zwjghc,4291
343
+ pip/_vendor/cachecontrol/heuristics.py,sha256=gqMXU8w0gQuEQiSdu3Yg-0vd9kW7nrWKbLca75rheGE,4881
344
+ pip/_vendor/cachecontrol/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
345
+ pip/_vendor/cachecontrol/serialize.py,sha256=HQd2IllQ05HzPkVLMXTF2uX5mjEQjDBkxCqUJUODpZk,5163
346
+ pip/_vendor/cachecontrol/wrapper.py,sha256=hsGc7g8QGQTT-4f8tgz3AM5qwScg6FO0BSdLSRdEvpU,1417
347
+ pip/_vendor/certifi/__init__.py,sha256=neIaAf7BM36ygmQCmy-ZsSyjnvjWghFeu13wwEAnjj0,94
348
+ pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255
349
+ pip/_vendor/certifi/__pycache__/__init__.cpython-313.pyc,,
350
+ pip/_vendor/certifi/__pycache__/__main__.cpython-313.pyc,,
351
+ pip/_vendor/certifi/__pycache__/core.cpython-313.pyc,,
352
+ pip/_vendor/certifi/cacert.pem,sha256=xVsh-Qf3-G1IrdCTVS-1ZRdJ_1-GBQjMu0I9bB-9gMc,297255
353
+ pip/_vendor/certifi/core.py,sha256=2SRT5rIcQChFDbe37BQa-kULxAgJ8qN6l1jfqTp4HIs,4486
354
+ pip/_vendor/certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
355
+ pip/_vendor/dependency_groups/__init__.py,sha256=C3OFu0NGwDzQ4LOmmSOFPsRSvkbBn-mdd4j_5YqJw-s,250
356
+ pip/_vendor/dependency_groups/__main__.py,sha256=UNTM7P5mfVtT7wDi9kOTXWgV3fu3e8bTrt1Qp1jvjKo,1709
357
+ pip/_vendor/dependency_groups/__pycache__/__init__.cpython-313.pyc,,
358
+ pip/_vendor/dependency_groups/__pycache__/__main__.cpython-313.pyc,,
359
+ pip/_vendor/dependency_groups/__pycache__/_implementation.cpython-313.pyc,,
360
+ pip/_vendor/dependency_groups/__pycache__/_lint_dependency_groups.cpython-313.pyc,,
361
+ pip/_vendor/dependency_groups/__pycache__/_pip_wrapper.cpython-313.pyc,,
362
+ pip/_vendor/dependency_groups/__pycache__/_toml_compat.cpython-313.pyc,,
363
+ pip/_vendor/dependency_groups/_implementation.py,sha256=Gqb2DlQELRakeHlKf6QtQSW0M-bcEomxHw4JsvID1ls,8041
364
+ pip/_vendor/dependency_groups/_lint_dependency_groups.py,sha256=yp-DDqKXtbkDTNa0ifa-FmOA8ra24lPZEXftW-R5AuI,1710
365
+ pip/_vendor/dependency_groups/_pip_wrapper.py,sha256=nuVW_w_ntVxpE26ELEvngMY0N04sFLsijXRyZZROFG8,1865
366
+ pip/_vendor/dependency_groups/_toml_compat.py,sha256=BHnXnFacm3DeolsA35GjI6qkDApvua-1F20kv3BfZWE,285
367
+ pip/_vendor/dependency_groups/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
368
+ pip/_vendor/distlib/__init__.py,sha256=dcwgYGYGQqAEawBXPDtIx80DO_3cOmFv8HTc8JMzknQ,625
369
+ pip/_vendor/distlib/__pycache__/__init__.cpython-313.pyc,,
370
+ pip/_vendor/distlib/__pycache__/compat.cpython-313.pyc,,
371
+ pip/_vendor/distlib/__pycache__/database.cpython-313.pyc,,
372
+ pip/_vendor/distlib/__pycache__/index.cpython-313.pyc,,
373
+ pip/_vendor/distlib/__pycache__/locators.cpython-313.pyc,,
374
+ pip/_vendor/distlib/__pycache__/manifest.cpython-313.pyc,,
375
+ pip/_vendor/distlib/__pycache__/markers.cpython-313.pyc,,
376
+ pip/_vendor/distlib/__pycache__/metadata.cpython-313.pyc,,
377
+ pip/_vendor/distlib/__pycache__/resources.cpython-313.pyc,,
378
+ pip/_vendor/distlib/__pycache__/scripts.cpython-313.pyc,,
379
+ pip/_vendor/distlib/__pycache__/util.cpython-313.pyc,,
380
+ pip/_vendor/distlib/__pycache__/version.cpython-313.pyc,,
381
+ pip/_vendor/distlib/__pycache__/wheel.cpython-313.pyc,,
382
+ pip/_vendor/distlib/compat.py,sha256=2jRSjRI4o-vlXeTK2BCGIUhkc6e9ZGhSsacRM5oseTw,41467
383
+ pip/_vendor/distlib/database.py,sha256=mHy_LxiXIsIVRb-T0-idBrVLw3Ffij5teHCpbjmJ9YU,51160
384
+ pip/_vendor/distlib/index.py,sha256=lTbw268rRhj8dw1sib3VZ_0EhSGgoJO3FKJzSFMOaeA,20797
385
+ pip/_vendor/distlib/locators.py,sha256=oBeAZpFuPQSY09MgNnLfQGGAXXvVO96BFpZyKMuK4tM,51026
386
+ pip/_vendor/distlib/manifest.py,sha256=3qfmAmVwxRqU1o23AlfXrQGZzh6g_GGzTAP_Hb9C5zQ,14168
387
+ pip/_vendor/distlib/markers.py,sha256=X6sDvkFGcYS8gUW8hfsWuKEKAqhQZAJ7iXOMLxRYjYk,5164
388
+ pip/_vendor/distlib/metadata.py,sha256=zil3sg2EUfLXVigljY2d_03IJt-JSs7nX-73fECMX2s,38724
389
+ pip/_vendor/distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820
390
+ pip/_vendor/distlib/scripts.py,sha256=BJliaDAZaVB7WAkwokgC3HXwLD2iWiHaVI50H7C6eG8,18608
391
+ pip/_vendor/distlib/t32.exe,sha256=a0GV5kCoWsMutvliiCKmIgV98eRZ33wXoS-XrqvJQVs,97792
392
+ pip/_vendor/distlib/t64-arm.exe,sha256=68TAa32V504xVBnufojh0PcenpR3U4wAqTqf-MZqbPw,182784
393
+ pip/_vendor/distlib/t64.exe,sha256=gaYY8hy4fbkHYTTnA4i26ct8IQZzkBG2pRdy0iyuBrc,108032
394
+ pip/_vendor/distlib/util.py,sha256=vMPGvsS4j9hF6Y9k3Tyom1aaHLb0rFmZAEyzeAdel9w,66682
395
+ pip/_vendor/distlib/version.py,sha256=s5VIs8wBn0fxzGxWM_aA2ZZyx525HcZbMvcTlTyZ3Rg,23727
396
+ pip/_vendor/distlib/w32.exe,sha256=R4csx3-OGM9kL4aPIzQKRo5TfmRSHZo6QWyLhDhNBks,91648
397
+ pip/_vendor/distlib/w64-arm.exe,sha256=xdyYhKj0WDcVUOCb05blQYvzdYIKMbmJn2SZvzkcey4,168448
398
+ pip/_vendor/distlib/w64.exe,sha256=ejGf-rojoBfXseGLpya6bFTFPWRG21X5KvU8J5iU-K0,101888
399
+ pip/_vendor/distlib/wheel.py,sha256=DFIVguEQHCdxnSdAO0dfFsgMcvVZitg7bCOuLwZ7A_s,43979
400
+ pip/_vendor/distro/__init__.py,sha256=2fHjF-SfgPvjyNZ1iHh_wjqWdR_Yo5ODHwZC0jLBPhc,981
401
+ pip/_vendor/distro/__main__.py,sha256=bu9d3TifoKciZFcqRBuygV3GSuThnVD_m2IK4cz96Vs,64
402
+ pip/_vendor/distro/__pycache__/__init__.cpython-313.pyc,,
403
+ pip/_vendor/distro/__pycache__/__main__.cpython-313.pyc,,
404
+ pip/_vendor/distro/__pycache__/distro.cpython-313.pyc,,
405
+ pip/_vendor/distro/distro.py,sha256=XqbefacAhDT4zr_trnbA15eY8vdK4GTghgmvUGrEM_4,49430
406
+ pip/_vendor/distro/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
407
+ pip/_vendor/idna/__init__.py,sha256=MPqNDLZbXqGaNdXxAFhiqFPKEQXju2jNQhCey6-5eJM,868
408
+ pip/_vendor/idna/__pycache__/__init__.cpython-313.pyc,,
409
+ pip/_vendor/idna/__pycache__/codec.cpython-313.pyc,,
410
+ pip/_vendor/idna/__pycache__/compat.cpython-313.pyc,,
411
+ pip/_vendor/idna/__pycache__/core.cpython-313.pyc,,
412
+ pip/_vendor/idna/__pycache__/idnadata.cpython-313.pyc,,
413
+ pip/_vendor/idna/__pycache__/intranges.cpython-313.pyc,,
414
+ pip/_vendor/idna/__pycache__/package_data.cpython-313.pyc,,
415
+ pip/_vendor/idna/__pycache__/uts46data.cpython-313.pyc,,
416
+ pip/_vendor/idna/codec.py,sha256=PEew3ItwzjW4hymbasnty2N2OXvNcgHB-JjrBuxHPYY,3422
417
+ pip/_vendor/idna/compat.py,sha256=RzLy6QQCdl9784aFhb2EX9EKGCJjg0P3PilGdeXXcx8,316
418
+ pip/_vendor/idna/core.py,sha256=YJYyAMnwiQEPjVC4-Fqu_p4CJ6yKKuDGmppBNQNQpFs,13239
419
+ pip/_vendor/idna/idnadata.py,sha256=W30GcIGvtOWYwAjZj4ZjuouUutC6ffgNuyjJy7fZ-lo,78306
420
+ pip/_vendor/idna/intranges.py,sha256=amUtkdhYcQG8Zr-CoMM_kVRacxkivC1WgxN1b63KKdU,1898
421
+ pip/_vendor/idna/package_data.py,sha256=q59S3OXsc5VI8j6vSD0sGBMyk6zZ4vWFREE88yCJYKs,21
422
+ pip/_vendor/idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
423
+ pip/_vendor/idna/uts46data.py,sha256=rt90K9J40gUSwppDPCrhjgi5AA6pWM65dEGRSf6rIhM,239289
424
+ pip/_vendor/msgpack/__init__.py,sha256=reRaiOtEzSjPnr7TpxjgIvbfln5pV66FhricAs2eC-g,1109
425
+ pip/_vendor/msgpack/__pycache__/__init__.cpython-313.pyc,,
426
+ pip/_vendor/msgpack/__pycache__/exceptions.cpython-313.pyc,,
427
+ pip/_vendor/msgpack/__pycache__/ext.cpython-313.pyc,,
428
+ pip/_vendor/msgpack/__pycache__/fallback.cpython-313.pyc,,
429
+ pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081
430
+ pip/_vendor/msgpack/ext.py,sha256=kteJv03n9tYzd5oo3xYopVTo4vRaAxonBQQJhXohZZo,5726
431
+ pip/_vendor/msgpack/fallback.py,sha256=0g1Pzp0vtmBEmJ5w9F3s_-JMVURP8RS4G1cc5TRaAsI,32390
432
+ pip/_vendor/packaging/__init__.py,sha256=_0cDiPVf2S-bNfVmZguxxzmrIYWlyASxpqph4qsJWUc,494
433
+ pip/_vendor/packaging/__pycache__/__init__.cpython-313.pyc,,
434
+ pip/_vendor/packaging/__pycache__/_elffile.cpython-313.pyc,,
435
+ pip/_vendor/packaging/__pycache__/_manylinux.cpython-313.pyc,,
436
+ pip/_vendor/packaging/__pycache__/_musllinux.cpython-313.pyc,,
437
+ pip/_vendor/packaging/__pycache__/_parser.cpython-313.pyc,,
438
+ pip/_vendor/packaging/__pycache__/_structures.cpython-313.pyc,,
439
+ pip/_vendor/packaging/__pycache__/_tokenizer.cpython-313.pyc,,
440
+ pip/_vendor/packaging/__pycache__/markers.cpython-313.pyc,,
441
+ pip/_vendor/packaging/__pycache__/metadata.cpython-313.pyc,,
442
+ pip/_vendor/packaging/__pycache__/requirements.cpython-313.pyc,,
443
+ pip/_vendor/packaging/__pycache__/specifiers.cpython-313.pyc,,
444
+ pip/_vendor/packaging/__pycache__/tags.cpython-313.pyc,,
445
+ pip/_vendor/packaging/__pycache__/utils.cpython-313.pyc,,
446
+ pip/_vendor/packaging/__pycache__/version.cpython-313.pyc,,
447
+ pip/_vendor/packaging/_elffile.py,sha256=UkrbDtW7aeq3qqoAfU16ojyHZ1xsTvGke_WqMTKAKd0,3286
448
+ pip/_vendor/packaging/_manylinux.py,sha256=t4y_-dTOcfr36gLY-ztiOpxxJFGO2ikC11HgfysGxiM,9596
449
+ pip/_vendor/packaging/_musllinux.py,sha256=p9ZqNYiOItGee8KcZFeHF_YcdhVwGHdK6r-8lgixvGQ,2694
450
+ pip/_vendor/packaging/_parser.py,sha256=gYfnj0pRHflVc4RHZit13KNTyN9iiVcU2RUCGi22BwM,10221
451
+ pip/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
452
+ pip/_vendor/packaging/_tokenizer.py,sha256=OYzt7qKxylOAJ-q0XyK1qAycyPRYLfMPdGQKRXkZWyI,5310
453
+ pip/_vendor/packaging/licenses/__init__.py,sha256=3bx-gryo4sRv5LsrwApouy65VIs3u6irSORJzALkrzU,5727
454
+ pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-313.pyc,,
455
+ pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-313.pyc,,
456
+ pip/_vendor/packaging/licenses/_spdx.py,sha256=oAm1ztPFwlsmCKe7lAAsv_OIOfS1cWDu9bNBkeu-2ns,48398
457
+ pip/_vendor/packaging/markers.py,sha256=P0we27jm1xUzgGMJxBjtUFCIWeBxTsMeJTOJ6chZmAY,12049
458
+ pip/_vendor/packaging/metadata.py,sha256=8IZErqQQnNm53dZZuYq4FGU4_dpyinMeH1QFBIWIkfE,34739
459
+ pip/_vendor/packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
460
+ pip/_vendor/packaging/requirements.py,sha256=gYyRSAdbrIyKDY66ugIDUQjRMvxkH2ALioTmX3tnL6o,2947
461
+ pip/_vendor/packaging/specifiers.py,sha256=yc9D_MycJEmwUpZvcs1OZL9HfiNFmyw0RZaeHRNHkPw,40079
462
+ pip/_vendor/packaging/tags.py,sha256=41s97W9Zatrq2Ed7Rc3qeBDaHe8pKKvYq2mGjwahfXk,22745
463
+ pip/_vendor/packaging/utils.py,sha256=0F3Hh9OFuRgrhTgGZUl5K22Fv1YP2tZl1z_2gO6kJiA,5050
464
+ pip/_vendor/packaging/version.py,sha256=oiHqzTUv_p12hpjgsLDVcaF5hT7pDaSOViUNMD4GTW0,16688
465
+ pip/_vendor/pkg_resources/__init__.py,sha256=jrhDRbOubP74QuPXxd7U7Po42PH2l-LZ2XfcO7llpZ4,124463
466
+ pip/_vendor/pkg_resources/__pycache__/__init__.cpython-313.pyc,,
467
+ pip/_vendor/platformdirs/__init__.py,sha256=UfeSHWl8AeTtbOBOoHAxK4dODOWkZtfy-m_i7cWdJ8c,22344
468
+ pip/_vendor/platformdirs/__main__.py,sha256=jBJ8zb7Mpx5ebcqF83xrpO94MaeCpNGHVf9cvDN2JLg,1505
469
+ pip/_vendor/platformdirs/__pycache__/__init__.cpython-313.pyc,,
470
+ pip/_vendor/platformdirs/__pycache__/__main__.cpython-313.pyc,,
471
+ pip/_vendor/platformdirs/__pycache__/android.cpython-313.pyc,,
472
+ pip/_vendor/platformdirs/__pycache__/api.cpython-313.pyc,,
473
+ pip/_vendor/platformdirs/__pycache__/macos.cpython-313.pyc,,
474
+ pip/_vendor/platformdirs/__pycache__/unix.cpython-313.pyc,,
475
+ pip/_vendor/platformdirs/__pycache__/version.cpython-313.pyc,,
476
+ pip/_vendor/platformdirs/__pycache__/windows.cpython-313.pyc,,
477
+ pip/_vendor/platformdirs/android.py,sha256=r0DshVBf-RO1jXJGX8C4Til7F1XWt-bkdWMgmvEiaYg,9013
478
+ pip/_vendor/platformdirs/api.py,sha256=U9EzI3EYxcXWUCtIGRllqrcN99i2LSY1mq2-GtsUwEQ,9277
479
+ pip/_vendor/platformdirs/macos.py,sha256=UlbyFZ8Rzu3xndCqQEHrfsYTeHwYdFap1Ioz-yxveT4,6154
480
+ pip/_vendor/platformdirs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
481
+ pip/_vendor/platformdirs/unix.py,sha256=WZmkUA--L3JNRGmz32s35YfoD3ica6xKIPdCV_HhLcs,10458
482
+ pip/_vendor/platformdirs/version.py,sha256=0fnw4ljascx7O5PfIeZ2yj6w3pAkqwp099vDcivxuvY,511
483
+ pip/_vendor/platformdirs/windows.py,sha256=IFpiohUBwxPtCzlyKwNtxyW4Jk8haa6W8o59mfrDXVo,10125
484
+ pip/_vendor/pygments/__init__.py,sha256=qMm7-KYqNpMrmjymZaqfH-_9iJtjnexAKodkb9G5D5g,2983
485
+ pip/_vendor/pygments/__main__.py,sha256=WrndpSe6i1ckX_SQ1KaxD9CTKGzD0EuCOFxcbwFpoLU,353
486
+ pip/_vendor/pygments/__pycache__/__init__.cpython-313.pyc,,
487
+ pip/_vendor/pygments/__pycache__/__main__.cpython-313.pyc,,
488
+ pip/_vendor/pygments/__pycache__/console.cpython-313.pyc,,
489
+ pip/_vendor/pygments/__pycache__/filter.cpython-313.pyc,,
490
+ pip/_vendor/pygments/__pycache__/formatter.cpython-313.pyc,,
491
+ pip/_vendor/pygments/__pycache__/lexer.cpython-313.pyc,,
492
+ pip/_vendor/pygments/__pycache__/modeline.cpython-313.pyc,,
493
+ pip/_vendor/pygments/__pycache__/plugin.cpython-313.pyc,,
494
+ pip/_vendor/pygments/__pycache__/regexopt.cpython-313.pyc,,
495
+ pip/_vendor/pygments/__pycache__/scanner.cpython-313.pyc,,
496
+ pip/_vendor/pygments/__pycache__/sphinxext.cpython-313.pyc,,
497
+ pip/_vendor/pygments/__pycache__/style.cpython-313.pyc,,
498
+ pip/_vendor/pygments/__pycache__/token.cpython-313.pyc,,
499
+ pip/_vendor/pygments/__pycache__/unistring.cpython-313.pyc,,
500
+ pip/_vendor/pygments/__pycache__/util.cpython-313.pyc,,
501
+ pip/_vendor/pygments/console.py,sha256=AagDWqwea2yBWf10KC9ptBgMpMjxKp8yABAmh-NQOVk,1718
502
+ pip/_vendor/pygments/filter.py,sha256=YLtpTnZiu07nY3oK9nfR6E9Y1FBHhP5PX8gvkJWcfag,1910
503
+ pip/_vendor/pygments/filters/__init__.py,sha256=4U4jtA0X3iP83uQnB9-TI-HDSw8E8y8zMYHa0UjbbaI,40392
504
+ pip/_vendor/pygments/filters/__pycache__/__init__.cpython-313.pyc,,
505
+ pip/_vendor/pygments/formatter.py,sha256=KZQMmyo_xkOIkQG8g66LYEkBh1bx7a0HyGCBcvhI9Ew,4390
506
+ pip/_vendor/pygments/formatters/__init__.py,sha256=KTwBmnXlaopJhQDOemVHYHskiDghuq-08YtP6xPNJPg,5385
507
+ pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-313.pyc,,
508
+ pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-313.pyc,,
509
+ pip/_vendor/pygments/formatters/_mapping.py,sha256=1Cw37FuQlNacnxRKmtlPX4nyLoX9_ttko5ZwscNUZZ4,4176
510
+ pip/_vendor/pygments/lexer.py,sha256=_kBrOJ_NT5Tl0IVM0rA9c8eysP6_yrlGzEQI0eVYB-A,35349
511
+ pip/_vendor/pygments/lexers/__init__.py,sha256=wbIME35GH7bI1B9rNPJFqWT-ij_RApZDYPUlZycaLzA,12115
512
+ pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-313.pyc,,
513
+ pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-313.pyc,,
514
+ pip/_vendor/pygments/lexers/__pycache__/python.cpython-313.pyc,,
515
+ pip/_vendor/pygments/lexers/_mapping.py,sha256=l4tCXM8e9aPC2BD6sjIr0deT-J-z5tHgCwL-p1fS0PE,77602
516
+ pip/_vendor/pygments/lexers/python.py,sha256=vxjn1cOHclIKJKxoyiBsQTY65GHbkZtZRuKQ2AVCKaw,53853
517
+ pip/_vendor/pygments/modeline.py,sha256=K5eSkR8GS1r5OkXXTHOcV0aM_6xpk9eWNEIAW-OOJ2g,1005
518
+ pip/_vendor/pygments/plugin.py,sha256=tPx0rJCTIZ9ioRgLNYG4pifCbAwTRUZddvLw-NfAk2w,1891
519
+ pip/_vendor/pygments/regexopt.py,sha256=wXaP9Gjp_hKAdnICqoDkRxAOQJSc4v3X6mcxx3z-TNs,3072
520
+ pip/_vendor/pygments/scanner.py,sha256=nNcETRR1tRuiTaHmHSTTECVYFPcLf6mDZu1e4u91A9E,3092
521
+ pip/_vendor/pygments/sphinxext.py,sha256=5x7Zh9YlU6ISJ31dMwduiaanb5dWZnKg3MyEQsseNnQ,7981
522
+ pip/_vendor/pygments/style.py,sha256=PlOZqlsnTVd58RGy50vkA2cXQ_lP5bF5EGMEBTno6DA,6420
523
+ pip/_vendor/pygments/styles/__init__.py,sha256=x9ebctfyvCAFpMTlMJ5YxwcNYBzjgq6zJaKkNm78r4M,2042
524
+ pip/_vendor/pygments/styles/__pycache__/__init__.cpython-313.pyc,,
525
+ pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-313.pyc,,
526
+ pip/_vendor/pygments/styles/_mapping.py,sha256=6lovFUE29tz6EsV3XYY4hgozJ7q1JL7cfO3UOlgnS8w,3312
527
+ pip/_vendor/pygments/token.py,sha256=WbdWGhYm_Vosb0DDxW9lHNPgITXfWTsQmHt6cy9RbcM,6226
528
+ pip/_vendor/pygments/unistring.py,sha256=al-_rBemRuGvinsrM6atNsHTmJ6DUbw24q2O2Ru1cBc,63208
529
+ pip/_vendor/pygments/util.py,sha256=oRtSpiAo5jM9ulntkvVbgXUdiAW57jnuYGB7t9fYuhc,10031
530
+ pip/_vendor/pyproject_hooks/__init__.py,sha256=cPB_a9LXz5xvsRbX1o2qyAdjLatZJdQ_Lc5McNX-X7Y,691
531
+ pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-313.pyc,,
532
+ pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-313.pyc,,
533
+ pip/_vendor/pyproject_hooks/_impl.py,sha256=jY-raxnmyRyB57ruAitrJRUzEexuAhGTpgMygqx67Z4,14936
534
+ pip/_vendor/pyproject_hooks/_in_process/__init__.py,sha256=MJNPpfIxcO-FghxpBbxkG1rFiQf6HOUbV4U5mq0HFns,557
535
+ pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-313.pyc,,
536
+ pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-313.pyc,,
537
+ pip/_vendor/pyproject_hooks/_in_process/_in_process.py,sha256=qcXMhmx__MIJq10gGHW3mA4Tl8dy8YzHMccwnNoKlw0,12216
538
+ pip/_vendor/pyproject_hooks/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
539
+ pip/_vendor/requests/__init__.py,sha256=HlB_HzhrzGtfD_aaYUwUh1zWXLZ75_YCLyit75d0Vz8,5057
540
+ pip/_vendor/requests/__pycache__/__init__.cpython-313.pyc,,
541
+ pip/_vendor/requests/__pycache__/__version__.cpython-313.pyc,,
542
+ pip/_vendor/requests/__pycache__/_internal_utils.cpython-313.pyc,,
543
+ pip/_vendor/requests/__pycache__/adapters.cpython-313.pyc,,
544
+ pip/_vendor/requests/__pycache__/api.cpython-313.pyc,,
545
+ pip/_vendor/requests/__pycache__/auth.cpython-313.pyc,,
546
+ pip/_vendor/requests/__pycache__/certs.cpython-313.pyc,,
547
+ pip/_vendor/requests/__pycache__/compat.cpython-313.pyc,,
548
+ pip/_vendor/requests/__pycache__/cookies.cpython-313.pyc,,
549
+ pip/_vendor/requests/__pycache__/exceptions.cpython-313.pyc,,
550
+ pip/_vendor/requests/__pycache__/help.cpython-313.pyc,,
551
+ pip/_vendor/requests/__pycache__/hooks.cpython-313.pyc,,
552
+ pip/_vendor/requests/__pycache__/models.cpython-313.pyc,,
553
+ pip/_vendor/requests/__pycache__/packages.cpython-313.pyc,,
554
+ pip/_vendor/requests/__pycache__/sessions.cpython-313.pyc,,
555
+ pip/_vendor/requests/__pycache__/status_codes.cpython-313.pyc,,
556
+ pip/_vendor/requests/__pycache__/structures.cpython-313.pyc,,
557
+ pip/_vendor/requests/__pycache__/utils.cpython-313.pyc,,
558
+ pip/_vendor/requests/__version__.py,sha256=FVfglgZmNQnmYPXpOohDU58F5EUb_-VnSTaAesS187g,435
559
+ pip/_vendor/requests/_internal_utils.py,sha256=nMQymr4hs32TqVo5AbCrmcJEhvPUh7xXlluyqwslLiQ,1495
560
+ pip/_vendor/requests/adapters.py,sha256=J7VeVxKBvawbtlX2DERVo05J9BXTcWYLMHNd1Baa-bk,27607
561
+ pip/_vendor/requests/api.py,sha256=_Zb9Oa7tzVIizTKwFrPjDEY9ejtm_OnSRERnADxGsQs,6449
562
+ pip/_vendor/requests/auth.py,sha256=kF75tqnLctZ9Mf_hm9TZIj4cQWnN5uxRz8oWsx5wmR0,10186
563
+ pip/_vendor/requests/certs.py,sha256=kHDlkK_beuHXeMPc5jta2wgl8gdKeUWt5f2nTDVrvt8,441
564
+ pip/_vendor/requests/compat.py,sha256=Mo9f9xZpefod8Zm-n9_StJcVTmwSukXR2p3IQyyVXvU,1485
565
+ pip/_vendor/requests/cookies.py,sha256=bNi-iqEj4NPZ00-ob-rHvzkvObzN3lEpgw3g6paS3Xw,18590
566
+ pip/_vendor/requests/exceptions.py,sha256=D1wqzYWne1mS2rU43tP9CeN1G7QAy7eqL9o1god6Ejw,4272
567
+ pip/_vendor/requests/help.py,sha256=hRKaf9u0G7fdwrqMHtF3oG16RKktRf6KiwtSq2Fo1_0,3813
568
+ pip/_vendor/requests/hooks.py,sha256=CiuysiHA39V5UfcCBXFIx83IrDpuwfN9RcTUgv28ftQ,733
569
+ pip/_vendor/requests/models.py,sha256=x4K4CmH-lC0l2Kb-iPfMN4dRXxHEcbOaEWBL_i09AwI,35483
570
+ pip/_vendor/requests/packages.py,sha256=_ZQDCJTJ8SP3kVWunSqBsRZNPzj2c1WFVqbdr08pz3U,1057
571
+ pip/_vendor/requests/sessions.py,sha256=ykTI8UWGSltOfH07HKollH7kTBGw4WhiBVaQGmckTw4,30495
572
+ pip/_vendor/requests/status_codes.py,sha256=iJUAeA25baTdw-6PfD0eF4qhpINDJRJI-yaMqxs4LEI,4322
573
+ pip/_vendor/requests/structures.py,sha256=-IbmhVz06S-5aPSZuUthZ6-6D9XOjRuTXHOabY041XM,2912
574
+ pip/_vendor/requests/utils.py,sha256=L79vnFbzJ3SFLKtJwpoWe41Tozi3RlZv94pY1TFIyow,33631
575
+ pip/_vendor/resolvelib/__init__.py,sha256=4LcBWHMH317EKEkpV5XLVnqiU1lrmCiygjsADuCgz4s,541
576
+ pip/_vendor/resolvelib/__pycache__/__init__.cpython-313.pyc,,
577
+ pip/_vendor/resolvelib/__pycache__/providers.cpython-313.pyc,,
578
+ pip/_vendor/resolvelib/__pycache__/reporters.cpython-313.pyc,,
579
+ pip/_vendor/resolvelib/__pycache__/structs.cpython-313.pyc,,
580
+ pip/_vendor/resolvelib/providers.py,sha256=pIWJbIdJJ9GFtNbtwTH0Ia43Vj6hYCEJj2DOLue15FM,8914
581
+ pip/_vendor/resolvelib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
582
+ pip/_vendor/resolvelib/reporters.py,sha256=8BNa7G9cKW4Lie4BhDhd7Z57J_Vlb1CYPGSgVN2erMA,2038
583
+ pip/_vendor/resolvelib/resolvers/__init__.py,sha256=GMYuhrbSsYTIjOij0tuJKLvlk6UXmp3nXQetn2sOvpQ,640
584
+ pip/_vendor/resolvelib/resolvers/__pycache__/__init__.cpython-313.pyc,,
585
+ pip/_vendor/resolvelib/resolvers/__pycache__/abstract.cpython-313.pyc,,
586
+ pip/_vendor/resolvelib/resolvers/__pycache__/criterion.cpython-313.pyc,,
587
+ pip/_vendor/resolvelib/resolvers/__pycache__/exceptions.cpython-313.pyc,,
588
+ pip/_vendor/resolvelib/resolvers/__pycache__/resolution.cpython-313.pyc,,
589
+ pip/_vendor/resolvelib/resolvers/abstract.py,sha256=jZOBVigE4PUub9i3F-bTvBwaIXX8S9EU3CGASBvFqEU,1558
590
+ pip/_vendor/resolvelib/resolvers/criterion.py,sha256=lcmZGv5sKHOnFD_RzZwvlGSj19MeA-5rCMpdf2Sgw7Y,1768
591
+ pip/_vendor/resolvelib/resolvers/exceptions.py,sha256=ln_jaQtgLlRUSFY627yiHG2gD7AgaXzRKaElFVh7fDQ,1768
592
+ pip/_vendor/resolvelib/resolvers/resolution.py,sha256=yQegMuOmlzAElLLpgD-k6NbPDMCQf29rWhiFC26OdkM,20671
593
+ pip/_vendor/resolvelib/structs.py,sha256=pu-EJiR2IBITr2SQeNPRa0rXhjlStfmO_GEgAhr3004,6420
594
+ pip/_vendor/rich/__init__.py,sha256=dRxjIL-SbFVY0q3IjSMrfgBTHrm1LZDgLOygVBwiYZc,6090
595
+ pip/_vendor/rich/__main__.py,sha256=eO7Cq8JnrgG8zVoeImiAs92q3hXNMIfp0w5lMsO7Q2Y,8477
596
+ pip/_vendor/rich/__pycache__/__init__.cpython-313.pyc,,
597
+ pip/_vendor/rich/__pycache__/__main__.cpython-313.pyc,,
598
+ pip/_vendor/rich/__pycache__/_cell_widths.cpython-313.pyc,,
599
+ pip/_vendor/rich/__pycache__/_emoji_codes.cpython-313.pyc,,
600
+ pip/_vendor/rich/__pycache__/_emoji_replace.cpython-313.pyc,,
601
+ pip/_vendor/rich/__pycache__/_export_format.cpython-313.pyc,,
602
+ pip/_vendor/rich/__pycache__/_extension.cpython-313.pyc,,
603
+ pip/_vendor/rich/__pycache__/_fileno.cpython-313.pyc,,
604
+ pip/_vendor/rich/__pycache__/_inspect.cpython-313.pyc,,
605
+ pip/_vendor/rich/__pycache__/_log_render.cpython-313.pyc,,
606
+ pip/_vendor/rich/__pycache__/_loop.cpython-313.pyc,,
607
+ pip/_vendor/rich/__pycache__/_null_file.cpython-313.pyc,,
608
+ pip/_vendor/rich/__pycache__/_palettes.cpython-313.pyc,,
609
+ pip/_vendor/rich/__pycache__/_pick.cpython-313.pyc,,
610
+ pip/_vendor/rich/__pycache__/_ratio.cpython-313.pyc,,
611
+ pip/_vendor/rich/__pycache__/_spinners.cpython-313.pyc,,
612
+ pip/_vendor/rich/__pycache__/_stack.cpython-313.pyc,,
613
+ pip/_vendor/rich/__pycache__/_timer.cpython-313.pyc,,
614
+ pip/_vendor/rich/__pycache__/_win32_console.cpython-313.pyc,,
615
+ pip/_vendor/rich/__pycache__/_windows.cpython-313.pyc,,
616
+ pip/_vendor/rich/__pycache__/_windows_renderer.cpython-313.pyc,,
617
+ pip/_vendor/rich/__pycache__/_wrap.cpython-313.pyc,,
618
+ pip/_vendor/rich/__pycache__/abc.cpython-313.pyc,,
619
+ pip/_vendor/rich/__pycache__/align.cpython-313.pyc,,
620
+ pip/_vendor/rich/__pycache__/ansi.cpython-313.pyc,,
621
+ pip/_vendor/rich/__pycache__/bar.cpython-313.pyc,,
622
+ pip/_vendor/rich/__pycache__/box.cpython-313.pyc,,
623
+ pip/_vendor/rich/__pycache__/cells.cpython-313.pyc,,
624
+ pip/_vendor/rich/__pycache__/color.cpython-313.pyc,,
625
+ pip/_vendor/rich/__pycache__/color_triplet.cpython-313.pyc,,
626
+ pip/_vendor/rich/__pycache__/columns.cpython-313.pyc,,
627
+ pip/_vendor/rich/__pycache__/console.cpython-313.pyc,,
628
+ pip/_vendor/rich/__pycache__/constrain.cpython-313.pyc,,
629
+ pip/_vendor/rich/__pycache__/containers.cpython-313.pyc,,
630
+ pip/_vendor/rich/__pycache__/control.cpython-313.pyc,,
631
+ pip/_vendor/rich/__pycache__/default_styles.cpython-313.pyc,,
632
+ pip/_vendor/rich/__pycache__/diagnose.cpython-313.pyc,,
633
+ pip/_vendor/rich/__pycache__/emoji.cpython-313.pyc,,
634
+ pip/_vendor/rich/__pycache__/errors.cpython-313.pyc,,
635
+ pip/_vendor/rich/__pycache__/file_proxy.cpython-313.pyc,,
636
+ pip/_vendor/rich/__pycache__/filesize.cpython-313.pyc,,
637
+ pip/_vendor/rich/__pycache__/highlighter.cpython-313.pyc,,
638
+ pip/_vendor/rich/__pycache__/json.cpython-313.pyc,,
639
+ pip/_vendor/rich/__pycache__/jupyter.cpython-313.pyc,,
640
+ pip/_vendor/rich/__pycache__/layout.cpython-313.pyc,,
641
+ pip/_vendor/rich/__pycache__/live.cpython-313.pyc,,
642
+ pip/_vendor/rich/__pycache__/live_render.cpython-313.pyc,,
643
+ pip/_vendor/rich/__pycache__/logging.cpython-313.pyc,,
644
+ pip/_vendor/rich/__pycache__/markup.cpython-313.pyc,,
645
+ pip/_vendor/rich/__pycache__/measure.cpython-313.pyc,,
646
+ pip/_vendor/rich/__pycache__/padding.cpython-313.pyc,,
647
+ pip/_vendor/rich/__pycache__/pager.cpython-313.pyc,,
648
+ pip/_vendor/rich/__pycache__/palette.cpython-313.pyc,,
649
+ pip/_vendor/rich/__pycache__/panel.cpython-313.pyc,,
650
+ pip/_vendor/rich/__pycache__/pretty.cpython-313.pyc,,
651
+ pip/_vendor/rich/__pycache__/progress.cpython-313.pyc,,
652
+ pip/_vendor/rich/__pycache__/progress_bar.cpython-313.pyc,,
653
+ pip/_vendor/rich/__pycache__/prompt.cpython-313.pyc,,
654
+ pip/_vendor/rich/__pycache__/protocol.cpython-313.pyc,,
655
+ pip/_vendor/rich/__pycache__/region.cpython-313.pyc,,
656
+ pip/_vendor/rich/__pycache__/repr.cpython-313.pyc,,
657
+ pip/_vendor/rich/__pycache__/rule.cpython-313.pyc,,
658
+ pip/_vendor/rich/__pycache__/scope.cpython-313.pyc,,
659
+ pip/_vendor/rich/__pycache__/screen.cpython-313.pyc,,
660
+ pip/_vendor/rich/__pycache__/segment.cpython-313.pyc,,
661
+ pip/_vendor/rich/__pycache__/spinner.cpython-313.pyc,,
662
+ pip/_vendor/rich/__pycache__/status.cpython-313.pyc,,
663
+ pip/_vendor/rich/__pycache__/style.cpython-313.pyc,,
664
+ pip/_vendor/rich/__pycache__/styled.cpython-313.pyc,,
665
+ pip/_vendor/rich/__pycache__/syntax.cpython-313.pyc,,
666
+ pip/_vendor/rich/__pycache__/table.cpython-313.pyc,,
667
+ pip/_vendor/rich/__pycache__/terminal_theme.cpython-313.pyc,,
668
+ pip/_vendor/rich/__pycache__/text.cpython-313.pyc,,
669
+ pip/_vendor/rich/__pycache__/theme.cpython-313.pyc,,
670
+ pip/_vendor/rich/__pycache__/themes.cpython-313.pyc,,
671
+ pip/_vendor/rich/__pycache__/traceback.cpython-313.pyc,,
672
+ pip/_vendor/rich/__pycache__/tree.cpython-313.pyc,,
673
+ pip/_vendor/rich/_cell_widths.py,sha256=fbmeyetEdHjzE_Vx2l1uK7tnPOhMs2X1lJfO3vsKDpA,10209
674
+ pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235
675
+ pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064
676
+ pip/_vendor/rich/_export_format.py,sha256=RI08pSrm5tBSzPMvnbTqbD9WIalaOoN5d4M1RTmLq1Y,2128
677
+ pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265
678
+ pip/_vendor/rich/_fileno.py,sha256=HWZxP5C2ajMbHryvAQZseflVfQoGzsKOHzKGsLD8ynQ,799
679
+ pip/_vendor/rich/_inspect.py,sha256=QM05lEFnFoTaFqpnbx-zBEI6k8oIKrD3cvjEOQNhKig,9655
680
+ pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225
681
+ pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236
682
+ pip/_vendor/rich/_null_file.py,sha256=ADGKp1yt-k70FMKV6tnqCqecB-rSJzp-WQsD7LPL-kg,1394
683
+ pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063
684
+ pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423
685
+ pip/_vendor/rich/_ratio.py,sha256=Zt58apszI6hAAcXPpgdWKpu3c31UBWebOeR4mbyptvU,5471
686
+ pip/_vendor/rich/_spinners.py,sha256=U2r1_g_1zSjsjiUdAESc2iAMc3i4ri_S8PYP6kQ5z1I,19919
687
+ pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351
688
+ pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417
689
+ pip/_vendor/rich/_win32_console.py,sha256=BSaDRIMwBLITn_m0mTRLPqME5q-quGdSMuYMpYeYJwc,22755
690
+ pip/_vendor/rich/_windows.py,sha256=aBwaD_S56SbgopIvayVmpk0Y28uwY2C5Bab1wl3Bp-I,1925
691
+ pip/_vendor/rich/_windows_renderer.py,sha256=t74ZL3xuDCP3nmTp9pH1L5LiI2cakJuQRQleHCJerlk,2783
692
+ pip/_vendor/rich/_wrap.py,sha256=FlSsom5EX0LVkA3KWy34yHnCfLtqX-ZIepXKh-70rpc,3404
693
+ pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890
694
+ pip/_vendor/rich/align.py,sha256=Rh-3adnDaN1Ao07EjR2PhgE62PGLPgO8SMwJBku1urQ,10469
695
+ pip/_vendor/rich/ansi.py,sha256=Avs1LHbSdcyOvDOdpELZUoULcBiYewY76eNBp6uFBhs,6921
696
+ pip/_vendor/rich/bar.py,sha256=ldbVHOzKJOnflVNuv1xS7g6dLX2E3wMnXkdPbpzJTcs,3263
697
+ pip/_vendor/rich/box.py,sha256=nr5fYIUghB_iUCEq6y0Z3LlCT8gFPDrzN9u2kn7tJl4,10831
698
+ pip/_vendor/rich/cells.py,sha256=KrQkj5-LghCCpJLSNQIyAZjndc4bnEqOEmi5YuZ9UCY,5130
699
+ pip/_vendor/rich/color.py,sha256=3HSULVDj7qQkXUdFWv78JOiSZzfy5y1nkcYhna296V0,18211
700
+ pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054
701
+ pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131
702
+ pip/_vendor/rich/console.py,sha256=_RJizBQIn9qxr4Ln7Q_SC5N9ekPWPAxH0KGVxsgg69Y,100565
703
+ pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288
704
+ pip/_vendor/rich/containers.py,sha256=c_56TxcedGYqDepHBMTuZdUIijitAQgnox-Qde0Z1qo,5502
705
+ pip/_vendor/rich/control.py,sha256=DSkHTUQLorfSERAKE_oTAEUFefZnZp4bQb4q8rHbKws,6630
706
+ pip/_vendor/rich/default_styles.py,sha256=khQFqqaoDs3bprMqWpHw8nO5UpG2DN6QtuTd6LzZwYc,8257
707
+ pip/_vendor/rich/diagnose.py,sha256=WNPjU2pEdrPICJ24KOaTD_hzP839qArpmF1JIM5x_EQ,998
708
+ pip/_vendor/rich/emoji.py,sha256=omTF9asaAnsM4yLY94eR_9dgRRSm1lHUszX20D1yYCQ,2501
709
+ pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642
710
+ pip/_vendor/rich/file_proxy.py,sha256=Tl9THMDZ-Pk5Wm8sI1gGg_U5DhusmxD-FZ0fUbcU0W0,1683
711
+ pip/_vendor/rich/filesize.py,sha256=_iz9lIpRgvW7MNSeCZnLg-HwzbP4GETg543WqD8SFs0,2484
712
+ pip/_vendor/rich/highlighter.py,sha256=G_sn-8DKjM1sEjLG_oc4ovkWmiUpWvj8bXi0yed2LnY,9586
713
+ pip/_vendor/rich/json.py,sha256=vVEoKdawoJRjAFayPwXkMBPLy7RSTs-f44wSQDR2nJ0,5031
714
+ pip/_vendor/rich/jupyter.py,sha256=QyoKoE_8IdCbrtiSHp9TsTSNyTHY0FO5whE7jOTd9UE,3252
715
+ pip/_vendor/rich/layout.py,sha256=ajkSFAtEVv9EFTcFs-w4uZfft7nEXhNzL7ZVdgrT5rI,14004
716
+ pip/_vendor/rich/live.py,sha256=DhzAPEnjTxQuq9_0Y2xh2MUwQcP_aGPkenLfKETslwM,14270
717
+ pip/_vendor/rich/live_render.py,sha256=zJtB471jGziBtEwxc54x12wEQtH4BuQr1SA8v9kU82w,3666
718
+ pip/_vendor/rich/logging.py,sha256=ZgpKMMBY_BuMAI_BYzo-UtXak6t5oH9VK8m9Q2Lm0f4,12458
719
+ pip/_vendor/rich/markup.py,sha256=3euGKP5s41NCQwaSjTnJxus5iZMHjxpIM0W6fCxra38,8451
720
+ pip/_vendor/rich/measure.py,sha256=HmrIJX8sWRTHbgh8MxEay_83VkqNW_70s8aKP5ZcYI8,5305
721
+ pip/_vendor/rich/padding.py,sha256=KVEI3tOwo9sgK1YNSuH__M1_jUWmLZwRVV_KmOtVzyM,4908
722
+ pip/_vendor/rich/pager.py,sha256=SO_ETBFKbg3n_AgOzXm41Sv36YxXAyI3_R-KOY2_uSc,828
723
+ pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396
724
+ pip/_vendor/rich/panel.py,sha256=SUDaa3z4MU7vIjzvbi0SXuc6BslDzADwdY1AX4TbTdY,11225
725
+ pip/_vendor/rich/pretty.py,sha256=gy3S72u4FRg2ytoo7N1ZDWDIvB4unbzd5iUGdgm-8fc,36391
726
+ pip/_vendor/rich/progress.py,sha256=MtmCjTk5zYU_XtRHxRHTAEHG6hF9PeF7EMWbEPleIC0,60357
727
+ pip/_vendor/rich/progress_bar.py,sha256=mZTPpJUwcfcdgQCTTz3kyY-fc79ddLwtx6Ghhxfo064,8162
728
+ pip/_vendor/rich/prompt.py,sha256=l0RhQU-0UVTV9e08xW1BbIj0Jq2IXyChX4lC0lFNzt4,12447
729
+ pip/_vendor/rich/protocol.py,sha256=5hHHDDNHckdk8iWH5zEbi-zuIVSF5hbU2jIo47R7lTE,1391
730
+ pip/_vendor/rich/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
731
+ pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166
732
+ pip/_vendor/rich/repr.py,sha256=5MZJZmONgC6kud-QW-_m1okXwL2aR6u6y-pUcUCJz28,4431
733
+ pip/_vendor/rich/rule.py,sha256=0fNaS_aERa3UMRc3T5WMpN_sumtDxfaor2y3of1ftBk,4602
734
+ pip/_vendor/rich/scope.py,sha256=TMUU8qo17thyqQCPqjDLYpg_UU1k5qVd-WwiJvnJVas,2843
735
+ pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591
736
+ pip/_vendor/rich/segment.py,sha256=otnKeKGEV-WRlQVosfJVeFDcDxAKHpvJ_hLzSu5lumM,24743
737
+ pip/_vendor/rich/spinner.py,sha256=PT5qgXPG3ZpqRj7n3EZQ6NW56mx3ldZqZCU7gEMyZk4,4364
738
+ pip/_vendor/rich/status.py,sha256=kkPph3YeAZBo-X-4wPp8gTqZyU466NLwZBA4PZTTewo,4424
739
+ pip/_vendor/rich/style.py,sha256=xpj4uMBZMtuNuNomfUiamigl3p1sDvTCZwrG1tcTVeg,27059
740
+ pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258
741
+ pip/_vendor/rich/syntax.py,sha256=qqAnEUZ4K57Po81_5RBxnsuU4KRzSdvDPAhKw8ma_3E,35763
742
+ pip/_vendor/rich/table.py,sha256=ZmT7V7MMCOYKw7TGY9SZLyYDf6JdM-WVf07FdVuVhTI,40049
743
+ pip/_vendor/rich/terminal_theme.py,sha256=1j5-ufJfnvlAo5Qsi_ACZiXDmwMXzqgmFByObT9-yJY,3370
744
+ pip/_vendor/rich/text.py,sha256=AO7JPCz6-gaN1thVLXMBntEmDPVYFgFNG1oM61_sanU,47552
745
+ pip/_vendor/rich/theme.py,sha256=oNyhXhGagtDlbDye3tVu3esWOWk0vNkuxFw-_unlaK0,3771
746
+ pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102
747
+ pip/_vendor/rich/traceback.py,sha256=ZA8Q67DyP5a_stpIh6GPf9IiXj_s3dAhDIr6Zbfkahk,35170
748
+ pip/_vendor/rich/tree.py,sha256=yWnQ6rAvRGJ3qZGqBrxS2SW2TKBTNrP0SdY8QxOFPuw,9451
749
+ pip/_vendor/tomli/__init__.py,sha256=PhNw_eyLgdn7McJ6nrAN8yIm3dXC75vr1sVGVVwDSpA,314
750
+ pip/_vendor/tomli/__pycache__/__init__.cpython-313.pyc,,
751
+ pip/_vendor/tomli/__pycache__/_parser.cpython-313.pyc,,
752
+ pip/_vendor/tomli/__pycache__/_re.cpython-313.pyc,,
753
+ pip/_vendor/tomli/__pycache__/_types.cpython-313.pyc,,
754
+ pip/_vendor/tomli/_parser.py,sha256=9w8LG0jB7fwmZZWB0vVXbeejDHcl4ANIJxB2scEnDlA,25591
755
+ pip/_vendor/tomli/_re.py,sha256=sh4sBDRgO94KJZwNIrgdcyV_qQast50YvzOAUGpRDKA,3171
756
+ pip/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254
757
+ pip/_vendor/tomli/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26
758
+ pip/_vendor/tomli_w/__init__.py,sha256=0F8yDtXx3Uunhm874KrAcP76srsM98y7WyHQwCulZbo,169
759
+ pip/_vendor/tomli_w/__pycache__/__init__.cpython-313.pyc,,
760
+ pip/_vendor/tomli_w/__pycache__/_writer.cpython-313.pyc,,
761
+ pip/_vendor/tomli_w/_writer.py,sha256=dsifFS2xYf1i76mmRyfz9y125xC7Z_HQ845ZKhJsYXs,6961
762
+ pip/_vendor/tomli_w/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26
763
+ pip/_vendor/truststore/__init__.py,sha256=2wRSVijjRzPLVXUzWqvdZLNsEOhDfopKLd2EKAYLwKU,1320
764
+ pip/_vendor/truststore/__pycache__/__init__.cpython-313.pyc,,
765
+ pip/_vendor/truststore/__pycache__/_api.cpython-313.pyc,,
766
+ pip/_vendor/truststore/__pycache__/_macos.cpython-313.pyc,,
767
+ pip/_vendor/truststore/__pycache__/_openssl.cpython-313.pyc,,
768
+ pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-313.pyc,,
769
+ pip/_vendor/truststore/__pycache__/_windows.cpython-313.pyc,,
770
+ pip/_vendor/truststore/_api.py,sha256=40I0ojO2DnITiHvOnUYvJ1bfQMBKHOkci14noNxEnCs,11246
771
+ pip/_vendor/truststore/_macos.py,sha256=nZlLkOmszUE0g6ryRwBVGY5COzPyudcsiJtDWarM5LQ,20503
772
+ pip/_vendor/truststore/_openssl.py,sha256=LLUZ7ZGaio-i5dpKKjKCSeSufmn6T8pi9lDcFnvSyq0,2324
773
+ pip/_vendor/truststore/_ssl_constants.py,sha256=NUD4fVKdSD02ri7-db0tnO0VqLP9aHuzmStcW7tAl08,1130
774
+ pip/_vendor/truststore/_windows.py,sha256=rAHyKYD8M7t-bXfG8VgOVa3TpfhVhbt4rZQlO45YuP8,17993
775
+ pip/_vendor/truststore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
776
+ pip/_vendor/typing_extensions.py,sha256=ipKHUPtZCqL6c-HfvGl-9t0opsXcSL72y4GYjyJXs_g,172702
777
+ pip/_vendor/urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333
778
+ pip/_vendor/urllib3/__pycache__/__init__.cpython-313.pyc,,
779
+ pip/_vendor/urllib3/__pycache__/_collections.cpython-313.pyc,,
780
+ pip/_vendor/urllib3/__pycache__/_version.cpython-313.pyc,,
781
+ pip/_vendor/urllib3/__pycache__/connection.cpython-313.pyc,,
782
+ pip/_vendor/urllib3/__pycache__/connectionpool.cpython-313.pyc,,
783
+ pip/_vendor/urllib3/__pycache__/exceptions.cpython-313.pyc,,
784
+ pip/_vendor/urllib3/__pycache__/fields.cpython-313.pyc,,
785
+ pip/_vendor/urllib3/__pycache__/filepost.cpython-313.pyc,,
786
+ pip/_vendor/urllib3/__pycache__/poolmanager.cpython-313.pyc,,
787
+ pip/_vendor/urllib3/__pycache__/request.cpython-313.pyc,,
788
+ pip/_vendor/urllib3/__pycache__/response.cpython-313.pyc,,
789
+ pip/_vendor/urllib3/_collections.py,sha256=pyASJJhW7wdOpqJj9QJA8FyGRfr8E8uUUhqUvhF0728,11372
790
+ pip/_vendor/urllib3/_version.py,sha256=t9wGB6ooOTXXgiY66K1m6BZS1CJyXHAU8EoWDTe6Shk,64
791
+ pip/_vendor/urllib3/connection.py,sha256=ttIA909BrbTUzwkqEe_TzZVh4JOOj7g61Ysei2mrwGg,20314
792
+ pip/_vendor/urllib3/connectionpool.py,sha256=e2eiAwNbFNCKxj4bwDKNK-w7HIdSz3OmMxU_TIt-evQ,40408
793
+ pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
794
+ pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-313.pyc,,
795
+ pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-313.pyc,,
796
+ pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-313.pyc,,
797
+ pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-313.pyc,,
798
+ pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-313.pyc,,
799
+ pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-313.pyc,,
800
+ pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-313.pyc,,
801
+ pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957
802
+ pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
803
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-313.pyc,,
804
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-313.pyc,,
805
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-313.pyc,,
806
+ pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632
807
+ pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922
808
+ pip/_vendor/urllib3/contrib/appengine.py,sha256=VR68eAVE137lxTgjBDwCna5UiBZTOKa01Aj_-5BaCz4,11036
809
+ pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=NlfkW7WMdW8ziqudopjHoW299og1BTWi0IeIibquFwk,4528
810
+ pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=hDJh4MhyY_p-oKlFcYcQaVQRDv6GMmBGuW9yjxyeejM,17081
811
+ pip/_vendor/urllib3/contrib/securetransport.py,sha256=Fef1IIUUFHqpevzXiDPbIGkDKchY2FVKeVeLGR1Qq3g,34446
812
+ pip/_vendor/urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097
813
+ pip/_vendor/urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217
814
+ pip/_vendor/urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579
815
+ pip/_vendor/urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440
816
+ pip/_vendor/urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
817
+ pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-313.pyc,,
818
+ pip/_vendor/urllib3/packages/__pycache__/six.cpython-313.pyc,,
819
+ pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
820
+ pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-313.pyc,,
821
+ pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-313.pyc,,
822
+ pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-313.pyc,,
823
+ pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417
824
+ pip/_vendor/urllib3/packages/backports/weakref_finalize.py,sha256=tRCal5OAhNSRyb0DhHp-38AtIlCsRP8BxF3NX-6rqIA,5343
825
+ pip/_vendor/urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665
826
+ pip/_vendor/urllib3/poolmanager.py,sha256=aWyhXRtNO4JUnCSVVqKTKQd8EXTvUm1VN9pgs2bcONo,19990
827
+ pip/_vendor/urllib3/request.py,sha256=YTWFNr7QIwh7E1W9dde9LM77v2VWTJ5V78XuTTw7D1A,6691
828
+ pip/_vendor/urllib3/response.py,sha256=fmDJAFkG71uFTn-sVSTh2Iw0WmcXQYqkbRjihvwBjU8,30641
829
+ pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155
830
+ pip/_vendor/urllib3/util/__pycache__/__init__.cpython-313.pyc,,
831
+ pip/_vendor/urllib3/util/__pycache__/connection.cpython-313.pyc,,
832
+ pip/_vendor/urllib3/util/__pycache__/proxy.cpython-313.pyc,,
833
+ pip/_vendor/urllib3/util/__pycache__/queue.cpython-313.pyc,,
834
+ pip/_vendor/urllib3/util/__pycache__/request.cpython-313.pyc,,
835
+ pip/_vendor/urllib3/util/__pycache__/response.cpython-313.pyc,,
836
+ pip/_vendor/urllib3/util/__pycache__/retry.cpython-313.pyc,,
837
+ pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-313.pyc,,
838
+ pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-313.pyc,,
839
+ pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-313.pyc,,
840
+ pip/_vendor/urllib3/util/__pycache__/timeout.cpython-313.pyc,,
841
+ pip/_vendor/urllib3/util/__pycache__/url.cpython-313.pyc,,
842
+ pip/_vendor/urllib3/util/__pycache__/wait.cpython-313.pyc,,
843
+ pip/_vendor/urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901
844
+ pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605
845
+ pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498
846
+ pip/_vendor/urllib3/util/request.py,sha256=C0OUt2tcU6LRiQJ7YYNP9GvPrSvl7ziIBekQ-5nlBZk,3997
847
+ pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510
848
+ pip/_vendor/urllib3/util/retry.py,sha256=6ENvOZ8PBDzh8kgixpql9lIrb2dxH-k7ZmBanJF2Ng4,22050
849
+ pip/_vendor/urllib3/util/ssl_.py,sha256=QDuuTxPSCj1rYtZ4xpD7Ux-r20TD50aHyqKyhQ7Bq4A,17460
850
+ pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758
851
+ pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895
852
+ pip/_vendor/urllib3/util/timeout.py,sha256=cwq4dMk87mJHSBktK1miYJ-85G-3T3RmT20v7SFCpno,10168
853
+ pip/_vendor/urllib3/util/url.py,sha256=lCAE7M5myA8EDdW0sJuyyZhVB9K_j38ljWhHAnFaWoE,14296
854
+ pip/_vendor/urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403
855
+ pip/_vendor/vendor.txt,sha256=Fym1hhuw75IJOl33NPi5nIJJc66DioBSUWrVRIVtRUE,373
856
+ pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286
.venv-1/Lib/site-packages/pip-25.1.1.dist-info/REQUESTED ADDED
File without changes
.venv-1/Lib/site-packages/pip-25.1.1.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (79.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
.venv-1/Lib/site-packages/pip-25.1.1.dist-info/entry_points.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ [console_scripts]
2
+ pip = pip._internal.cli.main:main
3
+ pip3 = pip._internal.cli.main:main
.venv-1/Lib/site-packages/pip-25.1.1.dist-info/licenses/AUTHORS.txt ADDED
@@ -0,0 +1,821 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @Switch01
2
+ A_Rog
3
+ Aakanksha Agrawal
4
+ Abhinav Sagar
5
+ ABHYUDAY PRATAP SINGH
6
+ abs51295
7
+ AceGentile
8
+ Adam Chainz
9
+ Adam Tse
10
+ Adam Turner
11
+ Adam Wentz
12
+ admin
13
+ Adolfo Ochagavía
14
+ Adrien Morison
15
+ Agus
16
+ ahayrapetyan
17
+ Ahilya
18
+ AinsworthK
19
+ Akash Srivastava
20
+ Alan Yee
21
+ Albert Tugushev
22
+ Albert-Guan
23
+ albertg
24
+ Alberto Sottile
25
+ Aleks Bunin
26
+ Ales Erjavec
27
+ Alethea Flowers
28
+ Alex Gaynor
29
+ Alex Grönholm
30
+ Alex Hedges
31
+ Alex Loosley
32
+ Alex Morega
33
+ Alex Stachowiak
34
+ Alexander Regueiro
35
+ Alexander Shtyrov
36
+ Alexandre Conrad
37
+ Alexey Popravka
38
+ Aleš Erjavec
39
+ Alli
40
+ Ami Fischman
41
+ Ananya Maiti
42
+ Anatoly Techtonik
43
+ Anders Kaseorg
44
+ Andre Aguiar
45
+ Andreas Lutro
46
+ Andrei Geacar
47
+ Andrew Gaul
48
+ Andrew Shymanel
49
+ Andrey Bienkowski
50
+ Andrey Bulgakov
51
+ Andrés Delfino
52
+ Andy Freeland
53
+ Andy Kluger
54
+ Ani Hayrapetyan
55
+ Aniruddha Basak
56
+ Anish Tambe
57
+ Anrs Hu
58
+ Anthony Sottile
59
+ Antoine Musso
60
+ Anton Ovchinnikov
61
+ Anton Patrushev
62
+ Anton Zelenov
63
+ Antonio Alvarado Hernandez
64
+ Antony Lee
65
+ Antti Kaihola
66
+ Anubhav Patel
67
+ Anudit Nagar
68
+ Anuj Godase
69
+ AQNOUCH Mohammed
70
+ AraHaan
71
+ arena
72
+ arenasys
73
+ Arindam Choudhury
74
+ Armin Ronacher
75
+ Arnon Yaari
76
+ Artem
77
+ Arun Babu Neelicattu
78
+ Ashley Manton
79
+ Ashwin Ramaswami
80
+ atse
81
+ Atsushi Odagiri
82
+ Avinash Karhana
83
+ Avner Cohen
84
+ Awit (Ah-Wit) Ghirmai
85
+ Baptiste Mispelon
86
+ Barney Gale
87
+ barneygale
88
+ Bartek Ogryczak
89
+ Bastian Venthur
90
+ Ben Bodenmiller
91
+ Ben Darnell
92
+ Ben Hoyt
93
+ Ben Mares
94
+ Ben Rosser
95
+ Bence Nagy
96
+ Benjamin Peterson
97
+ Benjamin VanEvery
98
+ Benoit Pierre
99
+ Berker Peksag
100
+ Bernard
101
+ Bernard Tyers
102
+ Bernardo B. Marques
103
+ Bernhard M. Wiedemann
104
+ Bertil Hatt
105
+ Bhavam Vidyarthi
106
+ Blazej Michalik
107
+ Bogdan Opanchuk
108
+ BorisZZZ
109
+ Brad Erickson
110
+ Bradley Ayers
111
+ Bradley Reynolds
112
+ Branch Vincent
113
+ Brandon L. Reiss
114
+ Brandt Bucher
115
+ Brannon Dorsey
116
+ Brett Randall
117
+ Brett Rosen
118
+ Brian Cristante
119
+ Brian Rosner
120
+ briantracy
121
+ BrownTruck
122
+ Bruno Oliveira
123
+ Bruno Renié
124
+ Bruno S
125
+ Bstrdsmkr
126
+ Buck Golemon
127
+ burrows
128
+ Bussonnier Matthias
129
+ bwoodsend
130
+ c22
131
+ Caleb Brown
132
+ Caleb Martinez
133
+ Calvin Smith
134
+ Carl Meyer
135
+ Carlos Liam
136
+ Carol Willing
137
+ Carter Thayer
138
+ Cass
139
+ Chandrasekhar Atina
140
+ Charlie Marsh
141
+ charwick
142
+ Chih-Hsuan Yen
143
+ Chris Brinker
144
+ Chris Hunt
145
+ Chris Jerdonek
146
+ Chris Kuehl
147
+ Chris Markiewicz
148
+ Chris McDonough
149
+ Chris Pawley
150
+ Chris Pryer
151
+ Chris Wolfe
152
+ Christian Clauss
153
+ Christian Heimes
154
+ Christian Oudard
155
+ Christoph Reiter
156
+ Christopher Hunt
157
+ Christopher Snyder
158
+ chrysle
159
+ cjc7373
160
+ Clark Boylan
161
+ Claudio Jolowicz
162
+ Clay McClure
163
+ Cody
164
+ Cody Soyland
165
+ Colin Watson
166
+ Collin Anderson
167
+ Connor Osborn
168
+ Cooper Lees
169
+ Cooper Ry Lees
170
+ Cory Benfield
171
+ Cory Wright
172
+ Craig Kerstiens
173
+ Cristian Sorinel
174
+ Cristina
175
+ Cristina Muñoz
176
+ ctg123
177
+ Curtis Doty
178
+ cytolentino
179
+ Daan De Meyer
180
+ Dale
181
+ Damian
182
+ Damian Quiroga
183
+ Damian Shaw
184
+ Dan Black
185
+ Dan Savilonis
186
+ Dan Sully
187
+ Dane Hillard
188
+ daniel
189
+ Daniel Collins
190
+ Daniel Hahler
191
+ Daniel Holth
192
+ Daniel Jost
193
+ Daniel Katz
194
+ Daniel Shaulov
195
+ Daniele Esposti
196
+ Daniele Nicolodi
197
+ Daniele Procida
198
+ Daniil Konovalenko
199
+ Danny Hermes
200
+ Danny McClanahan
201
+ Darren Kavanagh
202
+ Dav Clark
203
+ Dave Abrahams
204
+ Dave Jones
205
+ David Aguilar
206
+ David Black
207
+ David Bordeynik
208
+ David Caro
209
+ David D Lowe
210
+ David Evans
211
+ David Hewitt
212
+ David Linke
213
+ David Poggi
214
+ David Poznik
215
+ David Pursehouse
216
+ David Runge
217
+ David Tucker
218
+ David Wales
219
+ Davidovich
220
+ ddelange
221
+ Deepak Sharma
222
+ Deepyaman Datta
223
+ Denise Yu
224
+ dependabot[bot]
225
+ derwolfe
226
+ Desetude
227
+ developer
228
+ Devesh Kumar Singh
229
+ devsagul
230
+ Diego Caraballo
231
+ Diego Ramirez
232
+ DiegoCaraballo
233
+ Dimitri Merejkowsky
234
+ Dimitri Papadopoulos
235
+ Dimitri Papadopoulos Orfanos
236
+ Dirk Stolle
237
+ Dmitry Gladkov
238
+ Dmitry Volodin
239
+ Domen Kožar
240
+ Dominic Davis-Foster
241
+ Donald Stufft
242
+ Dongweiming
243
+ doron zarhi
244
+ Dos Moonen
245
+ Douglas Thor
246
+ DrFeathers
247
+ Dustin Ingram
248
+ Dustin Rodrigues
249
+ Dwayne Bailey
250
+ Ed Morley
251
+ Edgar Ramírez
252
+ Edgar Ramírez Mondragón
253
+ Ee Durbin
254
+ Efflam Lemaillet
255
+ efflamlemaillet
256
+ Eitan Adler
257
+ ekristina
258
+ elainechan
259
+ Eli Schwartz
260
+ Elisha Hollander
261
+ Ellen Marie Dash
262
+ Emil Burzo
263
+ Emil Styrke
264
+ Emmanuel Arias
265
+ Endoh Takanao
266
+ enoch
267
+ Erdinc Mutlu
268
+ Eric Cousineau
269
+ Eric Gillingham
270
+ Eric Hanchrow
271
+ Eric Hopper
272
+ Erik M. Bray
273
+ Erik Rose
274
+ Erwin Janssen
275
+ Eugene Vereshchagin
276
+ everdimension
277
+ Federico
278
+ Felipe Peter
279
+ Felix Yan
280
+ fiber-space
281
+ Filip Kokosiński
282
+ Filipe Laíns
283
+ Finn Womack
284
+ finnagin
285
+ Flavio Amurrio
286
+ Florian Briand
287
+ Florian Rathgeber
288
+ Francesco
289
+ Francesco Montesano
290
+ Fredrik Orderud
291
+ Fredrik Roubert
292
+ Frost Ming
293
+ Gabriel Curio
294
+ Gabriel de Perthuis
295
+ Garry Polley
296
+ gavin
297
+ gdanielson
298
+ Geoffrey Sneddon
299
+ George Margaritis
300
+ George Song
301
+ Georgi Valkov
302
+ Georgy Pchelkin
303
+ ghost
304
+ Giftlin Rajaiah
305
+ gizmoguy1
306
+ gkdoc
307
+ Godefroid Chapelle
308
+ Gopinath M
309
+ GOTO Hayato
310
+ gousaiyang
311
+ gpiks
312
+ Greg Roodt
313
+ Greg Ward
314
+ Guilherme Espada
315
+ Guillaume Seguin
316
+ gutsytechster
317
+ Guy Rozendorn
318
+ Guy Tuval
319
+ gzpan123
320
+ Hanjun Kim
321
+ Hari Charan
322
+ Harsh Vardhan
323
+ harupy
324
+ Harutaka Kawamura
325
+ hauntsaninja
326
+ Henrich Hartzer
327
+ Henry Schreiner
328
+ Herbert Pfennig
329
+ Holly Stotelmyer
330
+ Honnix
331
+ Hsiaoming Yang
332
+ Hugo Lopes Tavares
333
+ Hugo van Kemenade
334
+ Hugues Bruant
335
+ Hynek Schlawack
336
+ Ian Bicking
337
+ Ian Cordasco
338
+ Ian Lee
339
+ Ian Stapleton Cordasco
340
+ Ian Wienand
341
+ Igor Kuzmitshov
342
+ Igor Sobreira
343
+ Ikko Ashimine
344
+ Ilan Schnell
345
+ Illia Volochii
346
+ Ilya Baryshev
347
+ Inada Naoki
348
+ Ionel Cristian Mărieș
349
+ Ionel Maries Cristian
350
+ Itamar Turner-Trauring
351
+ iTrooz
352
+ Ivan Pozdeev
353
+ J. Nick Koston
354
+ Jacob Kim
355
+ Jacob Walls
356
+ Jaime Sanz
357
+ Jake Lishman
358
+ jakirkham
359
+ Jakub Kuczys
360
+ Jakub Stasiak
361
+ Jakub Vysoky
362
+ Jakub Wilk
363
+ James Cleveland
364
+ James Curtin
365
+ James Firth
366
+ James Gerity
367
+ James Polley
368
+ Jan Pokorný
369
+ Jannis Leidel
370
+ Jarek Potiuk
371
+ jarondl
372
+ Jason Curtis
373
+ Jason R. Coombs
374
+ JasonMo
375
+ JasonMo1
376
+ Jay Graves
377
+ Jean Abou Samra
378
+ Jean-Christophe Fillion-Robin
379
+ Jeff Barber
380
+ Jeff Dairiki
381
+ Jeff Widman
382
+ Jelmer Vernooij
383
+ jenix21
384
+ Jeremy Fleischman
385
+ Jeremy Stanley
386
+ Jeremy Zafran
387
+ Jesse Rittner
388
+ Jiashuo Li
389
+ Jim Fisher
390
+ Jim Garrison
391
+ Jinzhe Zeng
392
+ Jiun Bae
393
+ Jivan Amara
394
+ Joa
395
+ Joe Bylund
396
+ Joe Michelini
397
+ Johannes Altmanninger
398
+ John Paton
399
+ John Sirois
400
+ John T. Wodder II
401
+ John-Scott Atlakson
402
+ johnthagen
403
+ Jon Banafato
404
+ Jon Dufresne
405
+ Jon Parise
406
+ Jonas Nockert
407
+ Jonathan Herbert
408
+ Joonatan Partanen
409
+ Joost Molenaar
410
+ Jorge Niedbalski
411
+ Joseph Bylund
412
+ Joseph Long
413
+ Josh Bronson
414
+ Josh Cannon
415
+ Josh Hansen
416
+ Josh Schneier
417
+ Joshua
418
+ JoshuaPerdue
419
+ Juan Luis Cano Rodríguez
420
+ Juanjo Bazán
421
+ Judah Rand
422
+ Julian Berman
423
+ Julian Gethmann
424
+ Julien Demoor
425
+ July Tikhonov
426
+ Jussi Kukkonen
427
+ Justin van Heek
428
+ jwg4
429
+ Jyrki Pulliainen
430
+ Kai Chen
431
+ Kai Mueller
432
+ Kamal Bin Mustafa
433
+ Karolina Surma
434
+ kasium
435
+ kaustav haldar
436
+ keanemind
437
+ Keith Maxwell
438
+ Kelsey Hightower
439
+ Kenneth Belitzky
440
+ Kenneth Reitz
441
+ Kevin Burke
442
+ Kevin Carter
443
+ Kevin Frommelt
444
+ Kevin R Patterson
445
+ Kexuan Sun
446
+ Kit Randel
447
+ Klaas van Schelven
448
+ KOLANICH
449
+ konstin
450
+ kpinc
451
+ Krishan Bhasin
452
+ Krishna Oza
453
+ Kumar McMillan
454
+ Kuntal Majumder
455
+ Kurt McKee
456
+ Kyle Persohn
457
+ lakshmanaram
458
+ Laszlo Kiss-Kollar
459
+ Laurent Bristiel
460
+ Laurent LAPORTE
461
+ Laurie O
462
+ Laurie Opperman
463
+ layday
464
+ Leon Sasson
465
+ Lev Givon
466
+ Lincoln de Sousa
467
+ Lipis
468
+ lorddavidiii
469
+ Loren Carvalho
470
+ Lucas Cimon
471
+ Ludovic Gasc
472
+ Luis Medel
473
+ Lukas Geiger
474
+ Lukas Juhrich
475
+ Luke Macken
476
+ Luo Jiebin
477
+ luojiebin
478
+ luz.paz
479
+ László Kiss Kollár
480
+ M00nL1ght
481
+ Malcolm Smith
482
+ Marc Abramowitz
483
+ Marc Tamlyn
484
+ Marcus Smith
485
+ Mariatta
486
+ Mark Kohler
487
+ Mark McLoughlin
488
+ Mark Williams
489
+ Markus Hametner
490
+ Martey Dodoo
491
+ Martin Fischer
492
+ Martin Häcker
493
+ Martin Pavlasek
494
+ Masaki
495
+ Masklinn
496
+ Matej Stuchlik
497
+ Mathew Jennings
498
+ Mathieu Bridon
499
+ Mathieu Kniewallner
500
+ Matt Bacchi
501
+ Matt Good
502
+ Matt Maker
503
+ Matt Robenolt
504
+ Matt Wozniski
505
+ matthew
506
+ Matthew Einhorn
507
+ Matthew Feickert
508
+ Matthew Gilliard
509
+ Matthew Hughes
510
+ Matthew Iversen
511
+ Matthew Treinish
512
+ Matthew Trumbell
513
+ Matthew Willson
514
+ Matthias Bussonnier
515
+ mattip
516
+ Maurits van Rees
517
+ Max W Chase
518
+ Maxim Kurnikov
519
+ Maxime Rouyrre
520
+ mayeut
521
+ mbaluna
522
+ Md Sujauddin Sekh
523
+ mdebi
524
+ memoselyk
525
+ meowmeowcat
526
+ Michael
527
+ Michael Aquilina
528
+ Michael E. Karpeles
529
+ Michael Klich
530
+ Michael Mintz
531
+ Michael Williamson
532
+ michaelpacer
533
+ Michał Górny
534
+ Mickaël Schoentgen
535
+ Miguel Araujo Perez
536
+ Mihir Singh
537
+ Mike
538
+ Mike Hendricks
539
+ Min RK
540
+ MinRK
541
+ Miro Hrončok
542
+ Monica Baluna
543
+ montefra
544
+ Monty Taylor
545
+ morotti
546
+ mrKazzila
547
+ Muha Ajjan
548
+ Nadav Wexler
549
+ Nahuel Ambrosini
550
+ Nate Coraor
551
+ Nate Prewitt
552
+ Nathan Houghton
553
+ Nathaniel J. Smith
554
+ Nehal J Wani
555
+ Neil Botelho
556
+ Nguyễn Gia Phong
557
+ Nicholas Serra
558
+ Nick Coghlan
559
+ Nick Stenning
560
+ Nick Timkovich
561
+ Nicolas Bock
562
+ Nicole Harris
563
+ Nikhil Benesch
564
+ Nikhil Ladha
565
+ Nikita Chepanov
566
+ Nikolay Korolev
567
+ Nipunn Koorapati
568
+ Nitesh Sharma
569
+ Niyas Sait
570
+ Noah
571
+ Noah Gorny
572
+ Nowell Strite
573
+ NtaleGrey
574
+ nucccc
575
+ nvdv
576
+ OBITORASU
577
+ Ofek Lev
578
+ ofrinevo
579
+ Oleg Burnaev
580
+ Oliver Freund
581
+ Oliver Jeeves
582
+ Oliver Mannion
583
+ Oliver Tonnhofer
584
+ Olivier Girardot
585
+ Olivier Grisel
586
+ Ollie Rutherfurd
587
+ OMOTO Kenji
588
+ Omry Yadan
589
+ onlinejudge95
590
+ Oren Held
591
+ Oscar Benjamin
592
+ Oz N Tiram
593
+ Pachwenko
594
+ Patrick Dubroy
595
+ Patrick Jenkins
596
+ Patrick Lawson
597
+ patricktokeeffe
598
+ Patrik Kopkan
599
+ Paul Ganssle
600
+ Paul Kehrer
601
+ Paul Moore
602
+ Paul Nasrat
603
+ Paul Oswald
604
+ Paul van der Linden
605
+ Paulus Schoutsen
606
+ Pavel Safronov
607
+ Pavithra Eswaramoorthy
608
+ Pawel Jasinski
609
+ Paweł Szramowski
610
+ Pekka Klärck
611
+ Peter Gessler
612
+ Peter Lisák
613
+ Peter Shen
614
+ Peter Waller
615
+ Petr Viktorin
616
+ petr-tik
617
+ Phaneendra Chiruvella
618
+ Phil Elson
619
+ Phil Freo
620
+ Phil Pennock
621
+ Phil Whelan
622
+ Philip Jägenstedt
623
+ Philip Molloy
624
+ Philippe Ombredanne
625
+ Pi Delport
626
+ Pierre-Yves Rofes
627
+ Pieter Degroote
628
+ pip
629
+ Prabakaran Kumaresshan
630
+ Prabhjyotsing Surjit Singh Sodhi
631
+ Prabhu Marappan
632
+ Pradyun Gedam
633
+ Prashant Sharma
634
+ Pratik Mallya
635
+ pre-commit-ci[bot]
636
+ Preet Thakkar
637
+ Preston Holmes
638
+ Przemek Wrzos
639
+ Pulkit Goyal
640
+ q0w
641
+ Qiangning Hong
642
+ Qiming Xu
643
+ Quentin Lee
644
+ Quentin Pradet
645
+ R. David Murray
646
+ Rafael Caricio
647
+ Ralf Schmitt
648
+ Ran Benita
649
+ Randy Döring
650
+ Razzi Abuissa
651
+ rdb
652
+ Reece Dunham
653
+ Remi Rampin
654
+ Rene Dudfield
655
+ Riccardo Magliocchetti
656
+ Riccardo Schirone
657
+ Richard Jones
658
+ Richard Si
659
+ Ricky Ng-Adam
660
+ Rishi
661
+ rmorotti
662
+ RobberPhex
663
+ Robert Collins
664
+ Robert McGibbon
665
+ Robert Pollak
666
+ Robert T. McGibbon
667
+ robin elisha robinson
668
+ Roey Berman
669
+ Rohan Jain
670
+ Roman Bogorodskiy
671
+ Roman Donchenko
672
+ Romuald Brunet
673
+ ronaudinho
674
+ Ronny Pfannschmidt
675
+ Rory McCann
676
+ Ross Brattain
677
+ Roy Wellington Ⅳ
678
+ Ruairidh MacLeod
679
+ Russell Keith-Magee
680
+ Ryan Shepherd
681
+ Ryan Wooden
682
+ ryneeverett
683
+ S. Guliaev
684
+ Sachi King
685
+ Salvatore Rinchiera
686
+ sandeepkiran-js
687
+ Sander Van Balen
688
+ Savio Jomton
689
+ schlamar
690
+ Scott Kitterman
691
+ Sean
692
+ seanj
693
+ Sebastian Jordan
694
+ Sebastian Schaetz
695
+ Segev Finer
696
+ SeongSoo Cho
697
+ Sergey Vasilyev
698
+ Seth Michael Larson
699
+ Seth Woodworth
700
+ Shahar Epstein
701
+ Shantanu
702
+ shenxianpeng
703
+ shireenrao
704
+ Shivansh-007
705
+ Shixian Sheng
706
+ Shlomi Fish
707
+ Shovan Maity
708
+ Simeon Visser
709
+ Simon Cross
710
+ Simon Pichugin
711
+ sinoroc
712
+ sinscary
713
+ snook92
714
+ socketubs
715
+ Sorin Sbarnea
716
+ Srinivas Nyayapati
717
+ Srishti Hegde
718
+ Stavros Korokithakis
719
+ Stefan Scherfke
720
+ Stefano Rivera
721
+ Stephan Erb
722
+ Stephen Rosen
723
+ stepshal
724
+ Steve (Gadget) Barnes
725
+ Steve Barnes
726
+ Steve Dower
727
+ Steve Kowalik
728
+ Steven Myint
729
+ Steven Silvester
730
+ stonebig
731
+ studioj
732
+ Stéphane Bidoul
733
+ Stéphane Bidoul (ACSONE)
734
+ Stéphane Klein
735
+ Sumana Harihareswara
736
+ Surbhi Sharma
737
+ Sviatoslav Sydorenko
738
+ Sviatoslav Sydorenko (Святослав Сидоренко)
739
+ Swat009
740
+ Sylvain
741
+ Takayuki SHIMIZUKAWA
742
+ Taneli Hukkinen
743
+ tbeswick
744
+ Thiago
745
+ Thijs Triemstra
746
+ Thomas Fenzl
747
+ Thomas Grainger
748
+ Thomas Guettler
749
+ Thomas Johansson
750
+ Thomas Kluyver
751
+ Thomas Smith
752
+ Thomas VINCENT
753
+ Tim D. Smith
754
+ Tim Gates
755
+ Tim Harder
756
+ Tim Heap
757
+ tim smith
758
+ tinruufu
759
+ Tobias Hermann
760
+ Tom Forbes
761
+ Tom Freudenheim
762
+ Tom V
763
+ Tomas Hrnciar
764
+ Tomas Orsava
765
+ Tomer Chachamu
766
+ Tommi Enenkel | AnB
767
+ Tomáš Hrnčiar
768
+ Tony Beswick
769
+ Tony Narlock
770
+ Tony Zhaocheng Tan
771
+ TonyBeswick
772
+ toonarmycaptain
773
+ Toshio Kuratomi
774
+ toxinu
775
+ Travis Swicegood
776
+ Tushar Sadhwani
777
+ Tzu-ping Chung
778
+ Valentin Haenel
779
+ Victor Stinner
780
+ victorvpaulo
781
+ Vikram - Google
782
+ Viktor Szépe
783
+ Ville Skyttä
784
+ Vinay Sajip
785
+ Vincent Philippon
786
+ Vinicyus Macedo
787
+ Vipul Kumar
788
+ Vitaly Babiy
789
+ Vladimir Fokow
790
+ Vladimir Rutsky
791
+ W. Trevor King
792
+ Wil Tan
793
+ Wilfred Hughes
794
+ William Edwards
795
+ William ML Leslie
796
+ William T Olson
797
+ William Woodruff
798
+ Wilson Mo
799
+ wim glenn
800
+ Winson Luk
801
+ Wolfgang Maier
802
+ Wu Zhenyu
803
+ XAMES3
804
+ Xavier Fernandez
805
+ Xianpeng Shen
806
+ xoviat
807
+ xtreak
808
+ YAMAMOTO Takashi
809
+ Yen Chi Hsuan
810
+ Yeray Diaz Diaz
811
+ Yoval P
812
+ Yu Jian
813
+ Yuan Jing Vincent Yan
814
+ Yusuke Hayashi
815
+ Zearin
816
+ Zhiping Deng
817
+ ziebam
818
+ Zvezdan Petkovic
819
+ Łukasz Langa
820
+ Роман Донченко
821
+ Семён Марьясин
.venv-1/Lib/site-packages/pip-25.1.1.dist-info/licenses/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2008-present The pip developers (see AUTHORS.txt file)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
.venv-1/Lib/site-packages/pip-25.1.1.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
.venv-1/Lib/site-packages/pip/__init__.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List, Optional
2
+
3
+ __version__ = "25.1.1"
4
+
5
+
6
+ def main(args: Optional[List[str]] = None) -> int:
7
+ """This is an internal API only meant for use by pip's own console scripts.
8
+
9
+ For additional details, see https://github.com/pypa/pip/issues/7498.
10
+ """
11
+ from pip._internal.utils.entrypoints import _wrapper
12
+
13
+ return _wrapper(args)
.venv-1/Lib/site-packages/pip/__main__.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+
4
+ # Remove '' and current working directory from the first entry
5
+ # of sys.path, if present to avoid using current directory
6
+ # in pip commands check, freeze, install, list and show,
7
+ # when invoked as python -m pip <command>
8
+ if sys.path[0] in ("", os.getcwd()):
9
+ sys.path.pop(0)
10
+
11
+ # If we are running from a wheel, add the wheel to sys.path
12
+ # This allows the usage python pip-*.whl/pip install pip-*.whl
13
+ if __package__ == "":
14
+ # __file__ is pip-*.whl/pip/__main__.py
15
+ # first dirname call strips of '/__main__.py', second strips off '/pip'
16
+ # Resulting path is the name of the wheel itself
17
+ # Add that to sys.path so we can import pip
18
+ path = os.path.dirname(os.path.dirname(__file__))
19
+ sys.path.insert(0, path)
20
+
21
+ if __name__ == "__main__":
22
+ from pip._internal.cli.main import main as _main
23
+
24
+ sys.exit(_main())
.venv-1/Lib/site-packages/pip/__pip-runner__.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Execute exactly this copy of pip, within a different environment.
2
+
3
+ This file is named as it is, to ensure that this module can't be imported via
4
+ an import statement.
5
+ """
6
+
7
+ # /!\ This version compatibility check section must be Python 2 compatible. /!\
8
+
9
+ import sys
10
+
11
+ # Copied from pyproject.toml
12
+ PYTHON_REQUIRES = (3, 9)
13
+
14
+
15
+ def version_str(version): # type: ignore
16
+ return ".".join(str(v) for v in version)
17
+
18
+
19
+ if sys.version_info[:2] < PYTHON_REQUIRES:
20
+ raise SystemExit(
21
+ "This version of pip does not support python {} (requires >={}).".format(
22
+ version_str(sys.version_info[:2]), version_str(PYTHON_REQUIRES)
23
+ )
24
+ )
25
+
26
+ # From here on, we can use Python 3 features, but the syntax must remain
27
+ # Python 2 compatible.
28
+
29
+ import runpy # noqa: E402
30
+ from importlib.machinery import PathFinder # noqa: E402
31
+ from os.path import dirname # noqa: E402
32
+
33
+ PIP_SOURCES_ROOT = dirname(dirname(__file__))
34
+
35
+
36
+ class PipImportRedirectingFinder:
37
+ @classmethod
38
+ def find_spec(self, fullname, path=None, target=None): # type: ignore
39
+ if fullname != "pip":
40
+ return None
41
+
42
+ spec = PathFinder.find_spec(fullname, [PIP_SOURCES_ROOT], target)
43
+ assert spec, (PIP_SOURCES_ROOT, fullname)
44
+ return spec
45
+
46
+
47
+ sys.meta_path.insert(0, PipImportRedirectingFinder())
48
+
49
+ assert __name__ == "__main__", "Cannot run __pip-runner__.py as a non-main module"
50
+ runpy.run_module("pip", run_name="__main__", alter_sys=True)
.venv-1/Lib/site-packages/pip/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (724 Bytes). View file
 
.venv-1/Lib/site-packages/pip/__pycache__/__main__.cpython-313.pyc ADDED
Binary file (886 Bytes). View file
 
.venv-1/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-313.pyc ADDED
Binary file (2.32 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/__init__.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import List, Optional
2
+
3
+ from pip._internal.utils import _log
4
+
5
+ # init_logging() must be called before any call to logging.getLogger()
6
+ # which happens at import of most modules.
7
+ _log.init_logging()
8
+
9
+
10
+ def main(args: Optional[List[str]] = None) -> int:
11
+ """This is preserved for old console scripts that may still be referencing
12
+ it.
13
+
14
+ For additional details, see https://github.com/pypa/pip/issues/7498.
15
+ """
16
+ from pip._internal.utils.entrypoints import _wrapper
17
+
18
+ return _wrapper(args)
.venv-1/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (818 Bytes). View file
 
.venv-1/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-313.pyc ADDED
Binary file (15.2 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-313.pyc ADDED
Binary file (12.9 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-313.pyc ADDED
Binary file (17.9 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-313.pyc ADDED
Binary file (40 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/__pycache__/main.cpython-313.pyc ADDED
Binary file (703 Bytes). View file
 
.venv-1/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-313.pyc ADDED
Binary file (5.26 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-313.pyc ADDED
Binary file (10.6 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-313.pyc ADDED
Binary file (13.6 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/build_env.py ADDED
@@ -0,0 +1,325 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Build Environment used for isolation during sdist building"""
2
+
3
+ import logging
4
+ import os
5
+ import pathlib
6
+ import site
7
+ import sys
8
+ import textwrap
9
+ from collections import OrderedDict
10
+ from types import TracebackType
11
+ from typing import TYPE_CHECKING, Iterable, List, Optional, Set, Tuple, Type, Union
12
+
13
+ from pip._vendor.packaging.version import Version
14
+
15
+ from pip import __file__ as pip_location
16
+ from pip._internal.cli.spinners import open_spinner
17
+ from pip._internal.locations import get_platlib, get_purelib, get_scheme
18
+ from pip._internal.metadata import get_default_environment, get_environment
19
+ from pip._internal.utils.logging import VERBOSE
20
+ from pip._internal.utils.packaging import get_requirement
21
+ from pip._internal.utils.subprocess import call_subprocess
22
+ from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds
23
+
24
+ if TYPE_CHECKING:
25
+ from pip._internal.index.package_finder import PackageFinder
26
+
27
+ logger = logging.getLogger(__name__)
28
+
29
+
30
+ def _dedup(a: str, b: str) -> Union[Tuple[str], Tuple[str, str]]:
31
+ return (a, b) if a != b else (a,)
32
+
33
+
34
+ class _Prefix:
35
+ def __init__(self, path: str) -> None:
36
+ self.path = path
37
+ self.setup = False
38
+ scheme = get_scheme("", prefix=path)
39
+ self.bin_dir = scheme.scripts
40
+ self.lib_dirs = _dedup(scheme.purelib, scheme.platlib)
41
+
42
+
43
+ def get_runnable_pip() -> str:
44
+ """Get a file to pass to a Python executable, to run the currently-running pip.
45
+
46
+ This is used to run a pip subprocess, for installing requirements into the build
47
+ environment.
48
+ """
49
+ source = pathlib.Path(pip_location).resolve().parent
50
+
51
+ if not source.is_dir():
52
+ # This would happen if someone is using pip from inside a zip file. In that
53
+ # case, we can use that directly.
54
+ return str(source)
55
+
56
+ return os.fsdecode(source / "__pip-runner__.py")
57
+
58
+
59
+ def _get_system_sitepackages() -> Set[str]:
60
+ """Get system site packages
61
+
62
+ Usually from site.getsitepackages,
63
+ but fallback on `get_purelib()/get_platlib()` if unavailable
64
+ (e.g. in a virtualenv created by virtualenv<20)
65
+
66
+ Returns normalized set of strings.
67
+ """
68
+ if hasattr(site, "getsitepackages"):
69
+ system_sites = site.getsitepackages()
70
+ else:
71
+ # virtualenv < 20 overwrites site.py without getsitepackages
72
+ # fallback on get_purelib/get_platlib.
73
+ # this is known to miss things, but shouldn't in the cases
74
+ # where getsitepackages() has been removed (inside a virtualenv)
75
+ system_sites = [get_purelib(), get_platlib()]
76
+ return {os.path.normcase(path) for path in system_sites}
77
+
78
+
79
+ class BuildEnvironment:
80
+ """Creates and manages an isolated environment to install build deps"""
81
+
82
+ def __init__(self) -> None:
83
+ temp_dir = TempDirectory(kind=tempdir_kinds.BUILD_ENV, globally_managed=True)
84
+
85
+ self._prefixes = OrderedDict(
86
+ (name, _Prefix(os.path.join(temp_dir.path, name)))
87
+ for name in ("normal", "overlay")
88
+ )
89
+
90
+ self._bin_dirs: List[str] = []
91
+ self._lib_dirs: List[str] = []
92
+ for prefix in reversed(list(self._prefixes.values())):
93
+ self._bin_dirs.append(prefix.bin_dir)
94
+ self._lib_dirs.extend(prefix.lib_dirs)
95
+
96
+ # Customize site to:
97
+ # - ensure .pth files are honored
98
+ # - prevent access to system site packages
99
+ system_sites = _get_system_sitepackages()
100
+
101
+ self._site_dir = os.path.join(temp_dir.path, "site")
102
+ if not os.path.exists(self._site_dir):
103
+ os.mkdir(self._site_dir)
104
+ with open(
105
+ os.path.join(self._site_dir, "sitecustomize.py"), "w", encoding="utf-8"
106
+ ) as fp:
107
+ fp.write(
108
+ textwrap.dedent(
109
+ """
110
+ import os, site, sys
111
+
112
+ # First, drop system-sites related paths.
113
+ original_sys_path = sys.path[:]
114
+ known_paths = set()
115
+ for path in {system_sites!r}:
116
+ site.addsitedir(path, known_paths=known_paths)
117
+ system_paths = set(
118
+ os.path.normcase(path)
119
+ for path in sys.path[len(original_sys_path):]
120
+ )
121
+ original_sys_path = [
122
+ path for path in original_sys_path
123
+ if os.path.normcase(path) not in system_paths
124
+ ]
125
+ sys.path = original_sys_path
126
+
127
+ # Second, add lib directories.
128
+ # ensuring .pth file are processed.
129
+ for path in {lib_dirs!r}:
130
+ assert not path in sys.path
131
+ site.addsitedir(path)
132
+ """
133
+ ).format(system_sites=system_sites, lib_dirs=self._lib_dirs)
134
+ )
135
+
136
+ def __enter__(self) -> None:
137
+ self._save_env = {
138
+ name: os.environ.get(name, None)
139
+ for name in ("PATH", "PYTHONNOUSERSITE", "PYTHONPATH")
140
+ }
141
+
142
+ path = self._bin_dirs[:]
143
+ old_path = self._save_env["PATH"]
144
+ if old_path:
145
+ path.extend(old_path.split(os.pathsep))
146
+
147
+ pythonpath = [self._site_dir]
148
+
149
+ os.environ.update(
150
+ {
151
+ "PATH": os.pathsep.join(path),
152
+ "PYTHONNOUSERSITE": "1",
153
+ "PYTHONPATH": os.pathsep.join(pythonpath),
154
+ }
155
+ )
156
+
157
+ def __exit__(
158
+ self,
159
+ exc_type: Optional[Type[BaseException]],
160
+ exc_val: Optional[BaseException],
161
+ exc_tb: Optional[TracebackType],
162
+ ) -> None:
163
+ for varname, old_value in self._save_env.items():
164
+ if old_value is None:
165
+ os.environ.pop(varname, None)
166
+ else:
167
+ os.environ[varname] = old_value
168
+
169
+ def check_requirements(
170
+ self, reqs: Iterable[str]
171
+ ) -> Tuple[Set[Tuple[str, str]], Set[str]]:
172
+ """Return 2 sets:
173
+ - conflicting requirements: set of (installed, wanted) reqs tuples
174
+ - missing requirements: set of reqs
175
+ """
176
+ missing = set()
177
+ conflicting = set()
178
+ if reqs:
179
+ env = (
180
+ get_environment(self._lib_dirs)
181
+ if hasattr(self, "_lib_dirs")
182
+ else get_default_environment()
183
+ )
184
+ for req_str in reqs:
185
+ req = get_requirement(req_str)
186
+ # We're explicitly evaluating with an empty extra value, since build
187
+ # environments are not provided any mechanism to select specific extras.
188
+ if req.marker is not None and not req.marker.evaluate({"extra": ""}):
189
+ continue
190
+ dist = env.get_distribution(req.name)
191
+ if not dist:
192
+ missing.add(req_str)
193
+ continue
194
+ if isinstance(dist.version, Version):
195
+ installed_req_str = f"{req.name}=={dist.version}"
196
+ else:
197
+ installed_req_str = f"{req.name}==={dist.version}"
198
+ if not req.specifier.contains(dist.version, prereleases=True):
199
+ conflicting.add((installed_req_str, req_str))
200
+ # FIXME: Consider direct URL?
201
+ return conflicting, missing
202
+
203
+ def install_requirements(
204
+ self,
205
+ finder: "PackageFinder",
206
+ requirements: Iterable[str],
207
+ prefix_as_string: str,
208
+ *,
209
+ kind: str,
210
+ ) -> None:
211
+ prefix = self._prefixes[prefix_as_string]
212
+ assert not prefix.setup
213
+ prefix.setup = True
214
+ if not requirements:
215
+ return
216
+ self._install_requirements(
217
+ get_runnable_pip(),
218
+ finder,
219
+ requirements,
220
+ prefix,
221
+ kind=kind,
222
+ )
223
+
224
+ @staticmethod
225
+ def _install_requirements(
226
+ pip_runnable: str,
227
+ finder: "PackageFinder",
228
+ requirements: Iterable[str],
229
+ prefix: _Prefix,
230
+ *,
231
+ kind: str,
232
+ ) -> None:
233
+ args: List[str] = [
234
+ sys.executable,
235
+ pip_runnable,
236
+ "install",
237
+ "--ignore-installed",
238
+ "--no-user",
239
+ "--prefix",
240
+ prefix.path,
241
+ "--no-warn-script-location",
242
+ "--disable-pip-version-check",
243
+ # As the build environment is ephemeral, it's wasteful to
244
+ # pre-compile everything, especially as not every Python
245
+ # module will be used/compiled in most cases.
246
+ "--no-compile",
247
+ # The prefix specified two lines above, thus
248
+ # target from config file or env var should be ignored
249
+ "--target",
250
+ "",
251
+ ]
252
+ if logger.getEffectiveLevel() <= logging.DEBUG:
253
+ args.append("-vv")
254
+ elif logger.getEffectiveLevel() <= VERBOSE:
255
+ args.append("-v")
256
+ for format_control in ("no_binary", "only_binary"):
257
+ formats = getattr(finder.format_control, format_control)
258
+ args.extend(
259
+ (
260
+ "--" + format_control.replace("_", "-"),
261
+ ",".join(sorted(formats or {":none:"})),
262
+ )
263
+ )
264
+
265
+ index_urls = finder.index_urls
266
+ if index_urls:
267
+ args.extend(["-i", index_urls[0]])
268
+ for extra_index in index_urls[1:]:
269
+ args.extend(["--extra-index-url", extra_index])
270
+ else:
271
+ args.append("--no-index")
272
+ for link in finder.find_links:
273
+ args.extend(["--find-links", link])
274
+
275
+ if finder.proxy:
276
+ args.extend(["--proxy", finder.proxy])
277
+ for host in finder.trusted_hosts:
278
+ args.extend(["--trusted-host", host])
279
+ if finder.custom_cert:
280
+ args.extend(["--cert", finder.custom_cert])
281
+ if finder.client_cert:
282
+ args.extend(["--client-cert", finder.client_cert])
283
+ if finder.allow_all_prereleases:
284
+ args.append("--pre")
285
+ if finder.prefer_binary:
286
+ args.append("--prefer-binary")
287
+ args.append("--")
288
+ args.extend(requirements)
289
+ with open_spinner(f"Installing {kind}") as spinner:
290
+ call_subprocess(
291
+ args,
292
+ command_desc=f"pip subprocess to install {kind}",
293
+ spinner=spinner,
294
+ )
295
+
296
+
297
+ class NoOpBuildEnvironment(BuildEnvironment):
298
+ """A no-op drop-in replacement for BuildEnvironment"""
299
+
300
+ def __init__(self) -> None:
301
+ pass
302
+
303
+ def __enter__(self) -> None:
304
+ pass
305
+
306
+ def __exit__(
307
+ self,
308
+ exc_type: Optional[Type[BaseException]],
309
+ exc_val: Optional[BaseException],
310
+ exc_tb: Optional[TracebackType],
311
+ ) -> None:
312
+ pass
313
+
314
+ def cleanup(self) -> None:
315
+ pass
316
+
317
+ def install_requirements(
318
+ self,
319
+ finder: "PackageFinder",
320
+ requirements: Iterable[str],
321
+ prefix_as_string: str,
322
+ *,
323
+ kind: str,
324
+ ) -> None:
325
+ raise NotImplementedError()
.venv-1/Lib/site-packages/pip/_internal/cache.py ADDED
@@ -0,0 +1,289 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Cache Management"""
2
+
3
+ import hashlib
4
+ import json
5
+ import logging
6
+ import os
7
+ from pathlib import Path
8
+ from typing import Any, Dict, List, Optional
9
+
10
+ from pip._vendor.packaging.tags import Tag, interpreter_name, interpreter_version
11
+ from pip._vendor.packaging.utils import canonicalize_name
12
+
13
+ from pip._internal.exceptions import InvalidWheelFilename
14
+ from pip._internal.models.direct_url import DirectUrl
15
+ from pip._internal.models.link import Link
16
+ from pip._internal.models.wheel import Wheel
17
+ from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds
18
+ from pip._internal.utils.urls import path_to_url
19
+
20
+ logger = logging.getLogger(__name__)
21
+
22
+ ORIGIN_JSON_NAME = "origin.json"
23
+
24
+
25
+ def _hash_dict(d: Dict[str, str]) -> str:
26
+ """Return a stable sha224 of a dictionary."""
27
+ s = json.dumps(d, sort_keys=True, separators=(",", ":"), ensure_ascii=True)
28
+ return hashlib.sha224(s.encode("ascii")).hexdigest()
29
+
30
+
31
+ class Cache:
32
+ """An abstract class - provides cache directories for data from links
33
+
34
+ :param cache_dir: The root of the cache.
35
+ """
36
+
37
+ def __init__(self, cache_dir: str) -> None:
38
+ super().__init__()
39
+ assert not cache_dir or os.path.isabs(cache_dir)
40
+ self.cache_dir = cache_dir or None
41
+
42
+ def _get_cache_path_parts(self, link: Link) -> List[str]:
43
+ """Get parts of part that must be os.path.joined with cache_dir"""
44
+
45
+ # We want to generate an url to use as our cache key, we don't want to
46
+ # just reuse the URL because it might have other items in the fragment
47
+ # and we don't care about those.
48
+ key_parts = {"url": link.url_without_fragment}
49
+ if link.hash_name is not None and link.hash is not None:
50
+ key_parts[link.hash_name] = link.hash
51
+ if link.subdirectory_fragment:
52
+ key_parts["subdirectory"] = link.subdirectory_fragment
53
+
54
+ # Include interpreter name, major and minor version in cache key
55
+ # to cope with ill-behaved sdists that build a different wheel
56
+ # depending on the python version their setup.py is being run on,
57
+ # and don't encode the difference in compatibility tags.
58
+ # https://github.com/pypa/pip/issues/7296
59
+ key_parts["interpreter_name"] = interpreter_name()
60
+ key_parts["interpreter_version"] = interpreter_version()
61
+
62
+ # Encode our key url with sha224, we'll use this because it has similar
63
+ # security properties to sha256, but with a shorter total output (and
64
+ # thus less secure). However the differences don't make a lot of
65
+ # difference for our use case here.
66
+ hashed = _hash_dict(key_parts)
67
+
68
+ # We want to nest the directories some to prevent having a ton of top
69
+ # level directories where we might run out of sub directories on some
70
+ # FS.
71
+ parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]]
72
+
73
+ return parts
74
+
75
+ def _get_candidates(self, link: Link, canonical_package_name: str) -> List[Any]:
76
+ can_not_cache = not self.cache_dir or not canonical_package_name or not link
77
+ if can_not_cache:
78
+ return []
79
+
80
+ path = self.get_path_for_link(link)
81
+ if os.path.isdir(path):
82
+ return [(candidate, path) for candidate in os.listdir(path)]
83
+ return []
84
+
85
+ def get_path_for_link(self, link: Link) -> str:
86
+ """Return a directory to store cached items in for link."""
87
+ raise NotImplementedError()
88
+
89
+ def get(
90
+ self,
91
+ link: Link,
92
+ package_name: Optional[str],
93
+ supported_tags: List[Tag],
94
+ ) -> Link:
95
+ """Returns a link to a cached item if it exists, otherwise returns the
96
+ passed link.
97
+ """
98
+ raise NotImplementedError()
99
+
100
+
101
+ class SimpleWheelCache(Cache):
102
+ """A cache of wheels for future installs."""
103
+
104
+ def __init__(self, cache_dir: str) -> None:
105
+ super().__init__(cache_dir)
106
+
107
+ def get_path_for_link(self, link: Link) -> str:
108
+ """Return a directory to store cached wheels for link
109
+
110
+ Because there are M wheels for any one sdist, we provide a directory
111
+ to cache them in, and then consult that directory when looking up
112
+ cache hits.
113
+
114
+ We only insert things into the cache if they have plausible version
115
+ numbers, so that we don't contaminate the cache with things that were
116
+ not unique. E.g. ./package might have dozens of installs done for it
117
+ and build a version of 0.0...and if we built and cached a wheel, we'd
118
+ end up using the same wheel even if the source has been edited.
119
+
120
+ :param link: The link of the sdist for which this will cache wheels.
121
+ """
122
+ parts = self._get_cache_path_parts(link)
123
+ assert self.cache_dir
124
+ # Store wheels within the root cache_dir
125
+ return os.path.join(self.cache_dir, "wheels", *parts)
126
+
127
+ def get(
128
+ self,
129
+ link: Link,
130
+ package_name: Optional[str],
131
+ supported_tags: List[Tag],
132
+ ) -> Link:
133
+ candidates = []
134
+
135
+ if not package_name:
136
+ return link
137
+
138
+ canonical_package_name = canonicalize_name(package_name)
139
+ for wheel_name, wheel_dir in self._get_candidates(link, canonical_package_name):
140
+ try:
141
+ wheel = Wheel(wheel_name)
142
+ except InvalidWheelFilename:
143
+ continue
144
+ if canonicalize_name(wheel.name) != canonical_package_name:
145
+ logger.debug(
146
+ "Ignoring cached wheel %s for %s as it "
147
+ "does not match the expected distribution name %s.",
148
+ wheel_name,
149
+ link,
150
+ package_name,
151
+ )
152
+ continue
153
+ if not wheel.supported(supported_tags):
154
+ # Built for a different python/arch/etc
155
+ continue
156
+ candidates.append(
157
+ (
158
+ wheel.support_index_min(supported_tags),
159
+ wheel_name,
160
+ wheel_dir,
161
+ )
162
+ )
163
+
164
+ if not candidates:
165
+ return link
166
+
167
+ _, wheel_name, wheel_dir = min(candidates)
168
+ return Link(path_to_url(os.path.join(wheel_dir, wheel_name)))
169
+
170
+
171
+ class EphemWheelCache(SimpleWheelCache):
172
+ """A SimpleWheelCache that creates it's own temporary cache directory"""
173
+
174
+ def __init__(self) -> None:
175
+ self._temp_dir = TempDirectory(
176
+ kind=tempdir_kinds.EPHEM_WHEEL_CACHE,
177
+ globally_managed=True,
178
+ )
179
+
180
+ super().__init__(self._temp_dir.path)
181
+
182
+
183
+ class CacheEntry:
184
+ def __init__(
185
+ self,
186
+ link: Link,
187
+ persistent: bool,
188
+ ):
189
+ self.link = link
190
+ self.persistent = persistent
191
+ self.origin: Optional[DirectUrl] = None
192
+ origin_direct_url_path = Path(self.link.file_path).parent / ORIGIN_JSON_NAME
193
+ if origin_direct_url_path.exists():
194
+ try:
195
+ self.origin = DirectUrl.from_json(
196
+ origin_direct_url_path.read_text(encoding="utf-8")
197
+ )
198
+ except Exception as e:
199
+ logger.warning(
200
+ "Ignoring invalid cache entry origin file %s for %s (%s)",
201
+ origin_direct_url_path,
202
+ link.filename,
203
+ e,
204
+ )
205
+
206
+
207
+ class WheelCache(Cache):
208
+ """Wraps EphemWheelCache and SimpleWheelCache into a single Cache
209
+
210
+ This Cache allows for gracefully degradation, using the ephem wheel cache
211
+ when a certain link is not found in the simple wheel cache first.
212
+ """
213
+
214
+ def __init__(self, cache_dir: str) -> None:
215
+ super().__init__(cache_dir)
216
+ self._wheel_cache = SimpleWheelCache(cache_dir)
217
+ self._ephem_cache = EphemWheelCache()
218
+
219
+ def get_path_for_link(self, link: Link) -> str:
220
+ return self._wheel_cache.get_path_for_link(link)
221
+
222
+ def get_ephem_path_for_link(self, link: Link) -> str:
223
+ return self._ephem_cache.get_path_for_link(link)
224
+
225
+ def get(
226
+ self,
227
+ link: Link,
228
+ package_name: Optional[str],
229
+ supported_tags: List[Tag],
230
+ ) -> Link:
231
+ cache_entry = self.get_cache_entry(link, package_name, supported_tags)
232
+ if cache_entry is None:
233
+ return link
234
+ return cache_entry.link
235
+
236
+ def get_cache_entry(
237
+ self,
238
+ link: Link,
239
+ package_name: Optional[str],
240
+ supported_tags: List[Tag],
241
+ ) -> Optional[CacheEntry]:
242
+ """Returns a CacheEntry with a link to a cached item if it exists or
243
+ None. The cache entry indicates if the item was found in the persistent
244
+ or ephemeral cache.
245
+ """
246
+ retval = self._wheel_cache.get(
247
+ link=link,
248
+ package_name=package_name,
249
+ supported_tags=supported_tags,
250
+ )
251
+ if retval is not link:
252
+ return CacheEntry(retval, persistent=True)
253
+
254
+ retval = self._ephem_cache.get(
255
+ link=link,
256
+ package_name=package_name,
257
+ supported_tags=supported_tags,
258
+ )
259
+ if retval is not link:
260
+ return CacheEntry(retval, persistent=False)
261
+
262
+ return None
263
+
264
+ @staticmethod
265
+ def record_download_origin(cache_dir: str, download_info: DirectUrl) -> None:
266
+ origin_path = Path(cache_dir) / ORIGIN_JSON_NAME
267
+ if origin_path.exists():
268
+ try:
269
+ origin = DirectUrl.from_json(origin_path.read_text(encoding="utf-8"))
270
+ except Exception as e:
271
+ logger.warning(
272
+ "Could not read origin file %s in cache entry (%s). "
273
+ "Will attempt to overwrite it.",
274
+ origin_path,
275
+ e,
276
+ )
277
+ else:
278
+ # TODO: use DirectUrl.equivalent when
279
+ # https://github.com/pypa/pip/pull/10564 is merged.
280
+ if origin.url != download_info.url:
281
+ logger.warning(
282
+ "Origin URL %s in cache entry %s does not match download URL "
283
+ "%s. This is likely a pip bug or a cache corruption issue. "
284
+ "Will overwrite it with the new value.",
285
+ origin.url,
286
+ cache_dir,
287
+ download_info.url,
288
+ )
289
+ origin_path.write_text(download_info.to_json(), encoding="utf-8")
.venv-1/Lib/site-packages/pip/_internal/cli/__init__.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ """Subpackage containing all of pip's command line interface related code"""
2
+
3
+ # This file intentionally does not import submodules
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (316 Bytes). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-313.pyc ADDED
Binary file (9.02 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-313.pyc ADDED
Binary file (10.5 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-313.pyc ADDED
Binary file (32 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-313.pyc ADDED
Binary file (1.91 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/index_command.cpython-313.pyc ADDED
Binary file (7.54 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-313.pyc ADDED
Binary file (2.34 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-313.pyc ADDED
Binary file (5.04 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-313.pyc ADDED
Binary file (15.4 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-313.pyc ADDED
Binary file (5.77 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-313.pyc ADDED
Binary file (13 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-313.pyc ADDED
Binary file (8.22 kB). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-313.pyc ADDED
Binary file (416 Bytes). View file
 
.venv-1/Lib/site-packages/pip/_internal/cli/autocompletion.py ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Logic that powers autocompletion installed by ``pip completion``."""
2
+
3
+ import optparse
4
+ import os
5
+ import sys
6
+ from itertools import chain
7
+ from typing import Any, Iterable, List, Optional
8
+
9
+ from pip._internal.cli.main_parser import create_main_parser
10
+ from pip._internal.commands import commands_dict, create_command
11
+ from pip._internal.metadata import get_default_environment
12
+
13
+
14
+ def autocomplete() -> None:
15
+ """Entry Point for completion of main and subcommand options."""
16
+ # Don't complete if user hasn't sourced bash_completion file.
17
+ if "PIP_AUTO_COMPLETE" not in os.environ:
18
+ return
19
+ # Don't complete if autocompletion environment variables
20
+ # are not present
21
+ if not os.environ.get("COMP_WORDS") or not os.environ.get("COMP_CWORD"):
22
+ return
23
+ cwords = os.environ["COMP_WORDS"].split()[1:]
24
+ cword = int(os.environ["COMP_CWORD"])
25
+ try:
26
+ current = cwords[cword - 1]
27
+ except IndexError:
28
+ current = ""
29
+
30
+ parser = create_main_parser()
31
+ subcommands = list(commands_dict)
32
+ options = []
33
+
34
+ # subcommand
35
+ subcommand_name: Optional[str] = None
36
+ for word in cwords:
37
+ if word in subcommands:
38
+ subcommand_name = word
39
+ break
40
+ # subcommand options
41
+ if subcommand_name is not None:
42
+ # special case: 'help' subcommand has no options
43
+ if subcommand_name == "help":
44
+ sys.exit(1)
45
+ # special case: list locally installed dists for show and uninstall
46
+ should_list_installed = not current.startswith("-") and subcommand_name in [
47
+ "show",
48
+ "uninstall",
49
+ ]
50
+ if should_list_installed:
51
+ env = get_default_environment()
52
+ lc = current.lower()
53
+ installed = [
54
+ dist.canonical_name
55
+ for dist in env.iter_installed_distributions(local_only=True)
56
+ if dist.canonical_name.startswith(lc)
57
+ and dist.canonical_name not in cwords[1:]
58
+ ]
59
+ # if there are no dists installed, fall back to option completion
60
+ if installed:
61
+ for dist in installed:
62
+ print(dist)
63
+ sys.exit(1)
64
+
65
+ should_list_installables = (
66
+ not current.startswith("-") and subcommand_name == "install"
67
+ )
68
+ if should_list_installables:
69
+ for path in auto_complete_paths(current, "path"):
70
+ print(path)
71
+ sys.exit(1)
72
+
73
+ subcommand = create_command(subcommand_name)
74
+
75
+ for opt in subcommand.parser.option_list_all:
76
+ if opt.help != optparse.SUPPRESS_HELP:
77
+ options += [
78
+ (opt_str, opt.nargs) for opt_str in opt._long_opts + opt._short_opts
79
+ ]
80
+
81
+ # filter out previously specified options from available options
82
+ prev_opts = [x.split("=")[0] for x in cwords[1 : cword - 1]]
83
+ options = [(x, v) for (x, v) in options if x not in prev_opts]
84
+ # filter options by current input
85
+ options = [(k, v) for k, v in options if k.startswith(current)]
86
+ # get completion type given cwords and available subcommand options
87
+ completion_type = get_path_completion_type(
88
+ cwords,
89
+ cword,
90
+ subcommand.parser.option_list_all,
91
+ )
92
+ # get completion files and directories if ``completion_type`` is
93
+ # ``<file>``, ``<dir>`` or ``<path>``
94
+ if completion_type:
95
+ paths = auto_complete_paths(current, completion_type)
96
+ options = [(path, 0) for path in paths]
97
+ for option in options:
98
+ opt_label = option[0]
99
+ # append '=' to options which require args
100
+ if option[1] and option[0][:2] == "--":
101
+ opt_label += "="
102
+ print(opt_label)
103
+ else:
104
+ # show main parser options only when necessary
105
+
106
+ opts = [i.option_list for i in parser.option_groups]
107
+ opts.append(parser.option_list)
108
+ flattened_opts = chain.from_iterable(opts)
109
+ if current.startswith("-"):
110
+ for opt in flattened_opts:
111
+ if opt.help != optparse.SUPPRESS_HELP:
112
+ subcommands += opt._long_opts + opt._short_opts
113
+ else:
114
+ # get completion type given cwords and all available options
115
+ completion_type = get_path_completion_type(cwords, cword, flattened_opts)
116
+ if completion_type:
117
+ subcommands = list(auto_complete_paths(current, completion_type))
118
+
119
+ print(" ".join([x for x in subcommands if x.startswith(current)]))
120
+ sys.exit(1)
121
+
122
+
123
+ def get_path_completion_type(
124
+ cwords: List[str], cword: int, opts: Iterable[Any]
125
+ ) -> Optional[str]:
126
+ """Get the type of path completion (``file``, ``dir``, ``path`` or None)
127
+
128
+ :param cwords: same as the environmental variable ``COMP_WORDS``
129
+ :param cword: same as the environmental variable ``COMP_CWORD``
130
+ :param opts: The available options to check
131
+ :return: path completion type (``file``, ``dir``, ``path`` or None)
132
+ """
133
+ if cword < 2 or not cwords[cword - 2].startswith("-"):
134
+ return None
135
+ for opt in opts:
136
+ if opt.help == optparse.SUPPRESS_HELP:
137
+ continue
138
+ for o in str(opt).split("/"):
139
+ if cwords[cword - 2].split("=")[0] == o:
140
+ if not opt.metavar or any(
141
+ x in ("path", "file", "dir") for x in opt.metavar.split("/")
142
+ ):
143
+ return opt.metavar
144
+ return None
145
+
146
+
147
+ def auto_complete_paths(current: str, completion_type: str) -> Iterable[str]:
148
+ """If ``completion_type`` is ``file`` or ``path``, list all regular files
149
+ and directories starting with ``current``; otherwise only list directories
150
+ starting with ``current``.
151
+
152
+ :param current: The word to be completed
153
+ :param completion_type: path completion type(``file``, ``path`` or ``dir``)
154
+ :return: A generator of regular files and/or directories
155
+ """
156
+ directory, filename = os.path.split(current)
157
+ current_path = os.path.abspath(directory)
158
+ # Don't complete paths if they can't be accessed
159
+ if not os.access(current_path, os.R_OK):
160
+ return
161
+ filename = os.path.normcase(filename)
162
+ # list all files that start with ``filename``
163
+ file_list = (
164
+ x for x in os.listdir(current_path) if os.path.normcase(x).startswith(filename)
165
+ )
166
+ for f in file_list:
167
+ opt = os.path.join(current_path, f)
168
+ comp_file = os.path.normcase(os.path.join(directory, f))
169
+ # complete regular files when there is not ``<dir>`` after option
170
+ # complete directories when there is ``<file>``, ``<path>`` or
171
+ # ``<dir>``after option
172
+ if completion_type != "dir" and os.path.isfile(opt):
173
+ yield comp_file
174
+ elif os.path.isdir(opt):
175
+ yield os.path.join(comp_file, "")
.venv-1/Lib/site-packages/pip/_internal/cli/base_command.py ADDED
@@ -0,0 +1,233 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Base Command class, and related routines"""
2
+
3
+ import logging
4
+ import logging.config
5
+ import optparse
6
+ import os
7
+ import sys
8
+ import traceback
9
+ from optparse import Values
10
+ from typing import List, Optional, Tuple
11
+
12
+ from pip._vendor.rich import reconfigure
13
+ from pip._vendor.rich import traceback as rich_traceback
14
+
15
+ from pip._internal.cli import cmdoptions
16
+ from pip._internal.cli.command_context import CommandContextMixIn
17
+ from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter
18
+ from pip._internal.cli.status_codes import (
19
+ ERROR,
20
+ PREVIOUS_BUILD_DIR_ERROR,
21
+ UNKNOWN_ERROR,
22
+ VIRTUALENV_NOT_FOUND,
23
+ )
24
+ from pip._internal.exceptions import (
25
+ BadCommand,
26
+ CommandError,
27
+ DiagnosticPipError,
28
+ InstallationError,
29
+ NetworkConnectionError,
30
+ PreviousBuildDirError,
31
+ )
32
+ from pip._internal.utils.filesystem import check_path_owner
33
+ from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging
34
+ from pip._internal.utils.misc import get_prog, normalize_path
35
+ from pip._internal.utils.temp_dir import TempDirectoryTypeRegistry as TempDirRegistry
36
+ from pip._internal.utils.temp_dir import global_tempdir_manager, tempdir_registry
37
+ from pip._internal.utils.virtualenv import running_under_virtualenv
38
+
39
+ __all__ = ["Command"]
40
+
41
+ logger = logging.getLogger(__name__)
42
+
43
+
44
+ class Command(CommandContextMixIn):
45
+ usage: str = ""
46
+ ignore_require_venv: bool = False
47
+
48
+ def __init__(self, name: str, summary: str, isolated: bool = False) -> None:
49
+ super().__init__()
50
+
51
+ self.name = name
52
+ self.summary = summary
53
+ self.parser = ConfigOptionParser(
54
+ usage=self.usage,
55
+ prog=f"{get_prog()} {name}",
56
+ formatter=UpdatingDefaultsHelpFormatter(),
57
+ add_help_option=False,
58
+ name=name,
59
+ description=self.__doc__,
60
+ isolated=isolated,
61
+ )
62
+
63
+ self.tempdir_registry: Optional[TempDirRegistry] = None
64
+
65
+ # Commands should add options to this option group
66
+ optgroup_name = f"{self.name.capitalize()} Options"
67
+ self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name)
68
+
69
+ # Add the general options
70
+ gen_opts = cmdoptions.make_option_group(
71
+ cmdoptions.general_group,
72
+ self.parser,
73
+ )
74
+ self.parser.add_option_group(gen_opts)
75
+
76
+ self.add_options()
77
+
78
+ def add_options(self) -> None:
79
+ pass
80
+
81
+ def handle_pip_version_check(self, options: Values) -> None:
82
+ """
83
+ This is a no-op so that commands by default do not do the pip version
84
+ check.
85
+ """
86
+ # Make sure we do the pip version check if the index_group options
87
+ # are present.
88
+ assert not hasattr(options, "no_index")
89
+
90
+ def run(self, options: Values, args: List[str]) -> int:
91
+ raise NotImplementedError
92
+
93
+ def _run_wrapper(self, level_number: int, options: Values, args: List[str]) -> int:
94
+ def _inner_run() -> int:
95
+ try:
96
+ return self.run(options, args)
97
+ finally:
98
+ self.handle_pip_version_check(options)
99
+
100
+ if options.debug_mode:
101
+ rich_traceback.install(show_locals=True)
102
+ return _inner_run()
103
+
104
+ try:
105
+ status = _inner_run()
106
+ assert isinstance(status, int)
107
+ return status
108
+ except DiagnosticPipError as exc:
109
+ logger.error("%s", exc, extra={"rich": True})
110
+ logger.debug("Exception information:", exc_info=True)
111
+
112
+ return ERROR
113
+ except PreviousBuildDirError as exc:
114
+ logger.critical(str(exc))
115
+ logger.debug("Exception information:", exc_info=True)
116
+
117
+ return PREVIOUS_BUILD_DIR_ERROR
118
+ except (
119
+ InstallationError,
120
+ BadCommand,
121
+ NetworkConnectionError,
122
+ ) as exc:
123
+ logger.critical(str(exc))
124
+ logger.debug("Exception information:", exc_info=True)
125
+
126
+ return ERROR
127
+ except CommandError as exc:
128
+ logger.critical("%s", exc)
129
+ logger.debug("Exception information:", exc_info=True)
130
+
131
+ return ERROR
132
+ except BrokenStdoutLoggingError:
133
+ # Bypass our logger and write any remaining messages to
134
+ # stderr because stdout no longer works.
135
+ print("ERROR: Pipe to stdout was broken", file=sys.stderr)
136
+ if level_number <= logging.DEBUG:
137
+ traceback.print_exc(file=sys.stderr)
138
+
139
+ return ERROR
140
+ except KeyboardInterrupt:
141
+ logger.critical("Operation cancelled by user")
142
+ logger.debug("Exception information:", exc_info=True)
143
+
144
+ return ERROR
145
+ except BaseException:
146
+ logger.critical("Exception:", exc_info=True)
147
+
148
+ return UNKNOWN_ERROR
149
+
150
+ def parse_args(self, args: List[str]) -> Tuple[Values, List[str]]:
151
+ # factored out for testability
152
+ return self.parser.parse_args(args)
153
+
154
+ def main(self, args: List[str]) -> int:
155
+ try:
156
+ with self.main_context():
157
+ return self._main(args)
158
+ finally:
159
+ logging.shutdown()
160
+
161
+ def _main(self, args: List[str]) -> int:
162
+ # We must initialize this before the tempdir manager, otherwise the
163
+ # configuration would not be accessible by the time we clean up the
164
+ # tempdir manager.
165
+ self.tempdir_registry = self.enter_context(tempdir_registry())
166
+ # Intentionally set as early as possible so globally-managed temporary
167
+ # directories are available to the rest of the code.
168
+ self.enter_context(global_tempdir_manager())
169
+
170
+ options, args = self.parse_args(args)
171
+
172
+ # Set verbosity so that it can be used elsewhere.
173
+ self.verbosity = options.verbose - options.quiet
174
+ if options.debug_mode:
175
+ self.verbosity = 2
176
+
177
+ reconfigure(no_color=options.no_color)
178
+ level_number = setup_logging(
179
+ verbosity=self.verbosity,
180
+ no_color=options.no_color,
181
+ user_log_file=options.log,
182
+ )
183
+
184
+ always_enabled_features = set(options.features_enabled) & set(
185
+ cmdoptions.ALWAYS_ENABLED_FEATURES
186
+ )
187
+ if always_enabled_features:
188
+ logger.warning(
189
+ "The following features are always enabled: %s. ",
190
+ ", ".join(sorted(always_enabled_features)),
191
+ )
192
+
193
+ # Make sure that the --python argument isn't specified after the
194
+ # subcommand. We can tell, because if --python was specified,
195
+ # we should only reach this point if we're running in the created
196
+ # subprocess, which has the _PIP_RUNNING_IN_SUBPROCESS environment
197
+ # variable set.
198
+ if options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ:
199
+ logger.critical(
200
+ "The --python option must be placed before the pip subcommand name"
201
+ )
202
+ sys.exit(ERROR)
203
+
204
+ # TODO: Try to get these passing down from the command?
205
+ # without resorting to os.environ to hold these.
206
+ # This also affects isolated builds and it should.
207
+
208
+ if options.no_input:
209
+ os.environ["PIP_NO_INPUT"] = "1"
210
+
211
+ if options.exists_action:
212
+ os.environ["PIP_EXISTS_ACTION"] = " ".join(options.exists_action)
213
+
214
+ if options.require_venv and not self.ignore_require_venv:
215
+ # If a venv is required check if it can really be found
216
+ if not running_under_virtualenv():
217
+ logger.critical("Could not find an activated virtualenv (required).")
218
+ sys.exit(VIRTUALENV_NOT_FOUND)
219
+
220
+ if options.cache_dir:
221
+ options.cache_dir = normalize_path(options.cache_dir)
222
+ if not check_path_owner(options.cache_dir):
223
+ logger.warning(
224
+ "The directory '%s' or its parent directory is not owned "
225
+ "or is not writable by the current user. The cache "
226
+ "has been disabled. Check the permissions and owner of "
227
+ "that directory. If executing pip with sudo, you should "
228
+ "use sudo's -H flag.",
229
+ options.cache_dir,
230
+ )
231
+ options.cache_dir = None
232
+
233
+ return self._run_wrapper(level_number, options, args)
.venv-1/Lib/site-packages/pip/_internal/cli/cmdoptions.py ADDED
@@ -0,0 +1,1133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ shared options and groups
3
+
4
+ The principle here is to define options once, but *not* instantiate them
5
+ globally. One reason being that options with action='append' can carry state
6
+ between parses. pip parses general options twice internally, and shouldn't
7
+ pass on state. To be consistent, all options will follow this design.
8
+ """
9
+
10
+ # The following comment should be removed at some point in the future.
11
+ # mypy: strict-optional=False
12
+
13
+ import importlib.util
14
+ import logging
15
+ import os
16
+ import pathlib
17
+ import textwrap
18
+ from functools import partial
19
+ from optparse import SUPPRESS_HELP, Option, OptionGroup, OptionParser, Values
20
+ from textwrap import dedent
21
+ from typing import Any, Callable, Dict, Optional, Tuple
22
+
23
+ from pip._vendor.packaging.utils import canonicalize_name
24
+
25
+ from pip._internal.cli.parser import ConfigOptionParser
26
+ from pip._internal.exceptions import CommandError
27
+ from pip._internal.locations import USER_CACHE_DIR, get_src_prefix
28
+ from pip._internal.models.format_control import FormatControl
29
+ from pip._internal.models.index import PyPI
30
+ from pip._internal.models.target_python import TargetPython
31
+ from pip._internal.utils.hashes import STRONG_HASHES
32
+ from pip._internal.utils.misc import strtobool
33
+
34
+ logger = logging.getLogger(__name__)
35
+
36
+
37
+ def raise_option_error(parser: OptionParser, option: Option, msg: str) -> None:
38
+ """
39
+ Raise an option parsing error using parser.error().
40
+
41
+ Args:
42
+ parser: an OptionParser instance.
43
+ option: an Option instance.
44
+ msg: the error text.
45
+ """
46
+ msg = f"{option} error: {msg}"
47
+ msg = textwrap.fill(" ".join(msg.split()))
48
+ parser.error(msg)
49
+
50
+
51
+ def make_option_group(group: Dict[str, Any], parser: ConfigOptionParser) -> OptionGroup:
52
+ """
53
+ Return an OptionGroup object
54
+ group -- assumed to be dict with 'name' and 'options' keys
55
+ parser -- an optparse Parser
56
+ """
57
+ option_group = OptionGroup(parser, group["name"])
58
+ for option in group["options"]:
59
+ option_group.add_option(option())
60
+ return option_group
61
+
62
+
63
+ def check_dist_restriction(options: Values, check_target: bool = False) -> None:
64
+ """Function for determining if custom platform options are allowed.
65
+
66
+ :param options: The OptionParser options.
67
+ :param check_target: Whether or not to check if --target is being used.
68
+ """
69
+ dist_restriction_set = any(
70
+ [
71
+ options.python_version,
72
+ options.platforms,
73
+ options.abis,
74
+ options.implementation,
75
+ ]
76
+ )
77
+
78
+ binary_only = FormatControl(set(), {":all:"})
79
+ sdist_dependencies_allowed = (
80
+ options.format_control != binary_only and not options.ignore_dependencies
81
+ )
82
+
83
+ # Installations or downloads using dist restrictions must not combine
84
+ # source distributions and dist-specific wheels, as they are not
85
+ # guaranteed to be locally compatible.
86
+ if dist_restriction_set and sdist_dependencies_allowed:
87
+ raise CommandError(
88
+ "When restricting platform and interpreter constraints using "
89
+ "--python-version, --platform, --abi, or --implementation, "
90
+ "either --no-deps must be set, or --only-binary=:all: must be "
91
+ "set and --no-binary must not be set (or must be set to "
92
+ ":none:)."
93
+ )
94
+
95
+ if check_target:
96
+ if not options.dry_run and dist_restriction_set and not options.target_dir:
97
+ raise CommandError(
98
+ "Can not use any platform or abi specific options unless "
99
+ "installing via '--target' or using '--dry-run'"
100
+ )
101
+
102
+
103
+ def _path_option_check(option: Option, opt: str, value: str) -> str:
104
+ return os.path.expanduser(value)
105
+
106
+
107
+ def _package_name_option_check(option: Option, opt: str, value: str) -> str:
108
+ return canonicalize_name(value)
109
+
110
+
111
+ class PipOption(Option):
112
+ TYPES = Option.TYPES + ("path", "package_name")
113
+ TYPE_CHECKER = Option.TYPE_CHECKER.copy()
114
+ TYPE_CHECKER["package_name"] = _package_name_option_check
115
+ TYPE_CHECKER["path"] = _path_option_check
116
+
117
+
118
+ ###########
119
+ # options #
120
+ ###########
121
+
122
+ help_: Callable[..., Option] = partial(
123
+ Option,
124
+ "-h",
125
+ "--help",
126
+ dest="help",
127
+ action="help",
128
+ help="Show help.",
129
+ )
130
+
131
+ debug_mode: Callable[..., Option] = partial(
132
+ Option,
133
+ "--debug",
134
+ dest="debug_mode",
135
+ action="store_true",
136
+ default=False,
137
+ help=(
138
+ "Let unhandled exceptions propagate outside the main subroutine, "
139
+ "instead of logging them to stderr."
140
+ ),
141
+ )
142
+
143
+ isolated_mode: Callable[..., Option] = partial(
144
+ Option,
145
+ "--isolated",
146
+ dest="isolated_mode",
147
+ action="store_true",
148
+ default=False,
149
+ help=(
150
+ "Run pip in an isolated mode, ignoring environment variables and user "
151
+ "configuration."
152
+ ),
153
+ )
154
+
155
+ require_virtualenv: Callable[..., Option] = partial(
156
+ Option,
157
+ "--require-virtualenv",
158
+ "--require-venv",
159
+ dest="require_venv",
160
+ action="store_true",
161
+ default=False,
162
+ help=(
163
+ "Allow pip to only run in a virtual environment; "
164
+ "exit with an error otherwise."
165
+ ),
166
+ )
167
+
168
+ override_externally_managed: Callable[..., Option] = partial(
169
+ Option,
170
+ "--break-system-packages",
171
+ dest="override_externally_managed",
172
+ action="store_true",
173
+ help="Allow pip to modify an EXTERNALLY-MANAGED Python installation",
174
+ )
175
+
176
+ python: Callable[..., Option] = partial(
177
+ Option,
178
+ "--python",
179
+ dest="python",
180
+ help="Run pip with the specified Python interpreter.",
181
+ )
182
+
183
+ verbose: Callable[..., Option] = partial(
184
+ Option,
185
+ "-v",
186
+ "--verbose",
187
+ dest="verbose",
188
+ action="count",
189
+ default=0,
190
+ help="Give more output. Option is additive, and can be used up to 3 times.",
191
+ )
192
+
193
+ no_color: Callable[..., Option] = partial(
194
+ Option,
195
+ "--no-color",
196
+ dest="no_color",
197
+ action="store_true",
198
+ default=False,
199
+ help="Suppress colored output.",
200
+ )
201
+
202
+ version: Callable[..., Option] = partial(
203
+ Option,
204
+ "-V",
205
+ "--version",
206
+ dest="version",
207
+ action="store_true",
208
+ help="Show version and exit.",
209
+ )
210
+
211
+ quiet: Callable[..., Option] = partial(
212
+ Option,
213
+ "-q",
214
+ "--quiet",
215
+ dest="quiet",
216
+ action="count",
217
+ default=0,
218
+ help=(
219
+ "Give less output. Option is additive, and can be used up to 3"
220
+ " times (corresponding to WARNING, ERROR, and CRITICAL logging"
221
+ " levels)."
222
+ ),
223
+ )
224
+
225
+ progress_bar: Callable[..., Option] = partial(
226
+ Option,
227
+ "--progress-bar",
228
+ dest="progress_bar",
229
+ type="choice",
230
+ choices=["on", "off", "raw"],
231
+ default="on",
232
+ help="Specify whether the progress bar should be used [on, off, raw] (default: on)",
233
+ )
234
+
235
+ log: Callable[..., Option] = partial(
236
+ PipOption,
237
+ "--log",
238
+ "--log-file",
239
+ "--local-log",
240
+ dest="log",
241
+ metavar="path",
242
+ type="path",
243
+ help="Path to a verbose appending log.",
244
+ )
245
+
246
+ no_input: Callable[..., Option] = partial(
247
+ Option,
248
+ # Don't ask for input
249
+ "--no-input",
250
+ dest="no_input",
251
+ action="store_true",
252
+ default=False,
253
+ help="Disable prompting for input.",
254
+ )
255
+
256
+ keyring_provider: Callable[..., Option] = partial(
257
+ Option,
258
+ "--keyring-provider",
259
+ dest="keyring_provider",
260
+ choices=["auto", "disabled", "import", "subprocess"],
261
+ default="auto",
262
+ help=(
263
+ "Enable the credential lookup via the keyring library if user input is allowed."
264
+ " Specify which mechanism to use [auto, disabled, import, subprocess]."
265
+ " (default: %default)"
266
+ ),
267
+ )
268
+
269
+ proxy: Callable[..., Option] = partial(
270
+ Option,
271
+ "--proxy",
272
+ dest="proxy",
273
+ type="str",
274
+ default="",
275
+ help="Specify a proxy in the form scheme://[user:passwd@]proxy.server:port.",
276
+ )
277
+
278
+ retries: Callable[..., Option] = partial(
279
+ Option,
280
+ "--retries",
281
+ dest="retries",
282
+ type="int",
283
+ default=5,
284
+ help="Maximum attempts to establish a new HTTP connection. (default: %default)",
285
+ )
286
+
287
+ resume_retries: Callable[..., Option] = partial(
288
+ Option,
289
+ "--resume-retries",
290
+ dest="resume_retries",
291
+ type="int",
292
+ default=0,
293
+ help="Maximum attempts to resume or restart an incomplete download. "
294
+ "(default: %default)",
295
+ )
296
+
297
+ timeout: Callable[..., Option] = partial(
298
+ Option,
299
+ "--timeout",
300
+ "--default-timeout",
301
+ metavar="sec",
302
+ dest="timeout",
303
+ type="float",
304
+ default=15,
305
+ help="Set the socket timeout (default %default seconds).",
306
+ )
307
+
308
+
309
+ def exists_action() -> Option:
310
+ return Option(
311
+ # Option when path already exist
312
+ "--exists-action",
313
+ dest="exists_action",
314
+ type="choice",
315
+ choices=["s", "i", "w", "b", "a"],
316
+ default=[],
317
+ action="append",
318
+ metavar="action",
319
+ help="Default action when a path already exists: "
320
+ "(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.",
321
+ )
322
+
323
+
324
+ cert: Callable[..., Option] = partial(
325
+ PipOption,
326
+ "--cert",
327
+ dest="cert",
328
+ type="path",
329
+ metavar="path",
330
+ help=(
331
+ "Path to PEM-encoded CA certificate bundle. "
332
+ "If provided, overrides the default. "
333
+ "See 'SSL Certificate Verification' in pip documentation "
334
+ "for more information."
335
+ ),
336
+ )
337
+
338
+ client_cert: Callable[..., Option] = partial(
339
+ PipOption,
340
+ "--client-cert",
341
+ dest="client_cert",
342
+ type="path",
343
+ default=None,
344
+ metavar="path",
345
+ help="Path to SSL client certificate, a single file containing the "
346
+ "private key and the certificate in PEM format.",
347
+ )
348
+
349
+ index_url: Callable[..., Option] = partial(
350
+ Option,
351
+ "-i",
352
+ "--index-url",
353
+ "--pypi-url",
354
+ dest="index_url",
355
+ metavar="URL",
356
+ default=PyPI.simple_url,
357
+ help="Base URL of the Python Package Index (default %default). "
358
+ "This should point to a repository compliant with PEP 503 "
359
+ "(the simple repository API) or a local directory laid out "
360
+ "in the same format.",
361
+ )
362
+
363
+
364
+ def extra_index_url() -> Option:
365
+ return Option(
366
+ "--extra-index-url",
367
+ dest="extra_index_urls",
368
+ metavar="URL",
369
+ action="append",
370
+ default=[],
371
+ help="Extra URLs of package indexes to use in addition to "
372
+ "--index-url. Should follow the same rules as "
373
+ "--index-url.",
374
+ )
375
+
376
+
377
+ no_index: Callable[..., Option] = partial(
378
+ Option,
379
+ "--no-index",
380
+ dest="no_index",
381
+ action="store_true",
382
+ default=False,
383
+ help="Ignore package index (only looking at --find-links URLs instead).",
384
+ )
385
+
386
+
387
+ def find_links() -> Option:
388
+ return Option(
389
+ "-f",
390
+ "--find-links",
391
+ dest="find_links",
392
+ action="append",
393
+ default=[],
394
+ metavar="url",
395
+ help="If a URL or path to an html file, then parse for links to "
396
+ "archives such as sdist (.tar.gz) or wheel (.whl) files. "
397
+ "If a local path or file:// URL that's a directory, "
398
+ "then look for archives in the directory listing. "
399
+ "Links to VCS project URLs are not supported.",
400
+ )
401
+
402
+
403
+ def trusted_host() -> Option:
404
+ return Option(
405
+ "--trusted-host",
406
+ dest="trusted_hosts",
407
+ action="append",
408
+ metavar="HOSTNAME",
409
+ default=[],
410
+ help="Mark this host or host:port pair as trusted, even though it "
411
+ "does not have valid or any HTTPS.",
412
+ )
413
+
414
+
415
+ def constraints() -> Option:
416
+ return Option(
417
+ "-c",
418
+ "--constraint",
419
+ dest="constraints",
420
+ action="append",
421
+ default=[],
422
+ metavar="file",
423
+ help="Constrain versions using the given constraints file. "
424
+ "This option can be used multiple times.",
425
+ )
426
+
427
+
428
+ def requirements() -> Option:
429
+ return Option(
430
+ "-r",
431
+ "--requirement",
432
+ dest="requirements",
433
+ action="append",
434
+ default=[],
435
+ metavar="file",
436
+ help="Install from the given requirements file. "
437
+ "This option can be used multiple times.",
438
+ )
439
+
440
+
441
+ def editable() -> Option:
442
+ return Option(
443
+ "-e",
444
+ "--editable",
445
+ dest="editables",
446
+ action="append",
447
+ default=[],
448
+ metavar="path/url",
449
+ help=(
450
+ "Install a project in editable mode (i.e. setuptools "
451
+ '"develop mode") from a local project path or a VCS url.'
452
+ ),
453
+ )
454
+
455
+
456
+ def _handle_src(option: Option, opt_str: str, value: str, parser: OptionParser) -> None:
457
+ value = os.path.abspath(value)
458
+ setattr(parser.values, option.dest, value)
459
+
460
+
461
+ src: Callable[..., Option] = partial(
462
+ PipOption,
463
+ "--src",
464
+ "--source",
465
+ "--source-dir",
466
+ "--source-directory",
467
+ dest="src_dir",
468
+ type="path",
469
+ metavar="dir",
470
+ default=get_src_prefix(),
471
+ action="callback",
472
+ callback=_handle_src,
473
+ help="Directory to check out editable projects into. "
474
+ 'The default in a virtualenv is "<venv path>/src". '
475
+ 'The default for global installs is "<current dir>/src".',
476
+ )
477
+
478
+
479
+ def _get_format_control(values: Values, option: Option) -> Any:
480
+ """Get a format_control object."""
481
+ return getattr(values, option.dest)
482
+
483
+
484
+ def _handle_no_binary(
485
+ option: Option, opt_str: str, value: str, parser: OptionParser
486
+ ) -> None:
487
+ existing = _get_format_control(parser.values, option)
488
+ FormatControl.handle_mutual_excludes(
489
+ value,
490
+ existing.no_binary,
491
+ existing.only_binary,
492
+ )
493
+
494
+
495
+ def _handle_only_binary(
496
+ option: Option, opt_str: str, value: str, parser: OptionParser
497
+ ) -> None:
498
+ existing = _get_format_control(parser.values, option)
499
+ FormatControl.handle_mutual_excludes(
500
+ value,
501
+ existing.only_binary,
502
+ existing.no_binary,
503
+ )
504
+
505
+
506
+ def no_binary() -> Option:
507
+ format_control = FormatControl(set(), set())
508
+ return Option(
509
+ "--no-binary",
510
+ dest="format_control",
511
+ action="callback",
512
+ callback=_handle_no_binary,
513
+ type="str",
514
+ default=format_control,
515
+ help="Do not use binary packages. Can be supplied multiple times, and "
516
+ 'each time adds to the existing value. Accepts either ":all:" to '
517
+ 'disable all binary packages, ":none:" to empty the set (notice '
518
+ "the colons), or one or more package names with commas between "
519
+ "them (no colons). Note that some packages are tricky to compile "
520
+ "and may fail to install when this option is used on them.",
521
+ )
522
+
523
+
524
+ def only_binary() -> Option:
525
+ format_control = FormatControl(set(), set())
526
+ return Option(
527
+ "--only-binary",
528
+ dest="format_control",
529
+ action="callback",
530
+ callback=_handle_only_binary,
531
+ type="str",
532
+ default=format_control,
533
+ help="Do not use source packages. Can be supplied multiple times, and "
534
+ 'each time adds to the existing value. Accepts either ":all:" to '
535
+ 'disable all source packages, ":none:" to empty the set, or one '
536
+ "or more package names with commas between them. Packages "
537
+ "without binary distributions will fail to install when this "
538
+ "option is used on them.",
539
+ )
540
+
541
+
542
+ platforms: Callable[..., Option] = partial(
543
+ Option,
544
+ "--platform",
545
+ dest="platforms",
546
+ metavar="platform",
547
+ action="append",
548
+ default=None,
549
+ help=(
550
+ "Only use wheels compatible with <platform>. Defaults to the "
551
+ "platform of the running system. Use this option multiple times to "
552
+ "specify multiple platforms supported by the target interpreter."
553
+ ),
554
+ )
555
+
556
+
557
+ # This was made a separate function for unit-testing purposes.
558
+ def _convert_python_version(value: str) -> Tuple[Tuple[int, ...], Optional[str]]:
559
+ """
560
+ Convert a version string like "3", "37", or "3.7.3" into a tuple of ints.
561
+
562
+ :return: A 2-tuple (version_info, error_msg), where `error_msg` is
563
+ non-None if and only if there was a parsing error.
564
+ """
565
+ if not value:
566
+ # The empty string is the same as not providing a value.
567
+ return (None, None)
568
+
569
+ parts = value.split(".")
570
+ if len(parts) > 3:
571
+ return ((), "at most three version parts are allowed")
572
+
573
+ if len(parts) == 1:
574
+ # Then we are in the case of "3" or "37".
575
+ value = parts[0]
576
+ if len(value) > 1:
577
+ parts = [value[0], value[1:]]
578
+
579
+ try:
580
+ version_info = tuple(int(part) for part in parts)
581
+ except ValueError:
582
+ return ((), "each version part must be an integer")
583
+
584
+ return (version_info, None)
585
+
586
+
587
+ def _handle_python_version(
588
+ option: Option, opt_str: str, value: str, parser: OptionParser
589
+ ) -> None:
590
+ """
591
+ Handle a provided --python-version value.
592
+ """
593
+ version_info, error_msg = _convert_python_version(value)
594
+ if error_msg is not None:
595
+ msg = f"invalid --python-version value: {value!r}: {error_msg}"
596
+ raise_option_error(parser, option=option, msg=msg)
597
+
598
+ parser.values.python_version = version_info
599
+
600
+
601
+ python_version: Callable[..., Option] = partial(
602
+ Option,
603
+ "--python-version",
604
+ dest="python_version",
605
+ metavar="python_version",
606
+ action="callback",
607
+ callback=_handle_python_version,
608
+ type="str",
609
+ default=None,
610
+ help=dedent(
611
+ """\
612
+ The Python interpreter version to use for wheel and "Requires-Python"
613
+ compatibility checks. Defaults to a version derived from the running
614
+ interpreter. The version can be specified using up to three dot-separated
615
+ integers (e.g. "3" for 3.0.0, "3.7" for 3.7.0, or "3.7.3"). A major-minor
616
+ version can also be given as a string without dots (e.g. "37" for 3.7.0).
617
+ """
618
+ ),
619
+ )
620
+
621
+
622
+ implementation: Callable[..., Option] = partial(
623
+ Option,
624
+ "--implementation",
625
+ dest="implementation",
626
+ metavar="implementation",
627
+ default=None,
628
+ help=(
629
+ "Only use wheels compatible with Python "
630
+ "implementation <implementation>, e.g. 'pp', 'jy', 'cp', "
631
+ " or 'ip'. If not specified, then the current "
632
+ "interpreter implementation is used. Use 'py' to force "
633
+ "implementation-agnostic wheels."
634
+ ),
635
+ )
636
+
637
+
638
+ abis: Callable[..., Option] = partial(
639
+ Option,
640
+ "--abi",
641
+ dest="abis",
642
+ metavar="abi",
643
+ action="append",
644
+ default=None,
645
+ help=(
646
+ "Only use wheels compatible with Python abi <abi>, e.g. 'pypy_41'. "
647
+ "If not specified, then the current interpreter abi tag is used. "
648
+ "Use this option multiple times to specify multiple abis supported "
649
+ "by the target interpreter. Generally you will need to specify "
650
+ "--implementation, --platform, and --python-version when using this "
651
+ "option."
652
+ ),
653
+ )
654
+
655
+
656
+ def add_target_python_options(cmd_opts: OptionGroup) -> None:
657
+ cmd_opts.add_option(platforms())
658
+ cmd_opts.add_option(python_version())
659
+ cmd_opts.add_option(implementation())
660
+ cmd_opts.add_option(abis())
661
+
662
+
663
+ def make_target_python(options: Values) -> TargetPython:
664
+ target_python = TargetPython(
665
+ platforms=options.platforms,
666
+ py_version_info=options.python_version,
667
+ abis=options.abis,
668
+ implementation=options.implementation,
669
+ )
670
+
671
+ return target_python
672
+
673
+
674
+ def prefer_binary() -> Option:
675
+ return Option(
676
+ "--prefer-binary",
677
+ dest="prefer_binary",
678
+ action="store_true",
679
+ default=False,
680
+ help=(
681
+ "Prefer binary packages over source packages, even if the "
682
+ "source packages are newer."
683
+ ),
684
+ )
685
+
686
+
687
+ cache_dir: Callable[..., Option] = partial(
688
+ PipOption,
689
+ "--cache-dir",
690
+ dest="cache_dir",
691
+ default=USER_CACHE_DIR,
692
+ metavar="dir",
693
+ type="path",
694
+ help="Store the cache data in <dir>.",
695
+ )
696
+
697
+
698
+ def _handle_no_cache_dir(
699
+ option: Option, opt: str, value: str, parser: OptionParser
700
+ ) -> None:
701
+ """
702
+ Process a value provided for the --no-cache-dir option.
703
+
704
+ This is an optparse.Option callback for the --no-cache-dir option.
705
+ """
706
+ # The value argument will be None if --no-cache-dir is passed via the
707
+ # command-line, since the option doesn't accept arguments. However,
708
+ # the value can be non-None if the option is triggered e.g. by an
709
+ # environment variable, like PIP_NO_CACHE_DIR=true.
710
+ if value is not None:
711
+ # Then parse the string value to get argument error-checking.
712
+ try:
713
+ strtobool(value)
714
+ except ValueError as exc:
715
+ raise_option_error(parser, option=option, msg=str(exc))
716
+
717
+ # Originally, setting PIP_NO_CACHE_DIR to a value that strtobool()
718
+ # converted to 0 (like "false" or "no") caused cache_dir to be disabled
719
+ # rather than enabled (logic would say the latter). Thus, we disable
720
+ # the cache directory not just on values that parse to True, but (for
721
+ # backwards compatibility reasons) also on values that parse to False.
722
+ # In other words, always set it to False if the option is provided in
723
+ # some (valid) form.
724
+ parser.values.cache_dir = False
725
+
726
+
727
+ no_cache: Callable[..., Option] = partial(
728
+ Option,
729
+ "--no-cache-dir",
730
+ dest="cache_dir",
731
+ action="callback",
732
+ callback=_handle_no_cache_dir,
733
+ help="Disable the cache.",
734
+ )
735
+
736
+ no_deps: Callable[..., Option] = partial(
737
+ Option,
738
+ "--no-deps",
739
+ "--no-dependencies",
740
+ dest="ignore_dependencies",
741
+ action="store_true",
742
+ default=False,
743
+ help="Don't install package dependencies.",
744
+ )
745
+
746
+
747
+ def _handle_dependency_group(
748
+ option: Option, opt: str, value: str, parser: OptionParser
749
+ ) -> None:
750
+ """
751
+ Process a value provided for the --group option.
752
+
753
+ Splits on the rightmost ":", and validates that the path (if present) ends
754
+ in `pyproject.toml`. Defaults the path to `pyproject.toml` when one is not given.
755
+
756
+ `:` cannot appear in dependency group names, so this is a safe and simple parse.
757
+
758
+ This is an optparse.Option callback for the dependency_groups option.
759
+ """
760
+ path, sep, groupname = value.rpartition(":")
761
+ if not sep:
762
+ path = "pyproject.toml"
763
+ else:
764
+ # check for 'pyproject.toml' filenames using pathlib
765
+ if pathlib.PurePath(path).name != "pyproject.toml":
766
+ msg = "group paths use 'pyproject.toml' filenames"
767
+ raise_option_error(parser, option=option, msg=msg)
768
+
769
+ parser.values.dependency_groups.append((path, groupname))
770
+
771
+
772
+ dependency_groups: Callable[..., Option] = partial(
773
+ Option,
774
+ "--group",
775
+ dest="dependency_groups",
776
+ default=[],
777
+ type=str,
778
+ action="callback",
779
+ callback=_handle_dependency_group,
780
+ metavar="[path:]group",
781
+ help='Install a named dependency-group from a "pyproject.toml" file. '
782
+ 'If a path is given, the name of the file must be "pyproject.toml". '
783
+ 'Defaults to using "pyproject.toml" in the current directory.',
784
+ )
785
+
786
+ ignore_requires_python: Callable[..., Option] = partial(
787
+ Option,
788
+ "--ignore-requires-python",
789
+ dest="ignore_requires_python",
790
+ action="store_true",
791
+ help="Ignore the Requires-Python information.",
792
+ )
793
+
794
+ no_build_isolation: Callable[..., Option] = partial(
795
+ Option,
796
+ "--no-build-isolation",
797
+ dest="build_isolation",
798
+ action="store_false",
799
+ default=True,
800
+ help="Disable isolation when building a modern source distribution. "
801
+ "Build dependencies specified by PEP 518 must be already installed "
802
+ "if this option is used.",
803
+ )
804
+
805
+ check_build_deps: Callable[..., Option] = partial(
806
+ Option,
807
+ "--check-build-dependencies",
808
+ dest="check_build_deps",
809
+ action="store_true",
810
+ default=False,
811
+ help="Check the build dependencies when PEP517 is used.",
812
+ )
813
+
814
+
815
+ def _handle_no_use_pep517(
816
+ option: Option, opt: str, value: str, parser: OptionParser
817
+ ) -> None:
818
+ """
819
+ Process a value provided for the --no-use-pep517 option.
820
+
821
+ This is an optparse.Option callback for the no_use_pep517 option.
822
+ """
823
+ # Since --no-use-pep517 doesn't accept arguments, the value argument
824
+ # will be None if --no-use-pep517 is passed via the command-line.
825
+ # However, the value can be non-None if the option is triggered e.g.
826
+ # by an environment variable, for example "PIP_NO_USE_PEP517=true".
827
+ if value is not None:
828
+ msg = """A value was passed for --no-use-pep517,
829
+ probably using either the PIP_NO_USE_PEP517 environment variable
830
+ or the "no-use-pep517" config file option. Use an appropriate value
831
+ of the PIP_USE_PEP517 environment variable or the "use-pep517"
832
+ config file option instead.
833
+ """
834
+ raise_option_error(parser, option=option, msg=msg)
835
+
836
+ # If user doesn't wish to use pep517, we check if setuptools is installed
837
+ # and raise error if it is not.
838
+ packages = ("setuptools",)
839
+ if not all(importlib.util.find_spec(package) for package in packages):
840
+ msg = (
841
+ f"It is not possible to use --no-use-pep517 "
842
+ f"without {' and '.join(packages)} installed."
843
+ )
844
+ raise_option_error(parser, option=option, msg=msg)
845
+
846
+ # Otherwise, --no-use-pep517 was passed via the command-line.
847
+ parser.values.use_pep517 = False
848
+
849
+
850
+ use_pep517: Any = partial(
851
+ Option,
852
+ "--use-pep517",
853
+ dest="use_pep517",
854
+ action="store_true",
855
+ default=None,
856
+ help="Use PEP 517 for building source distributions "
857
+ "(use --no-use-pep517 to force legacy behaviour).",
858
+ )
859
+
860
+ no_use_pep517: Any = partial(
861
+ Option,
862
+ "--no-use-pep517",
863
+ dest="use_pep517",
864
+ action="callback",
865
+ callback=_handle_no_use_pep517,
866
+ default=None,
867
+ help=SUPPRESS_HELP,
868
+ )
869
+
870
+
871
+ def _handle_config_settings(
872
+ option: Option, opt_str: str, value: str, parser: OptionParser
873
+ ) -> None:
874
+ key, sep, val = value.partition("=")
875
+ if sep != "=":
876
+ parser.error(f"Arguments to {opt_str} must be of the form KEY=VAL")
877
+ dest = getattr(parser.values, option.dest)
878
+ if dest is None:
879
+ dest = {}
880
+ setattr(parser.values, option.dest, dest)
881
+ if key in dest:
882
+ if isinstance(dest[key], list):
883
+ dest[key].append(val)
884
+ else:
885
+ dest[key] = [dest[key], val]
886
+ else:
887
+ dest[key] = val
888
+
889
+
890
+ config_settings: Callable[..., Option] = partial(
891
+ Option,
892
+ "-C",
893
+ "--config-settings",
894
+ dest="config_settings",
895
+ type=str,
896
+ action="callback",
897
+ callback=_handle_config_settings,
898
+ metavar="settings",
899
+ help="Configuration settings to be passed to the PEP 517 build backend. "
900
+ "Settings take the form KEY=VALUE. Use multiple --config-settings options "
901
+ "to pass multiple keys to the backend.",
902
+ )
903
+
904
+ build_options: Callable[..., Option] = partial(
905
+ Option,
906
+ "--build-option",
907
+ dest="build_options",
908
+ metavar="options",
909
+ action="append",
910
+ help="Extra arguments to be supplied to 'setup.py bdist_wheel'.",
911
+ )
912
+
913
+ global_options: Callable[..., Option] = partial(
914
+ Option,
915
+ "--global-option",
916
+ dest="global_options",
917
+ action="append",
918
+ metavar="options",
919
+ help="Extra global options to be supplied to the setup.py "
920
+ "call before the install or bdist_wheel command.",
921
+ )
922
+
923
+ no_clean: Callable[..., Option] = partial(
924
+ Option,
925
+ "--no-clean",
926
+ action="store_true",
927
+ default=False,
928
+ help="Don't clean up build directories.",
929
+ )
930
+
931
+ pre: Callable[..., Option] = partial(
932
+ Option,
933
+ "--pre",
934
+ action="store_true",
935
+ default=False,
936
+ help="Include pre-release and development versions. By default, "
937
+ "pip only finds stable versions.",
938
+ )
939
+
940
+ json: Callable[..., Option] = partial(
941
+ Option,
942
+ "--json",
943
+ action="store_true",
944
+ default=False,
945
+ help="Output data in a machine-readable JSON format.",
946
+ )
947
+
948
+ disable_pip_version_check: Callable[..., Option] = partial(
949
+ Option,
950
+ "--disable-pip-version-check",
951
+ dest="disable_pip_version_check",
952
+ action="store_true",
953
+ default=False,
954
+ help="Don't periodically check PyPI to determine whether a new version "
955
+ "of pip is available for download. Implied with --no-index.",
956
+ )
957
+
958
+ root_user_action: Callable[..., Option] = partial(
959
+ Option,
960
+ "--root-user-action",
961
+ dest="root_user_action",
962
+ default="warn",
963
+ choices=["warn", "ignore"],
964
+ help="Action if pip is run as a root user [warn, ignore] (default: warn)",
965
+ )
966
+
967
+
968
+ def _handle_merge_hash(
969
+ option: Option, opt_str: str, value: str, parser: OptionParser
970
+ ) -> None:
971
+ """Given a value spelled "algo:digest", append the digest to a list
972
+ pointed to in a dict by the algo name."""
973
+ if not parser.values.hashes:
974
+ parser.values.hashes = {}
975
+ try:
976
+ algo, digest = value.split(":", 1)
977
+ except ValueError:
978
+ parser.error(
979
+ f"Arguments to {opt_str} must be a hash name "
980
+ "followed by a value, like --hash=sha256:"
981
+ "abcde..."
982
+ )
983
+ if algo not in STRONG_HASHES:
984
+ parser.error(
985
+ "Allowed hash algorithms for {} are {}.".format(
986
+ opt_str, ", ".join(STRONG_HASHES)
987
+ )
988
+ )
989
+ parser.values.hashes.setdefault(algo, []).append(digest)
990
+
991
+
992
+ hash: Callable[..., Option] = partial(
993
+ Option,
994
+ "--hash",
995
+ # Hash values eventually end up in InstallRequirement.hashes due to
996
+ # __dict__ copying in process_line().
997
+ dest="hashes",
998
+ action="callback",
999
+ callback=_handle_merge_hash,
1000
+ type="string",
1001
+ help="Verify that the package's archive matches this "
1002
+ "hash before installing. Example: --hash=sha256:abcdef...",
1003
+ )
1004
+
1005
+
1006
+ require_hashes: Callable[..., Option] = partial(
1007
+ Option,
1008
+ "--require-hashes",
1009
+ dest="require_hashes",
1010
+ action="store_true",
1011
+ default=False,
1012
+ help="Require a hash to check each requirement against, for "
1013
+ "repeatable installs. This option is implied when any package in a "
1014
+ "requirements file has a --hash option.",
1015
+ )
1016
+
1017
+
1018
+ list_path: Callable[..., Option] = partial(
1019
+ PipOption,
1020
+ "--path",
1021
+ dest="path",
1022
+ type="path",
1023
+ action="append",
1024
+ help="Restrict to the specified installation path for listing "
1025
+ "packages (can be used multiple times).",
1026
+ )
1027
+
1028
+
1029
+ def check_list_path_option(options: Values) -> None:
1030
+ if options.path and (options.user or options.local):
1031
+ raise CommandError("Cannot combine '--path' with '--user' or '--local'")
1032
+
1033
+
1034
+ list_exclude: Callable[..., Option] = partial(
1035
+ PipOption,
1036
+ "--exclude",
1037
+ dest="excludes",
1038
+ action="append",
1039
+ metavar="package",
1040
+ type="package_name",
1041
+ help="Exclude specified package from the output",
1042
+ )
1043
+
1044
+
1045
+ no_python_version_warning: Callable[..., Option] = partial(
1046
+ Option,
1047
+ "--no-python-version-warning",
1048
+ dest="no_python_version_warning",
1049
+ action="store_true",
1050
+ default=False,
1051
+ help=SUPPRESS_HELP, # No-op, a hold-over from the Python 2->3 transition.
1052
+ )
1053
+
1054
+
1055
+ # Features that are now always on. A warning is printed if they are used.
1056
+ ALWAYS_ENABLED_FEATURES = [
1057
+ "truststore", # always on since 24.2
1058
+ "no-binary-enable-wheel-cache", # always on since 23.1
1059
+ ]
1060
+
1061
+ use_new_feature: Callable[..., Option] = partial(
1062
+ Option,
1063
+ "--use-feature",
1064
+ dest="features_enabled",
1065
+ metavar="feature",
1066
+ action="append",
1067
+ default=[],
1068
+ choices=[
1069
+ "fast-deps",
1070
+ ]
1071
+ + ALWAYS_ENABLED_FEATURES,
1072
+ help="Enable new functionality, that may be backward incompatible.",
1073
+ )
1074
+
1075
+ use_deprecated_feature: Callable[..., Option] = partial(
1076
+ Option,
1077
+ "--use-deprecated",
1078
+ dest="deprecated_features_enabled",
1079
+ metavar="feature",
1080
+ action="append",
1081
+ default=[],
1082
+ choices=[
1083
+ "legacy-resolver",
1084
+ "legacy-certs",
1085
+ ],
1086
+ help=("Enable deprecated functionality, that will be removed in the future."),
1087
+ )
1088
+
1089
+ ##########
1090
+ # groups #
1091
+ ##########
1092
+
1093
+ general_group: Dict[str, Any] = {
1094
+ "name": "General Options",
1095
+ "options": [
1096
+ help_,
1097
+ debug_mode,
1098
+ isolated_mode,
1099
+ require_virtualenv,
1100
+ python,
1101
+ verbose,
1102
+ version,
1103
+ quiet,
1104
+ log,
1105
+ no_input,
1106
+ keyring_provider,
1107
+ proxy,
1108
+ retries,
1109
+ timeout,
1110
+ exists_action,
1111
+ trusted_host,
1112
+ cert,
1113
+ client_cert,
1114
+ cache_dir,
1115
+ no_cache,
1116
+ disable_pip_version_check,
1117
+ no_color,
1118
+ no_python_version_warning,
1119
+ use_new_feature,
1120
+ use_deprecated_feature,
1121
+ resume_retries,
1122
+ ],
1123
+ }
1124
+
1125
+ index_group: Dict[str, Any] = {
1126
+ "name": "Package Index Options",
1127
+ "options": [
1128
+ index_url,
1129
+ extra_index_url,
1130
+ no_index,
1131
+ find_links,
1132
+ ],
1133
+ }
.venv-1/Lib/site-packages/pip/_internal/cli/command_context.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from contextlib import ExitStack, contextmanager
2
+ from typing import ContextManager, Generator, TypeVar
3
+
4
+ _T = TypeVar("_T", covariant=True)
5
+
6
+
7
+ class CommandContextMixIn:
8
+ def __init__(self) -> None:
9
+ super().__init__()
10
+ self._in_main_context = False
11
+ self._main_context = ExitStack()
12
+
13
+ @contextmanager
14
+ def main_context(self) -> Generator[None, None, None]:
15
+ assert not self._in_main_context
16
+
17
+ self._in_main_context = True
18
+ try:
19
+ with self._main_context:
20
+ yield
21
+ finally:
22
+ self._in_main_context = False
23
+
24
+ def enter_context(self, context_provider: ContextManager[_T]) -> _T:
25
+ assert self._in_main_context
26
+
27
+ return self._main_context.enter_context(context_provider)
.venv-1/Lib/site-packages/pip/_internal/cli/index_command.py ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Contains command classes which may interact with an index / the network.
3
+
4
+ Unlike its sister module, req_command, this module still uses lazy imports
5
+ so commands which don't always hit the network (e.g. list w/o --outdated or
6
+ --uptodate) don't need waste time importing PipSession and friends.
7
+ """
8
+
9
+ import logging
10
+ import os
11
+ import sys
12
+ from functools import lru_cache
13
+ from optparse import Values
14
+ from typing import TYPE_CHECKING, List, Optional
15
+
16
+ from pip._vendor import certifi
17
+
18
+ from pip._internal.cli.base_command import Command
19
+ from pip._internal.cli.command_context import CommandContextMixIn
20
+
21
+ if TYPE_CHECKING:
22
+ from ssl import SSLContext
23
+
24
+ from pip._internal.network.session import PipSession
25
+
26
+ logger = logging.getLogger(__name__)
27
+
28
+
29
+ @lru_cache
30
+ def _create_truststore_ssl_context() -> Optional["SSLContext"]:
31
+ if sys.version_info < (3, 10):
32
+ logger.debug("Disabling truststore because Python version isn't 3.10+")
33
+ return None
34
+
35
+ try:
36
+ import ssl
37
+ except ImportError:
38
+ logger.warning("Disabling truststore since ssl support is missing")
39
+ return None
40
+
41
+ try:
42
+ from pip._vendor import truststore
43
+ except ImportError:
44
+ logger.warning("Disabling truststore because platform isn't supported")
45
+ return None
46
+
47
+ ctx = truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
48
+ ctx.load_verify_locations(certifi.where())
49
+ return ctx
50
+
51
+
52
+ class SessionCommandMixin(CommandContextMixIn):
53
+ """
54
+ A class mixin for command classes needing _build_session().
55
+ """
56
+
57
+ def __init__(self) -> None:
58
+ super().__init__()
59
+ self._session: Optional[PipSession] = None
60
+
61
+ @classmethod
62
+ def _get_index_urls(cls, options: Values) -> Optional[List[str]]:
63
+ """Return a list of index urls from user-provided options."""
64
+ index_urls = []
65
+ if not getattr(options, "no_index", False):
66
+ url = getattr(options, "index_url", None)
67
+ if url:
68
+ index_urls.append(url)
69
+ urls = getattr(options, "extra_index_urls", None)
70
+ if urls:
71
+ index_urls.extend(urls)
72
+ # Return None rather than an empty list
73
+ return index_urls or None
74
+
75
+ def get_default_session(self, options: Values) -> "PipSession":
76
+ """Get a default-managed session."""
77
+ if self._session is None:
78
+ self._session = self.enter_context(self._build_session(options))
79
+ # there's no type annotation on requests.Session, so it's
80
+ # automatically ContextManager[Any] and self._session becomes Any,
81
+ # then https://github.com/python/mypy/issues/7696 kicks in
82
+ assert self._session is not None
83
+ return self._session
84
+
85
+ def _build_session(
86
+ self,
87
+ options: Values,
88
+ retries: Optional[int] = None,
89
+ timeout: Optional[int] = None,
90
+ ) -> "PipSession":
91
+ from pip._internal.network.session import PipSession
92
+
93
+ cache_dir = options.cache_dir
94
+ assert not cache_dir or os.path.isabs(cache_dir)
95
+
96
+ if "legacy-certs" not in options.deprecated_features_enabled:
97
+ ssl_context = _create_truststore_ssl_context()
98
+ else:
99
+ ssl_context = None
100
+
101
+ session = PipSession(
102
+ cache=os.path.join(cache_dir, "http-v2") if cache_dir else None,
103
+ retries=retries if retries is not None else options.retries,
104
+ trusted_hosts=options.trusted_hosts,
105
+ index_urls=self._get_index_urls(options),
106
+ ssl_context=ssl_context,
107
+ )
108
+
109
+ # Handle custom ca-bundles from the user
110
+ if options.cert:
111
+ session.verify = options.cert
112
+
113
+ # Handle SSL client certificate
114
+ if options.client_cert:
115
+ session.cert = options.client_cert
116
+
117
+ # Handle timeouts
118
+ if options.timeout or timeout:
119
+ session.timeout = timeout if timeout is not None else options.timeout
120
+
121
+ # Handle configured proxies
122
+ if options.proxy:
123
+ session.proxies = {
124
+ "http": options.proxy,
125
+ "https": options.proxy,
126
+ }
127
+ session.trust_env = False
128
+ session.pip_proxy = options.proxy
129
+
130
+ # Determine if we can prompt the user for authentication or not
131
+ session.auth.prompting = not options.no_input
132
+ session.auth.keyring_provider = options.keyring_provider
133
+
134
+ return session
135
+
136
+
137
+ def _pip_self_version_check(session: "PipSession", options: Values) -> None:
138
+ from pip._internal.self_outdated_check import pip_self_version_check as check
139
+
140
+ check(session, options)
141
+
142
+
143
+ class IndexGroupCommand(Command, SessionCommandMixin):
144
+ """
145
+ Abstract base class for commands with the index_group options.
146
+
147
+ This also corresponds to the commands that permit the pip version check.
148
+ """
149
+
150
+ def handle_pip_version_check(self, options: Values) -> None:
151
+ """
152
+ Do the pip version check if not disabled.
153
+
154
+ This overrides the default behavior of not doing the check.
155
+ """
156
+ # Make sure the index_group options are present.
157
+ assert hasattr(options, "no_index")
158
+
159
+ if options.disable_pip_version_check or options.no_index:
160
+ return
161
+
162
+ try:
163
+ # Otherwise, check if we're using the latest version of pip available.
164
+ session = self._build_session(
165
+ options,
166
+ retries=0,
167
+ timeout=min(5, options.timeout),
168
+ )
169
+ with session:
170
+ _pip_self_version_check(session, options)
171
+ except Exception:
172
+ logger.warning("There was an error checking the latest version of pip.")
173
+ logger.debug("See below for error", exc_info=True)
.venv-1/Lib/site-packages/pip/_internal/cli/main.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Primary application entrypoint."""
2
+
3
+ import locale
4
+ import logging
5
+ import os
6
+ import sys
7
+ import warnings
8
+ from typing import List, Optional
9
+
10
+ from pip._internal.cli.autocompletion import autocomplete
11
+ from pip._internal.cli.main_parser import parse_command
12
+ from pip._internal.commands import create_command
13
+ from pip._internal.exceptions import PipError
14
+ from pip._internal.utils import deprecation
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ # Do not import and use main() directly! Using it directly is actively
20
+ # discouraged by pip's maintainers. The name, location and behavior of
21
+ # this function is subject to change, so calling it directly is not
22
+ # portable across different pip versions.
23
+
24
+ # In addition, running pip in-process is unsupported and unsafe. This is
25
+ # elaborated in detail at
26
+ # https://pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program.
27
+ # That document also provides suggestions that should work for nearly
28
+ # all users that are considering importing and using main() directly.
29
+
30
+ # However, we know that certain users will still want to invoke pip
31
+ # in-process. If you understand and accept the implications of using pip
32
+ # in an unsupported manner, the best approach is to use runpy to avoid
33
+ # depending on the exact location of this entry point.
34
+
35
+ # The following example shows how to use runpy to invoke pip in that
36
+ # case:
37
+ #
38
+ # sys.argv = ["pip", your, args, here]
39
+ # runpy.run_module("pip", run_name="__main__")
40
+ #
41
+ # Note that this will exit the process after running, unlike a direct
42
+ # call to main. As it is not safe to do any processing after calling
43
+ # main, this should not be an issue in practice.
44
+
45
+
46
+ def main(args: Optional[List[str]] = None) -> int:
47
+ if args is None:
48
+ args = sys.argv[1:]
49
+
50
+ # Suppress the pkg_resources deprecation warning
51
+ # Note - we use a module of .*pkg_resources to cover
52
+ # the normal case (pip._vendor.pkg_resources) and the
53
+ # devendored case (a bare pkg_resources)
54
+ warnings.filterwarnings(
55
+ action="ignore", category=DeprecationWarning, module=".*pkg_resources"
56
+ )
57
+
58
+ # Configure our deprecation warnings to be sent through loggers
59
+ deprecation.install_warning_logger()
60
+
61
+ autocomplete()
62
+
63
+ try:
64
+ cmd_name, cmd_args = parse_command(args)
65
+ except PipError as exc:
66
+ sys.stderr.write(f"ERROR: {exc}")
67
+ sys.stderr.write(os.linesep)
68
+ sys.exit(1)
69
+
70
+ # Needed for locale.getpreferredencoding(False) to work
71
+ # in pip._internal.utils.encoding.auto_decode
72
+ try:
73
+ locale.setlocale(locale.LC_ALL, "")
74
+ except locale.Error as e:
75
+ # setlocale can apparently crash if locale are uninitialized
76
+ logger.debug("Ignoring error %s when setting locale", e)
77
+ command = create_command(cmd_name, isolated=("--isolated" in cmd_args))
78
+
79
+ return command.main(cmd_args)
.venv-1/Lib/site-packages/pip/_internal/cli/main_parser.py ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """A single place for constructing and exposing the main parser"""
2
+
3
+ import os
4
+ import subprocess
5
+ import sys
6
+ from typing import List, Optional, Tuple
7
+
8
+ from pip._internal.build_env import get_runnable_pip
9
+ from pip._internal.cli import cmdoptions
10
+ from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter
11
+ from pip._internal.commands import commands_dict, get_similar_commands
12
+ from pip._internal.exceptions import CommandError
13
+ from pip._internal.utils.misc import get_pip_version, get_prog
14
+
15
+ __all__ = ["create_main_parser", "parse_command"]
16
+
17
+
18
+ def create_main_parser() -> ConfigOptionParser:
19
+ """Creates and returns the main parser for pip's CLI"""
20
+
21
+ parser = ConfigOptionParser(
22
+ usage="\n%prog <command> [options]",
23
+ add_help_option=False,
24
+ formatter=UpdatingDefaultsHelpFormatter(),
25
+ name="global",
26
+ prog=get_prog(),
27
+ )
28
+ parser.disable_interspersed_args()
29
+
30
+ parser.version = get_pip_version()
31
+
32
+ # add the general options
33
+ gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser)
34
+ parser.add_option_group(gen_opts)
35
+
36
+ # so the help formatter knows
37
+ parser.main = True # type: ignore
38
+
39
+ # create command listing for description
40
+ description = [""] + [
41
+ f"{name:27} {command_info.summary}"
42
+ for name, command_info in commands_dict.items()
43
+ ]
44
+ parser.description = "\n".join(description)
45
+
46
+ return parser
47
+
48
+
49
+ def identify_python_interpreter(python: str) -> Optional[str]:
50
+ # If the named file exists, use it.
51
+ # If it's a directory, assume it's a virtual environment and
52
+ # look for the environment's Python executable.
53
+ if os.path.exists(python):
54
+ if os.path.isdir(python):
55
+ # bin/python for Unix, Scripts/python.exe for Windows
56
+ # Try both in case of odd cases like cygwin.
57
+ for exe in ("bin/python", "Scripts/python.exe"):
58
+ py = os.path.join(python, exe)
59
+ if os.path.exists(py):
60
+ return py
61
+ else:
62
+ return python
63
+
64
+ # Could not find the interpreter specified
65
+ return None
66
+
67
+
68
+ def parse_command(args: List[str]) -> Tuple[str, List[str]]:
69
+ parser = create_main_parser()
70
+
71
+ # Note: parser calls disable_interspersed_args(), so the result of this
72
+ # call is to split the initial args into the general options before the
73
+ # subcommand and everything else.
74
+ # For example:
75
+ # args: ['--timeout=5', 'install', '--user', 'INITools']
76
+ # general_options: ['--timeout==5']
77
+ # args_else: ['install', '--user', 'INITools']
78
+ general_options, args_else = parser.parse_args(args)
79
+
80
+ # --python
81
+ if general_options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ:
82
+ # Re-invoke pip using the specified Python interpreter
83
+ interpreter = identify_python_interpreter(general_options.python)
84
+ if interpreter is None:
85
+ raise CommandError(
86
+ f"Could not locate Python interpreter {general_options.python}"
87
+ )
88
+
89
+ pip_cmd = [
90
+ interpreter,
91
+ get_runnable_pip(),
92
+ ]
93
+ pip_cmd.extend(args)
94
+
95
+ # Set a flag so the child doesn't re-invoke itself, causing
96
+ # an infinite loop.
97
+ os.environ["_PIP_RUNNING_IN_SUBPROCESS"] = "1"
98
+ returncode = 0
99
+ try:
100
+ proc = subprocess.run(pip_cmd)
101
+ returncode = proc.returncode
102
+ except (subprocess.SubprocessError, OSError) as exc:
103
+ raise CommandError(f"Failed to run pip under {interpreter}: {exc}")
104
+ sys.exit(returncode)
105
+
106
+ # --version
107
+ if general_options.version:
108
+ sys.stdout.write(parser.version)
109
+ sys.stdout.write(os.linesep)
110
+ sys.exit()
111
+
112
+ # pip || pip help -> print_help()
113
+ if not args_else or (args_else[0] == "help" and len(args_else) == 1):
114
+ parser.print_help()
115
+ sys.exit()
116
+
117
+ # the subcommand name
118
+ cmd_name = args_else[0]
119
+
120
+ if cmd_name not in commands_dict:
121
+ guess = get_similar_commands(cmd_name)
122
+
123
+ msg = [f'unknown command "{cmd_name}"']
124
+ if guess:
125
+ msg.append(f'maybe you meant "{guess}"')
126
+
127
+ raise CommandError(" - ".join(msg))
128
+
129
+ # all the args without the subcommand
130
+ cmd_args = args[:]
131
+ cmd_args.remove(cmd_name)
132
+
133
+ return cmd_name, cmd_args