Merge pyodide_py into python_stdlib.zip. ### Description

Merges pyodide_py.tar into python_stdlib.zip. This reduces the number of network requests during the initialization.

The original intention of splitting pyodide_py.tar from pyodide.asm.data was to give users an option to provide custom files (#2023), which is now available by modifying python_stdlib.zip directly. So I think there is no reason to have both python_stdlib.zip and pyodide_py.tar.

### Checklists

- [x] Add a [CHANGELOG](https://github.com/pyodide/pyodide/blob/main/docs/project/changelog.md) entry
- [x] Add / update tests

from pytest_pyodide import run_in_pyodide


@run_in_pyodide(
    packages=["Pillow"],
)
def test_pillow(selenium):
    import io

    from PIL import Image, ImageDraw, ImageOps

    img = Image.new("RGB", (4, 4), color=(0, 0, 0))
    ctx = ImageDraw.Draw(img)
    ctx.line([0, 0, 3, 0, 3, 3, 0, 3, 0, 0], (255, 0, 0), 1)
    img.putpixel((1, 1), (0, 255, 0))
    img.putpixel((2, 2), (0, 0, 255))
    img = ImageOps.flip(img)

    img_bytes = b"\xff\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00"
    assert img.tobytes() == img_bytes

    extensions = {
        "jpeg": b"\xff\xd8\xff\xe0",
        "png": b"\x89PNG",
        "webp": b"RIFF",
        "tiff": b"\x49\x49\x2a\x00",
    }

    for ext, signature in extensions.items():
        with io.BytesIO() as imgfile:
            img.save(imgfile, format=ext.upper())
            _img = Image.open(imgfile)
            assert _img
            assert (
                imgfile.getvalue()[:4] == signature
            ), f"Wrong signature on image format: {ext}"


@run_in_pyodide(
    packages=["Pillow"],
)
def test_jpeg_modes(selenium):
    from PIL import Image

    rgb = Image.new("RGB", (4, 4))
    rgb.save("rgb.jpg")

    gray = Image.new("L", (4, 4))
    gray.save("gray.jpg")

    bw = Image.new("1", (4, 4))
    bw.save("bw.jpg")

from pytest_pyodide import run_in_pyodide


@run_in_pyodide(
    packages=["Pillow"],
)
def test_pillow(selenium):
    import io

    from PIL import Image, ImageDraw, ImageOps

    img = Image.new("RGB", (4, 4), color=(0, 0, 0))
    ctx = ImageDraw.Draw(img)
    ctx.line([0, 0, 3, 0, 3, 3, 0, 3, 0, 0], (255, 0, 0), 1)
    img.putpixel((1, 1), (0, 255, 0))
    img.putpixel((2, 2), (0, 0, 255))
    img = ImageOps.flip(img)

    img_bytes = b"\xff\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00\xff\x00\x00"
    assert img.tobytes() == img_bytes

    extensions = {
        "jpeg": b"\xff\xd8\xff\xe0",
        "png": b"\x89PNG",
        "webp": b"RIFF",
        "tiff": b"\x49\x49\x2a\x00",
    }

    for ext, signature in extensions.items():
        with io.BytesIO() as imgfile:
            img.save(imgfile, format=ext.upper())
            _img = Image.open(imgfile)
            assert _img
            assert (
                imgfile.getvalue()[:4] == signature
            ), f"Wrong signature on image format: {ext}"


@run_in_pyodide(
    packages=["Pillow"],
)
def test_jpeg_modes(selenium):
    from PIL import Image

    rgb = Image.new("RGB", (4, 4))
    rgb.save("rgb.jpg")

    gray = Image.new("L", (4, 4))
    gray.save("gray.jpg")

    bw = Image.new("1", (4, 4))
    bw.save("bw.jpg")
