From: Stefano Rivera <stefanor@debian.org>
Date: Sat, 21 Mar 2020 03:16:18 -0400
Subject: Include pkg_resources when using Debian wheels

Origin: vendor
Forwarded: not-needed
Last-Update: 2021-07-20
---
 src/virtualenv/seed/embed/pip_invoke.py                |  9 ++++++++-
 src/virtualenv/seed/embed/via_app_data/via_app_data.py | 10 +++++++++-
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/virtualenv/seed/embed/pip_invoke.py b/src/virtualenv/seed/embed/pip_invoke.py
index c935c02..275330b 100644
--- a/src/virtualenv/seed/embed/pip_invoke.py
+++ b/src/virtualenv/seed/embed/pip_invoke.py
@@ -5,6 +5,7 @@ from contextlib import contextmanager
 
 from virtualenv.discovery.cached_py_info import LogCmd
 from virtualenv.seed.embed.base_embed import BaseEmbed
+from virtualenv.seed.wheels.embed import BUNDLE_FOLDER
 from virtualenv.util.subprocess import Popen
 
 from ..wheels import Version, get_wheel, pip_wheel_env_run
@@ -37,7 +38,8 @@ class PipInvoke(BaseEmbed):
         if not self.download:
             cmd.append("--no-index")
         folders = set()
-        for dist, version in self.distribution_to_versions().items():
+        dists = list(self.distribution_to_versions().items())
+        for dist, version in dists:
             wheel = get_wheel(
                 distribution=dist,
                 version=version,
@@ -52,6 +54,11 @@ class PipInvoke(BaseEmbed):
                 raise RuntimeError("could not get wheel for distribution {}".format(dist))
             folders.add(str(wheel.path.parent))
             cmd.append(Version.as_pip_req(dist, wheel.version))
+            # Debian specific: Since Debian splits out pkg_resources from
+            # setuptools, for a local virtualenv, we need to add it to the base.
+            if (dist == 'setuptools'
+                    and wheel.path.is_relative_to(BUNDLE_FOLDER)):
+                dists.append(('pkg_resources', Version.bundle))
         for folder in sorted(folders):
             cmd.extend(["--find-links", str(folder)])
         yield cmd
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
index 9a98a70..9c879cc 100644
--- a/src/virtualenv/seed/embed/via_app_data/via_app_data.py
+++ b/src/virtualenv/seed/embed/via_app_data/via_app_data.py
@@ -10,7 +10,8 @@ from threading import Lock, Thread
 
 from virtualenv.info import fs_supports_symlink
 from virtualenv.seed.embed.base_embed import BaseEmbed
-from virtualenv.seed.wheels import get_wheel
+from virtualenv.seed.wheels import Version, get_wheel
+from virtualenv.seed.wheels.embed import BUNDLE_FOLDER
 from virtualenv.util.path import Path
 
 from .pip_install.copy import CopyPipInstall
@@ -123,6 +124,13 @@ class FromAppData(BaseEmbed):
             thread.start()
         for thread in threads:
             thread.join()
+
+        # Debian specific: Since Debian splits out pkg_resources from
+        # setuptools, for a local virtualenv, we need to add it to the base.
+        if ('setuptools' in name_to_whl and
+                name_to_whl['setuptools'].path.is_relative_to(BUNDLE_FOLDER)):
+            _get('pkg_resources', Version.bundle)
+
         if fail:
             raise RuntimeError("seed failed due to failing to download wheels {}".format(", ".join(fail.keys())))
         yield name_to_whl
