From 14895cfc41ef5380423b81a71c22e41ce2c059fd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 12 May 2026 04:59:33 +0000 Subject: [PATCH 1/2] Initial plan From 58603f4a2b7946db5b333787ca12b33b03a10b99 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 12 May 2026 05:02:34 +0000 Subject: [PATCH 2/2] Fix extension pip subprocess to ignore PIP_REQUIRE_VIRTUALENV Agent-Logs-Url: https://github.com/Azure/azure-cli/sessions/f6895154-19d0-4a68-9cbb-1786264d0c2d Co-authored-by: a0x1ab <59631311+a0x1ab@users.noreply.github.com> --- .../azure/cli/core/extension/operations.py | 4 +++- .../tests/latest/test_extension_commands.py | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/azure-cli-core/azure/cli/core/extension/operations.py b/src/azure-cli-core/azure/cli/core/extension/operations.py index e20aed58b03..10c73ace448 100644 --- a/src/azure-cli-core/azure/cli/core/extension/operations.py +++ b/src/azure-cli-core/azure/cli/core/extension/operations.py @@ -46,9 +46,11 @@ def _run_pip(pip_exec_args, extension_path=None): cmd = [sys.executable, '-m', 'pip'] + pip_exec_args + ['--disable-pip-version-check', '--no-cache-dir'] + env = os.environ.copy() + env.pop('PIP_REQUIRE_VIRTUALENV', None) logger.debug('Running: %s', cmd) try: - log_output = check_output(cmd, stderr=STDOUT, universal_newlines=True) + log_output = check_output(cmd, stderr=STDOUT, universal_newlines=True, env=env) logger.debug(log_output) returncode = 0 except CalledProcessError as e: diff --git a/src/azure-cli-core/azure/cli/core/extension/tests/latest/test_extension_commands.py b/src/azure-cli-core/azure/cli/core/extension/tests/latest/test_extension_commands.py index 2f81268935d..6b0b00e5529 100644 --- a/src/azure-cli-core/azure/cli/core/extension/tests/latest/test_extension_commands.py +++ b/src/azure-cli-core/azure/cli/core/extension/tests/latest/test_extension_commands.py @@ -174,6 +174,18 @@ def test_add_extension_verify_no_pip_proxy(self): if '--proxy' in pip_cmd: raise AssertionError("proxy parameter in check_output args although no proxy specified") + def test_add_extension_unset_pip_require_virtualenv(self): + extension_name = MY_EXT_NAME + computed_extension_sha256 = _compute_file_hash(MY_EXT_SOURCE) + with mock.patch.dict(os.environ, {'PIP_REQUIRE_VIRTUALENV': 'true', 'DUMMY_ENV_VAR': 'dummy-value'}), \ + mock.patch('azure.cli.core.extension.operations.resolve_from_index', return_value=(MY_EXT_SOURCE, computed_extension_sha256)), \ + mock.patch('azure.cli.core.extension.operations.shutil'), \ + mock.patch('azure.cli.core.extension.operations.check_output') as check_output: + add_extension(cmd=self.cmd, extension_name=extension_name) + kwargs = check_output.call_args[1] + self.assertNotIn('PIP_REQUIRE_VIRTUALENV', kwargs['env']) + self.assertEqual(kwargs['env'].get('DUMMY_ENV_VAR'), 'dummy-value') + def test_add_extension_with_specific_version(self): extension_name = MY_EXT_NAME extension1 = 'myfirstcliextension-0.0.3+dev-py2.py3-none-any.whl'