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)