From 3cfdb05db73643903d775858def8b09a567f1499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Randy=20D=C3=B6ring?= <30527984+radoering@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:17:18 +0100 Subject: [PATCH] fix for virtualenvs.create=false: GenericVenv, which is a subclass of VirtualEnv, does not necessarily have a pyvenv.cfg file --- src/poetry/utils/env/virtual_env.py | 2 +- tests/utils/test_env.py | 34 +++++++++++++++++++++++------ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/poetry/utils/env/virtual_env.py b/src/poetry/utils/env/virtual_env.py index c8a81153f66..8a573426fec 100644 --- a/src/poetry/utils/env/virtual_env.py +++ b/src/poetry/utils/env/virtual_env.py @@ -140,7 +140,7 @@ def _updated_path(self) -> str: @cached_property def includes_system_site_packages(self) -> bool: pyvenv_cfg = self._path / "pyvenv.cfg" - return ( + return pyvenv_cfg.exists() and ( re.search( r"^\s*include-system-site-packages\s*=\s*true\s*$", pyvenv_cfg.read_text(), diff --git a/tests/utils/test_env.py b/tests/utils/test_env.py index 1e5d1cc2805..28181381549 100644 --- a/tests/utils/test_env.py +++ b/tests/utils/test_env.py @@ -1373,22 +1373,39 @@ def test_venv_has_correct_paths(tmp_venv: VirtualEnv) -> None: ) -def test_env_system_packages(tmp_path: Path, poetry: Poetry) -> None: +@pytest.mark.parametrize("with_system_site_packages", [True, False]) +def test_env_system_packages( + tmp_path: Path, poetry: Poetry, with_system_site_packages: bool +) -> None: venv_path = tmp_path / "venv" pyvenv_cfg = venv_path / "pyvenv.cfg" - EnvManager(poetry).build_venv(path=venv_path, flags={"system-site-packages": True}) + EnvManager(poetry).build_venv( + path=venv_path, flags={"system-site-packages": with_system_site_packages} + ) env = VirtualEnv(venv_path) - assert "include-system-site-packages = true" in pyvenv_cfg.read_text() - assert env.includes_system_site_packages + assert ( + f"include-system-site-packages = {str(with_system_site_packages).lower()}" + in pyvenv_cfg.read_text() + ) + assert env.includes_system_site_packages is with_system_site_packages + +def test_generic_env_system_packages(poetry: Poetry) -> None: + """https://github.com/python-poetry/poetry/issues/8646""" + env = GenericEnv(Path(sys.base_prefix)) + assert not env.includes_system_site_packages + +@pytest.mark.parametrize("with_system_site_packages", [True, False]) def test_env_system_packages_are_relative_to_lib( - tmp_path: Path, poetry: Poetry + tmp_path: Path, poetry: Poetry, with_system_site_packages: bool ) -> None: venv_path = tmp_path / "venv" - EnvManager(poetry).build_venv(path=venv_path, flags={"system-site-packages": True}) + EnvManager(poetry).build_venv( + path=venv_path, flags={"system-site-packages": with_system_site_packages} + ) env = VirtualEnv(venv_path) site_dir = Path(site.getsitepackages()[-1]) for dist in metadata.distributions(): @@ -1396,7 +1413,10 @@ def test_env_system_packages_are_relative_to_lib( with contextlib.suppress(ValueError): dist._path.relative_to(site_dir) # type: ignore[attr-defined] break - assert env.is_path_relative_to_lib(dist._path) # type: ignore[attr-defined] + assert ( + env.is_path_relative_to_lib(dist._path) # type: ignore[attr-defined] + is with_system_site_packages + ) @pytest.mark.parametrize(