From 79cd5998aa617f772e6b905177c93cb1f55634ec Mon Sep 17 00:00:00 2001 From: Paul Moore Date: Thu, 28 Jul 2022 12:10:50 +0100 Subject: [PATCH] Add a --python option --- src/pip/_internal/cli/cmdoptions.py | 8 ++++++++ src/pip/_internal/cli/main_parser.py | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/pip/_internal/cli/cmdoptions.py b/src/pip/_internal/cli/cmdoptions.py index 47ed92779e9..84e0e783869 100644 --- a/src/pip/_internal/cli/cmdoptions.py +++ b/src/pip/_internal/cli/cmdoptions.py @@ -189,6 +189,13 @@ class PipOption(Option): ), ) +python: Callable[..., Option] = partial( + Option, + "--python", + dest="python", + help="Run pip with the specified Python interpreter.", +) + verbose: Callable[..., Option] = partial( Option, "-v", @@ -1029,6 +1036,7 @@ def check_list_path_option(options: Values) -> None: debug_mode, isolated_mode, require_virtualenv, + python, verbose, version, quiet, diff --git a/src/pip/_internal/cli/main_parser.py b/src/pip/_internal/cli/main_parser.py index 3666ab04ca6..8a79191c8b2 100644 --- a/src/pip/_internal/cli/main_parser.py +++ b/src/pip/_internal/cli/main_parser.py @@ -2,9 +2,11 @@ """ import os +import subprocess import sys from typing import List, Tuple +from pip._internal.build_env import _get_runnable_pip from pip._internal.cli import cmdoptions from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter from pip._internal.commands import commands_dict, get_similar_commands @@ -57,6 +59,19 @@ def parse_command(args: List[str]) -> Tuple[str, List[str]]: # args_else: ['install', '--user', 'INITools'] general_options, args_else = parser.parse_args(args) + # --python + if general_options.python: + if "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ: + pip_cmd = [ + general_options.python, + _get_runnable_pip(), + ] + pip_cmd.extend(args) + # Block recursing indefinitely + os.environ["_PIP_RUNNING_IN_SUBPROCESS"] = "1" + proc = subprocess.run(pip_cmd) + sys.exit(proc.returncode) + # --version if general_options.version: sys.stdout.write(parser.version)