Pip installed wheels are not reproducible currently. The direct_url
files encode an installation path and the installed wheels compile
the python files at their location, not their final install location
which is incorrect.

To fix this, simply disable the direct_urls and pass the "root" to
the python compile function to strip that path out of the compiled
files.

A version of this patch, perhaps stripping root from the direct_urls
may be something that could be considered by upstream.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>

Upstream-Status: Pending

Index: pip-22.0.3/src/pip/_internal/req/req_install.py
===================================================================
--- pip-22.0.3.orig/src/pip/_internal/req/req_install.py
+++ pip-22.0.3/src/pip/_internal/req/req_install.py
@@ -758,7 +758,9 @@ class InstallRequirement:
         if self.is_wheel:
             assert self.local_file_path
             direct_url = None
-            if self.editable:
+            if '_PYTHON_SYSCONFIGDATA_NAME' in os.environ:
+                direct_url = None
+            elif self.editable:
                 direct_url = direct_url_for_editable(self.unpacked_source_directory)
             elif self.original_link:
                 direct_url = direct_url_from_link(
@@ -775,6 +777,7 @@ class InstallRequirement:
                 warn_script_location=warn_script_location,
                 direct_url=direct_url,
                 requested=self.user_supplied,
+                root=root,
             )
             self.install_succeeded = True
             return
Index: pip-22.0.3/src/pip/_internal/operations/install/wheel.py
===================================================================
--- pip-22.0.3.orig/src/pip/_internal/operations/install/wheel.py
+++ pip-22.0.3/src/pip/_internal/operations/install/wheel.py
@@ -436,6 +436,7 @@ def _install_wheel(
     warn_script_location: bool = True,
     direct_url: Optional[DirectUrl] = None,
     requested: bool = False,
+    root: str = None,
 ) -> None:
     """Install a wheel.
 
@@ -612,7 +613,7 @@ def _install_wheel(
             with warnings.catch_warnings():
                 warnings.filterwarnings("ignore")
                 for path in pyc_source_file_paths():
-                    success = compileall.compile_file(path, force=True, quiet=True)
+                    success = compileall.compile_file(path, force=True, quiet=True, stripdir=root)
                     if success:
                         pyc_path = pyc_output_path(path)
                         assert os.path.exists(pyc_path)
@@ -723,6 +724,7 @@ def install_wheel(
     warn_script_location: bool = True,
     direct_url: Optional[DirectUrl] = None,
     requested: bool = False,
+    root: str = None,
 ) -> None:
     with ZipFile(wheel_path, allowZip64=True) as z:
         with req_error_context(req_description):
@@ -735,4 +737,5 @@ def install_wheel(
                 warn_script_location=warn_script_location,
                 direct_url=direct_url,
                 requested=requested,
+                root=root,
             )
