| 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, |
| ) |