Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame^] | 1 | From 74fe171fa4a25c120607e9f8450cbdfee675c959 Mon Sep 17 00:00:00 2001 |
| 2 | From: Ross Burton <ross.burton@arm.com> |
| 3 | Date: Mon, 14 Mar 2022 14:39:22 +0000 |
| 4 | Subject: [PATCH] python3-installer: add installer module |
| 5 | |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 6 | Let us override the hashbang directly (possibly upstreamable), and don't |
| 7 | play games with hashbangs: for now assume that even hashbangs with spaces |
| 8 | are simple (assume the spaces are only used to separate arguments) and |
| 9 | we don't have long hashbangs. |
| 10 | |
| 11 | Upstream-Status: Inappropriate |
| 12 | Signed-off-by: Ross Burton <ross.burton@arm.com> |
| 13 | |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame^] | 14 | --- |
| 15 | src/installer/__main__.py | 9 ++++++++- |
| 16 | src/installer/scripts.py | 15 +-------------- |
| 17 | 2 files changed, 9 insertions(+), 15 deletions(-) |
| 18 | |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 19 | diff --git a/src/installer/__main__.py b/src/installer/__main__.py |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame^] | 20 | index 51014b9..38de286 100644 |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 21 | --- a/src/installer/__main__.py |
| 22 | +++ b/src/installer/__main__.py |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame^] | 23 | @@ -30,6 +30,13 @@ def _get_main_parser() -> argparse.ArgumentParser: |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 24 | type=str, |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame^] | 25 | help="override prefix to install packages to", |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 26 | ) |
| 27 | + parser.add_argument( |
| 28 | + "--interpreter", |
| 29 | + "-i", |
| 30 | + type=str, |
| 31 | + default=sys.executable, |
| 32 | + help=f"interpreter (defaults to {sys.executable})", |
| 33 | + ) |
| 34 | parser.add_argument( |
| 35 | "--compile-bytecode", |
| 36 | action="append", |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame^] | 37 | @@ -86,7 +93,7 @@ def _main(cli_args: Sequence[str], program: Optional[str] = None) -> None: |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 38 | with WheelFile.open(args.wheel) as source: |
| 39 | destination = SchemeDictionaryDestination( |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame^] | 40 | scheme_dict=_get_scheme_dict(source.distribution, prefix=args.prefix), |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 41 | - interpreter=sys.executable, |
| 42 | + interpreter=args.interpreter, |
| 43 | script_kind=get_launcher_kind(), |
| 44 | bytecode_optimization_levels=bytecode_levels, |
| 45 | destdir=args.destdir, |
| 46 | diff --git a/src/installer/scripts.py b/src/installer/scripts.py |
| 47 | index 7e3c8fc..ba6ed5a 100644 |
| 48 | --- a/src/installer/scripts.py |
| 49 | +++ b/src/installer/scripts.py |
| 50 | @@ -59,20 +59,7 @@ def _build_shebang(executable: str, forlauncher: bool) -> bytes: |
| 51 | https://bitbucket.org/pypa/distlib/src/58cd5c6/distlib/scripts.py#lines-124 |
| 52 | """ |
| 53 | executable_bytes = executable.encode("utf-8") |
| 54 | - if forlauncher: # The launcher can just use the command as-is. |
| 55 | - return b"#!" + executable_bytes |
| 56 | - if _is_executable_simple(executable_bytes): |
| 57 | - return b"#!" + executable_bytes |
| 58 | - |
| 59 | - # Shebang support for an executable with a space in it is under-specified |
| 60 | - # and platform-dependent, so we use a clever hack to generate a script to |
| 61 | - # run in ``/bin/sh`` that should work on all reasonably modern platforms. |
| 62 | - # Read the following message to understand how the hack works: |
| 63 | - # https://github.com/pradyunsg/installer/pull/4#issuecomment-623668717 |
| 64 | - |
| 65 | - quoted = shlex.quote(executable).encode("utf-8") |
| 66 | - # I don't understand a lick what this is trying to do. |
| 67 | - return b"#!/bin/sh\n'''exec' " + quoted + b' "$0" "$@"\n' + b"' '''" |
| 68 | + return b"#!" + executable_bytes |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame^] | 69 | |
| 70 | |
Andrew Geissler | 9aee500 | 2022-03-30 16:27:02 +0000 | [diff] [blame] | 71 | class InvalidScript(ValueError): |