From fae5d80f0a08cca3ec944d009250f217edd15725 Mon Sep 17 00:00:00 2001 From: TGRCDev Date: Thu, 23 Feb 2023 14:01:26 -0800 Subject: [PATCH] pip3: Check for EXTERNALLY-MANAGED (PEP 668) (#367) --- src/steps/generic.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/steps/generic.rs b/src/steps/generic.rs index 179b9779..4f83e3e4 100644 --- a/src/steps/generic.rs +++ b/src/steps/generic.rs @@ -333,6 +333,21 @@ pub fn run_pip3_update(run_type: RunType) -> Result<()> { .output_checked_utf8() .map_err(|_| SkipStep("pip does not exists".to_string()))?; + let check_externally_managed = "import sysconfig; from os import path; print('Y') if path.isfile(path.join(sysconfig.get_path('stdlib'), 'EXTERNALLY-MANAGED')) else print('N')"; + Command::new(&python3) + .args(["-c", check_externally_managed]) + .output_checked_utf8() + .map_err(|_| SkipStep("pip may be externally managed".to_string())) + .and_then(|output| match output.stdout.trim() { + "N" => Ok(()), + "Y" => Err(SkipStep("pip is externally managed".to_string())), + _ => { + print_warning("Unexpected output when checking EXTERNALLY-MANAGED"); + print_warning(output.stdout.trim()); + Err(SkipStep("pip may be externally managed".to_string())) + } + })?; + print_separator("pip3"); if std::env::var("VIRTUAL_ENV").is_ok() { print_warning("This step is will be skipped when running inside a virtual environment");