From 08ee1155e14d6ded3e784451efc8eda56a6775fb Mon Sep 17 00:00:00 2001 From: Tomas Orsava Date: Tue, 3 May 2022 17:04:39 +0200 Subject: [PATCH] Make pipenv work with the `venv` install scheme if it is detected --- news/5096.bugfix.rst | 2 ++ pipenv/environment.py | 20 +++++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 news/5096.bugfix.rst diff --git a/news/5096.bugfix.rst b/news/5096.bugfix.rst new file mode 100644 index 00000000..11e59458 --- /dev/null +++ b/news/5096.bugfix.rst @@ -0,0 +1,2 @@ +Adjust pipenv to work with the newly added ``venv`` install scheme in Python. +First check if ``venv`` is among the available install schemes, and use it if it is. Otherwise fall back to the ``nt`` or ``posix_prefix`` install schemes as before. This should produce no change for environments where the install schemes were not redefined. diff --git a/pipenv/environment.py b/pipenv/environment.py index 2261bf20..59dde74b 100644 --- a/pipenv/environment.py +++ b/pipenv/environment.py @@ -7,7 +7,7 @@ import os import site import sys from pathlib import Path -from sysconfig import get_paths, get_python_version +from sysconfig import get_paths, get_python_version, get_scheme_names import pkg_resources @@ -174,6 +174,15 @@ class Environment: return os.path.join(base, leaf) return path + @cached_property + def install_scheme(self): + if "venv" in get_scheme_names(): + return "venv" + elif os.name == "nt": + return "nt" + else: + return "posix_prefix" + @cached_property def base_paths(self): # type: () -> Dict[str, str] @@ -213,9 +222,8 @@ class Environment: try: paths = self.get_paths() except Exception: - install_scheme = "nt" if (os.name == "nt") else "posix_prefix" paths = get_paths( - install_scheme, + self.install_scheme, vars={ "base": prefix, "platbase": prefix, @@ -236,9 +244,8 @@ class Environment: paths.update(self.get_lib_paths()) paths["scripts"] = self.script_basedir if not paths: - install_scheme = "nt" if (os.name == "nt") else "posix_prefix" paths = get_paths( - install_scheme, + self.install_scheme, vars={ "base": prefix, "platbase": prefix, @@ -266,9 +273,8 @@ class Environment: # type: () -> str """Path to the environment scripts dir""" prefix = make_posix(self.prefix.as_posix()) - install_scheme = "nt" if (os.name == "nt") else "posix_prefix" paths = get_paths( - install_scheme, + self.install_scheme, vars={ "base": prefix, "platbase": prefix,