pypa / setuptools

Official project repository for the Setuptools build system
https://pypi.org/project/setuptools/
MIT License
2.34k stars 1.14k forks source link

[CI] Some editable tests seem to be unstable on new `macos-14-arm64` #4328

Open abravalheri opened 3 weeks ago

abravalheri commented 3 weeks ago

In #4327 I noticed that some editable tests fail sometimes on macos-14-arm64.

The weird part is that the output seem to indicate that part of the modules are being imported from the right location but other part is not? I don't fully understand yet.

    # test_editable_with_pyproject[strict-files1]
    # tmp_path = PosixPath('/private/var/folders/3m/p59k4qdj0f17st0gn2cmj3640000gn/T/pytest-of- 
    # runner/pytest-0/popen-gw2/test_editable_with_pyproject_s1')
    # venv = <setuptools.tests.environment.VirtualEnv object at 0x10b472210>
    # files = {'LICENSE.txt': '---- placeholder MIT license ----', 'MANIFEST.in': 'global-include 
    # *.py *.txt\nglobal-exclude *.py[co...\n[tool.setuptools.dynamic]\nreadme = {file = 
    # "README.rst"}\n\n[tool.distutils.egg_info]\ntag-build = ".post0"\n', ...}
    # editable_opts = ['--config-settings', 'editable-mode=strict']

    def test_editable_with_pyproject(tmp_path, venv, files, editable_opts):
        project = tmp_path / "mypkg"
        project.mkdir()
        jaraco.path.build(files, prefix=project)

        cmd = [
            "python",
            "-m",
            "pip",
            "install",
            "--no-build-isolation",  # required to force current version of setuptools
            "-e",
            str(project),
            *editable_opts,
        ]
        print(venv.run(cmd))

        cmd = ["python", "-m", "mypkg"]
        assert venv.run(cmd).strip() == "3.14159.post0 Hello World"

        (project / "src/mypkg/data.txt").write_text("foobar", encoding="utf-8")
        (project / "src/mypkg/mod.py").write_text("x = 42", encoding="utf-8")
>       assert venv.run(cmd).strip() == "3.14159.post0 foobar 42"
E       AssertionError: assert '3.14159.post0 foobar' == '3.14159.post0 foobar 42'
E         
E         - 3.14159.post0 foobar 42
E         ?                     ---
E         + 3.14159.post0 foobar

setuptools/tests/test_editable_install.py:150

    # TestOverallBehaviour.test_editable_install[strict-src-layout]
    # self = <setuptools.tests.test_editable_install.TestOverallBehaviour object at 0x103d52f00>
    # tmp_path = PosixPath('/private/var/folders/3m/p59k4qdj0f17st0gn2cmj3640000gn/T/pytest-of- 
    # runner/pytest-0/popen-gw0/test_editable_install_strict_s0')
    # venv = <setuptools.tests.environment.VirtualEnv object at 0x120076d20>
    # layout = 'src-layout'
    # editable_opts = ['--config-settings', 'editable-mode=strict']

    @pytest.mark.parametrize("layout", EXAMPLES.keys())
    def test_editable_install(self, tmp_path, venv, layout, editable_opts):
        project, _ = install_project(
            "mypkg", venv, tmp_path, self.EXAMPLES[layout], *editable_opts
        )

        # Ensure stray files are not importable
        cmd_import_error = """\
        try:
            import otherfile
        except ImportError as ex:
            print(ex)
        """
        out = venv.run(["python", "-c", dedent(cmd_import_error)])
        assert "No module named 'otherfile'" in out

        # Ensure the modules are importable
        cmd_get_vars = """\
        import mypkg, mypkg.mod1, mypkg.subpackage.mod2
        print(mypkg.mod1.var, mypkg.subpackage.mod2.var)
        """
        out = venv.run(["python", "-c", dedent(cmd_get_vars)])
        assert "42 13" in out

        # Ensure resources are reachable
        cmd_get_resource = """\
        import mypkg.subpackage
        from setuptools._importlib import resources as importlib_resources
        text = importlib_resources.files(mypkg.subpackage) / "resource_file.txt"
        print(text.read_text(encoding="utf-8"))
        """
        out = venv.run(["python", "-c", dedent(cmd_get_resource)])
        assert "resource 39" in out

        # Ensure files are editable
        mod1 = next(project.glob("**/mod1.py"))
        mod2 = next(project.glob("**/mod2.py"))
        resource_file = next(project.glob("**/resource_file.txt"))

        mod1.write_text("var = 17", encoding="utf-8")
        mod2.write_text("var = 781", encoding="utf-8")
        resource_file.write_text("resource 374", encoding="utf-8")

        out = venv.run(["python", "-c", dedent(cmd_get_vars)])
        assert "42 13" not in out
>       assert "17 781" in out
E       AssertionError: assert '17 781' in '42 781\n'

setuptools/tests/test_editable_install.py:945

Strict installation should be using a link farm to the files (which should be compatible with macOS).