summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorchrysle <fritzihab@posteo.de>2023-04-28 01:36:03 +0200
committerGitHub <noreply@github.com>2023-04-27 16:36:03 -0700
commitfd93dd79be89b21e6e9d43ca2dd1b02b811f6d6f (patch)
tree89c53dd6b596d5ff6da56bb814b57b735e8c8f24 /src
parent89f80b8fb18a15243d5f0b5e288f62bc86538a80 (diff)
downloadvirtualenv-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__.py3
-rw-r--r--src/virtualenv/seed/embed/base_embed.py17
-rw-r--r--src/virtualenv/util/path/_sync.py4
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: