diff options
author | chrysle <fritzihab@posteo.de> | 2023-04-28 01:36:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-27 16:36:03 -0700 |
commit | fd93dd79be89b21e6e9d43ca2dd1b02b811f6d6f (patch) | |
tree | 89c53dd6b596d5ff6da56bb814b57b735e8c8f24 /src | |
parent | 89f80b8fb18a15243d5f0b5e288f62bc86538a80 (diff) | |
download | virtualenv-fd93dd79be89b21e6e9d43ca2dd1b02b811f6d6f.tar.gz |
3.12 support and no setuptools/wheel on 3.12+ (#2558)
Diffstat (limited to 'src')
-rw-r--r-- | src/virtualenv/activation/python/__init__.py | 3 | ||||
-rw-r--r-- | src/virtualenv/seed/embed/base_embed.py | 17 | ||||
-rw-r--r-- | src/virtualenv/util/path/_sync.py | 4 |
3 files changed, 16 insertions, 8 deletions
diff --git a/src/virtualenv/activation/python/__init__.py b/src/virtualenv/activation/python/__init__.py index 28861f9..ed220dc 100644 --- a/src/virtualenv/activation/python/__init__.py +++ b/src/virtualenv/activation/python/__init__.py @@ -13,9 +13,10 @@ class PythonActivator(ViaTemplateActivator): def replacements(self, creator, dest_folder): replacements = super().replacements(creator, dest_folder) lib_folders = OrderedDict((os.path.relpath(str(i), str(dest_folder)), None) for i in creator.libs) + lib_folders = os.pathsep.join(lib_folders.keys()).replace("\\", "\\\\") # escape Windows path characters replacements.update( { - "__LIB_FOLDERS__": os.pathsep.join(lib_folders.keys()), + "__LIB_FOLDERS__": lib_folders, "__DECODE_PATH__": "", }, ) diff --git a/src/virtualenv/seed/embed/base_embed.py b/src/virtualenv/seed/embed/base_embed.py index 65f2b97..80a3364 100644 --- a/src/virtualenv/seed/embed/base_embed.py +++ b/src/virtualenv/seed/embed/base_embed.py @@ -30,18 +30,18 @@ class BaseEmbed(Seeder, metaclass=ABCMeta): self.enabled = False @classmethod - def distributions(cls): + def distributions(cls) -> dict[str, Version]: return { "pip": Version.bundle, "setuptools": Version.bundle, "wheel": Version.bundle, } - def distribution_to_versions(self): + def distribution_to_versions(self) -> dict[str, str]: return { distribution: getattr(self, f"{distribution}_version") for distribution in self.distributions() - if getattr(self, f"no_{distribution}") is False + if getattr(self, f"no_{distribution}") is False and getattr(self, f"{distribution}_version") != "none" } @classmethod @@ -71,11 +71,13 @@ class BaseEmbed(Seeder, metaclass=ABCMeta): default=[], ) for distribution, default in cls.distributions().items(): + if interpreter.version_info[:2] >= (3, 12) and distribution in {"wheel", "setuptools"}: + default = "none" parser.add_argument( f"--{distribution}", dest=distribution, metavar="version", - help=f"version of {distribution} to install as seed: embed, bundle or exact version", + help=f"version of {distribution} to install as seed: embed, bundle, none or exact version", default=default, ) for distribution in cls.distributions(): @@ -94,7 +96,7 @@ class BaseEmbed(Seeder, metaclass=ABCMeta): default=not PERIODIC_UPDATE_ON_BY_DEFAULT, ) - def __repr__(self): + def __repr__(self) -> str: result = self.__class__.__name__ result += "(" if self.extra_search_dir: @@ -103,7 +105,10 @@ class BaseEmbed(Seeder, metaclass=ABCMeta): for distribution in self.distributions(): if getattr(self, f"no_{distribution}"): continue - ver = f"={getattr(self, f'{distribution}_version', None) or 'latest'}" + version = getattr(self, f"{distribution}_version", None) + if version == "none": + continue + ver = f"={version or 'latest'}" result += f" {distribution}{ver}," return result[:-1] + ")" diff --git a/src/virtualenv/util/path/_sync.py b/src/virtualenv/util/path/_sync.py index f0e0173..a81f82b 100644 --- a/src/virtualenv/util/path/_sync.py +++ b/src/virtualenv/util/path/_sync.py @@ -3,6 +3,7 @@ from __future__ import annotations import logging import os import shutil +import sys from stat import S_IWUSR @@ -58,7 +59,8 @@ def safe_delete(dest): else: raise - shutil.rmtree(str(dest), ignore_errors=True, onerror=onerror) + kwargs = {"onexc" if sys.version_info >= (3, 12) else "onerror": onerror} + shutil.rmtree(str(dest), ignore_errors=True, **kwargs) class _Debug: |