summaryrefslogtreecommitdiff
path: root/tests/unit
diff options
context:
space:
mode:
authorAnthony Sottile <asottile@umich.edu>2022-09-12 11:11:20 -0400
committerGitHub <noreply@github.com>2022-09-12 08:11:20 -0700
commit445a68dffa7ba5c0af3b02ec0545b760cd8c04ba (patch)
tree308cc8b991a4f1f0547f3c690da3688cbc9b0354 /tests/unit
parent56003ce62101c3d2cfe1a8eb82ef7defbe0d138f (diff)
downloadvirtualenv-445a68dffa7ba5c0af3b02ec0545b760cd8c04ba.tar.gz
fix building python3.10 virtualenvs on debian derivatives (#2415)
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/discovery/py_info/test_py_info.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/unit/discovery/py_info/test_py_info.py b/tests/unit/discovery/py_info/test_py_info.py
index 9d3d762..f621224 100644
--- a/tests/unit/discovery/py_info/test_py_info.py
+++ b/tests/unit/discovery/py_info/test_py_info.py
@@ -1,4 +1,5 @@
import copy
+import functools
import itertools
import json
import logging
@@ -375,3 +376,73 @@ def test_custom_venv_install_scheme_is_prefered(mocker):
pyver = f"{pyinfo.version_info.major}.{pyinfo.version_info.minor}"
assert pyinfo.install_path("scripts") == "bin"
assert pyinfo.install_path("purelib").replace(os.sep, "/") == f"lib/python{pyver}/site-packages"
+
+
+@pytest.mark.skipif(sys.version_info[:2] != (3, 10), reason="3.10 specific")
+def test_uses_posix_prefix_on_debian_3_10_without_venv(mocker):
+ # this is taken from ubuntu 22.04 /usr/lib/python3.10/sysconfig.py
+ sysconfig_install_schemes = {
+ "posix_prefix": {
+ "stdlib": "{installed_base}/{platlibdir}/python{py_version_short}",
+ "platstdlib": "{platbase}/{platlibdir}/python{py_version_short}",
+ "purelib": "{base}/lib/python{py_version_short}/site-packages",
+ "platlib": "{platbase}/{platlibdir}/python{py_version_short}/site-packages",
+ "include": "{installed_base}/include/python{py_version_short}{abiflags}",
+ "platinclude": "{installed_platbase}/include/python{py_version_short}{abiflags}",
+ "scripts": "{base}/bin",
+ "data": "{base}",
+ },
+ "posix_home": {
+ "stdlib": "{installed_base}/lib/python",
+ "platstdlib": "{base}/lib/python",
+ "purelib": "{base}/lib/python",
+ "platlib": "{base}/lib/python",
+ "include": "{installed_base}/include/python",
+ "platinclude": "{installed_base}/include/python",
+ "scripts": "{base}/bin",
+ "data": "{base}",
+ },
+ "nt": {
+ "stdlib": "{installed_base}/Lib",
+ "platstdlib": "{base}/Lib",
+ "purelib": "{base}/Lib/site-packages",
+ "platlib": "{base}/Lib/site-packages",
+ "include": "{installed_base}/Include",
+ "platinclude": "{installed_base}/Include",
+ "scripts": "{base}/Scripts",
+ "data": "{base}",
+ },
+ "deb_system": {
+ "stdlib": "{installed_base}/{platlibdir}/python{py_version_short}",
+ "platstdlib": "{platbase}/{platlibdir}/python{py_version_short}",
+ "purelib": "{base}/lib/python3/dist-packages",
+ "platlib": "{platbase}/{platlibdir}/python3/dist-packages",
+ "include": "{installed_base}/include/python{py_version_short}{abiflags}",
+ "platinclude": "{installed_platbase}/include/python{py_version_short}{abiflags}",
+ "scripts": "{base}/bin",
+ "data": "{base}",
+ },
+ "posix_local": {
+ "stdlib": "{installed_base}/{platlibdir}/python{py_version_short}",
+ "platstdlib": "{platbase}/{platlibdir}/python{py_version_short}",
+ "purelib": "{base}/local/lib/python{py_version_short}/dist-packages",
+ "platlib": "{platbase}/local/lib/python{py_version_short}/dist-packages",
+ "include": "{installed_base}/local/include/python{py_version_short}{abiflags}",
+ "platinclude": "{installed_platbase}/local/include/python{py_version_short}{abiflags}",
+ "scripts": "{base}/local/bin",
+ "data": "{base}",
+ },
+ }
+ # reset the default in case we're on a system which doesn't have this problem
+ sysconfig_get_path = functools.partial(sysconfig.get_path, scheme="posix_local")
+
+ # make it look like python3-distutils is not available
+ mocker.patch.dict(sys.modules, {"distutils.command": None})
+ mocker.patch("sysconfig._INSTALL_SCHEMES", sysconfig_install_schemes)
+ mocker.patch("sysconfig.get_path", sysconfig_get_path)
+ mocker.patch("sysconfig.get_default_scheme", return_value="posix_local")
+
+ pyinfo = PythonInfo()
+ pyver = f"{pyinfo.version_info.major}.{pyinfo.version_info.minor}"
+ assert pyinfo.install_path("scripts") == "bin"
+ assert pyinfo.install_path("purelib").replace(os.sep, "/") == f"lib/python{pyver}/site-packages"