a53777
From a5a31b5d5c4969c8148fd44d45379140b1273f87 Mon Sep 17 00:00:00 2001
a53777
From: Lumir Balhar <lbalhar@redhat.com>
a53777
Date: Tue, 19 Jan 2021 13:51:49 +0100
a53777
Subject: [PATCH] rpm wheels
a53777
a53777
---
a53777
 src/virtualenv/run/__init__.py                |  5 +++--
a53777
 src/virtualenv/seed/embed/base_embed.py       |  7 +++++-
a53777
 src/virtualenv/seed/embed/pip_invoke.py       |  1 +
a53777
 .../seed/embed/via_app_data/via_app_data.py   |  1 +
a53777
 src/virtualenv/seed/wheels/embed/__init__.py  |  3 +++
a53777
 src/virtualenv/util/path/_system_wheels.py    | 22 +++++++++++++++++++
a53777
 6 files changed, 36 insertions(+), 3 deletions(-)
a53777
 create mode 100644 src/virtualenv/util/path/_system_wheels.py
a53777
a53777
diff --git a/src/virtualenv/run/__init__.py b/src/virtualenv/run/__init__.py
a53777
index e8e7ab1..617cf67 100644
a53777
--- a/src/virtualenv/run/__init__.py
a53777
+++ b/src/virtualenv/run/__init__.py
a53777
@@ -89,8 +89,9 @@ def build_parser_only(args=None):
a53777
 
a53777
 def handle_extra_commands(options):
a53777
     if options.upgrade_embed_wheels:
a53777
-        result = manual_upgrade(options.app_data, options.env)
a53777
-        raise SystemExit(result)
a53777
+        # result = manual_upgrade(options.app_data, options.env)
a53777
+        logging.warning("virtualenv installed from the RPM package uses wheels from RPM packages as well. Updating them via virtualenv is not possible. The RPM packaged wheels are updated together with other RPM packages of the system.")
a53777
+        raise SystemExit(1)
a53777
 
a53777
 
a53777
 def load_app_data(args, parser, options):
a53777
diff --git a/src/virtualenv/seed/embed/base_embed.py b/src/virtualenv/seed/embed/base_embed.py
a53777
index c794e83..0867e9c 100644
a53777
--- a/src/virtualenv/seed/embed/base_embed.py
a53777
+++ b/src/virtualenv/seed/embed/base_embed.py
a53777
@@ -6,11 +6,12 @@ from six import add_metaclass
a53777
 
a53777
 from virtualenv.util.path import Path
a53777
 from virtualenv.util.six import ensure_str, ensure_text
a53777
+from virtualenv.util.path._system_wheels import get_system_wheels_paths
a53777
 
a53777
 from ..seeder import Seeder
a53777
 from ..wheels import Version
a53777
 
a53777
-PERIODIC_UPDATE_ON_BY_DEFAULT = True
a53777
+PERIODIC_UPDATE_ON_BY_DEFAULT = False
a53777
 
a53777
 
a53777
 @add_metaclass(ABCMeta)
a53777
@@ -116,3 +117,7 @@ class BaseEmbed(Seeder):
a53777
 
a53777
     def __repr__(self):
a53777
         return ensure_str(self.__unicode__())
a53777
+
a53777
+    def insert_system_wheels_paths(self, creator):
a53777
+        system_wheels_paths = get_system_wheels_paths(creator.interpreter.executable)
a53777
+        self.extra_search_dir = list(system_wheels_paths) + self.extra_search_dir
a53777
diff --git a/src/virtualenv/seed/embed/pip_invoke.py b/src/virtualenv/seed/embed/pip_invoke.py
a53777
index c935c02..2d9d80d 100644
a53777
--- a/src/virtualenv/seed/embed/pip_invoke.py
a53777
+++ b/src/virtualenv/seed/embed/pip_invoke.py
a53777
@@ -17,6 +17,7 @@ class PipInvoke(BaseEmbed):
a53777
     def run(self, creator):
a53777
         if not self.enabled:
a53777
             return
a53777
+        self.insert_system_wheels_paths(creator)
a53777
         for_py_version = creator.interpreter.version_release_str
a53777
         with self.get_pip_install_cmd(creator.exe, for_py_version) as cmd:
a53777
             env = pip_wheel_env_run(self.extra_search_dir, self.app_data, self.env)
a53777
diff --git a/src/virtualenv/seed/embed/via_app_data/via_app_data.py b/src/virtualenv/seed/embed/via_app_data/via_app_data.py
a53777
index 9a98a70..a0ecadf 100644
a53777
--- a/src/virtualenv/seed/embed/via_app_data/via_app_data.py
a53777
+++ b/src/virtualenv/seed/embed/via_app_data/via_app_data.py
a53777
@@ -39,6 +39,7 @@ class FromAppData(BaseEmbed):
a53777
     def run(self, creator):
a53777
         if not self.enabled:
a53777
             return
a53777
+        self.insert_system_wheels_paths(creator)
a53777
         with self._get_seed_wheels(creator) as name_to_whl:
a53777
             pip_version = name_to_whl["pip"].version_tuple if "pip" in name_to_whl else None
a53777
             installer_class = self.installer_class(pip_version)
a53777
diff --git a/src/virtualenv/seed/wheels/embed/__init__.py b/src/virtualenv/seed/wheels/embed/__init__.py
a53777
index 672d67b..bdd8864 100644
a53777
--- a/src/virtualenv/seed/wheels/embed/__init__.py
a53777
+++ b/src/virtualenv/seed/wheels/embed/__init__.py
a53777
@@ -48,8 +48,11 @@ BUNDLE_SUPPORT = {
a53777
 }
a53777
 MAX = "3.10"
a53777
 
a53777
+# Redefined here because bundled wheels are removed in RPM build
a53777
+BUNDLE_SUPPORT = None
a53777
 
a53777
 def get_embed_wheel(distribution, for_py_version):
a53777
+    return None  # BUNDLE_SUPPORT == None anyway
a53777
     path = BUNDLE_FOLDER / (BUNDLE_SUPPORT.get(for_py_version, {}) or BUNDLE_SUPPORT[MAX]).get(distribution)
a53777
     return Wheel.from_path(path)
a53777
 
a53777
diff --git a/src/virtualenv/util/path/_system_wheels.py b/src/virtualenv/util/path/_system_wheels.py
a53777
new file mode 100644
a53777
index 0000000..a968dee
a53777
--- /dev/null
a53777
+++ b/src/virtualenv/util/path/_system_wheels.py
a53777
@@ -0,0 +1,22 @@
a53777
+from subprocess import check_output, CalledProcessError
a53777
+
a53777
+from virtualenv.util.path import Path
a53777
+
a53777
+
a53777
+def get_system_wheels_paths(executable):
a53777
+    # ensurepip wheels
a53777
+    # We need subprocess here to check ensurepip with the Python we are creating
a53777
+    # a new virtual environment for
a53777
+    try:
a53777
+        ensurepip_path = check_output((executable, "-u", "-c", 'import ensurepip; print(ensurepip.__path__[0])'), universal_newlines=True)
a53777
+        ensurepip_path = Path(ensurepip_path.strip()) / "_bundled"
a53777
+    except CalledProcessError:
a53777
+        pass
a53777
+    else:
a53777
+        if ensurepip_path.is_dir():
a53777
+            yield ensurepip_path
a53777
+
a53777
+    # Standard wheels path
a53777
+    wheels_dir = Path("/usr/share/python-wheels")
a53777
+    if wheels_dir.exists():
a53777
+        yield wheels_dir
a53777
-- 
a53777
2.29.2
a53777