diff --git a/src/installer/destinations.py b/src/installer/destinations.py index d948356..f54bf19 100644 --- a/src/installer/destinations.py +++ b/src/installer/destinations.py @@ -268,7 +268,7 @@ def _compile_bytecode(self, scheme: Scheme, record: RecordEntry) -> None: for level in self.bytecode_optimization_levels: compileall.compile_file( - target_path, optimize=level, quiet=1, ddir=dir_path_to_embed + target_path, optimize=level, quiet=2, ddir=dir_path_to_embed ) def finalize_installation( diff --git a/tests/test_main.py b/tests/test_main.py index cb09b3d..e6181a5 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,4 +1,6 @@ import os +import sys +import types import pytest @@ -90,6 +92,31 @@ def test_main_no_pyc(fancy_wheel, tmp_path): assert set(installed_pyc_files) == set() +def test_main_silences_bytecode_compile_failures( + fancy_wheel, tmp_path, monkeypatch, capsys +): + calls = [] + + def fake_compile_file(*args, **kwargs): + calls.append((args, kwargs)) + if kwargs["quiet"] != 2: + sys.stderr.write("*** Error compiling test module...\n") + return False + + monkeypatch.setitem( + sys.modules, "compileall", types.SimpleNamespace(compile_file=fake_compile_file) + ) + + destdir = tmp_path / "dest" + + main([str(fancy_wheel), "-d", str(destdir)], "python -m installer") + + captured = capsys.readouterr() + assert captured.err == "" + assert calls + assert all(kwargs["quiet"] == 2 for _, kwargs in calls) + + @pytest.mark.parametrize( "validation_part", ["all", "entries", "none"],