xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-devtools/python/python3-pip/reproducible.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1Pip installed wheels are not reproducible currently. The direct_url
2files encode an installation path and the installed wheels compile
3the python files at their location, not their final install location
4which is incorrect.
5
6To fix this, simply disable the direct_urls and pass the "root" to
7the python compile function to strip that path out of the compiled
8files.
9
10A version of this patch, perhaps stripping root from the direct_urls
11may be something that could be considered by upstream.
12
13Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
14
15Upstream-Status: Pending
16
17Index: pip-22.0.3/src/pip/_internal/req/req_install.py
18===================================================================
19--- pip-22.0.3.orig/src/pip/_internal/req/req_install.py
20+++ pip-22.0.3/src/pip/_internal/req/req_install.py
21@@ -758,7 +758,9 @@ class InstallRequirement:
22         if self.is_wheel:
23             assert self.local_file_path
24             direct_url = None
25-            if self.editable:
26+            if '_PYTHON_SYSCONFIGDATA_NAME' in os.environ:
27+                direct_url = None
28+            elif self.editable:
29                 direct_url = direct_url_for_editable(self.unpacked_source_directory)
30             elif self.original_link:
31                 direct_url = direct_url_from_link(
32@@ -775,6 +777,7 @@ class InstallRequirement:
33                 warn_script_location=warn_script_location,
34                 direct_url=direct_url,
35                 requested=self.user_supplied,
36+                root=root,
37             )
38             self.install_succeeded = True
39             return
40Index: pip-22.0.3/src/pip/_internal/operations/install/wheel.py
41===================================================================
42--- pip-22.0.3.orig/src/pip/_internal/operations/install/wheel.py
43+++ pip-22.0.3/src/pip/_internal/operations/install/wheel.py
44@@ -436,6 +436,7 @@ def _install_wheel(
45     warn_script_location: bool = True,
46     direct_url: Optional[DirectUrl] = None,
47     requested: bool = False,
48+    root: str = None,
49 ) -> None:
50     """Install a wheel.
51
52@@ -612,7 +613,7 @@ def _install_wheel(
53             with warnings.catch_warnings():
54                 warnings.filterwarnings("ignore")
55                 for path in pyc_source_file_paths():
56-                    success = compileall.compile_file(path, force=True, quiet=True)
57+                    success = compileall.compile_file(path, force=True, quiet=True, stripdir=root)
58                     if success:
59                         pyc_path = pyc_output_path(path)
60                         assert os.path.exists(pyc_path)
61@@ -723,6 +724,7 @@ def install_wheel(
62     warn_script_location: bool = True,
63     direct_url: Optional[DirectUrl] = None,
64     requested: bool = False,
65+    root: str = None,
66 ) -> None:
67     with ZipFile(wheel_path, allowZip64=True) as z:
68         with req_error_context(req_description):
69@@ -735,4 +737,5 @@ def install_wheel(
70                 warn_script_location=warn_script_location,
71                 direct_url=direct_url,
72                 requested=requested,
73+                root=root,
74             )
75