RustPython / RustPython/RustPython

Bug related to the RustPython `rich` vendor on Windows 11 25H2.

Open
#8,341 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

C-bug
Dominant language
Rust
Stars
22.4k
Forks
1.5k
Avg merge
16h 33m
Merged PRs (30d)
165

Description

Pillow won't compile because RustPython doesn't have complete C bindings (I know this), but this error is strange because it's not related to compilation—it's a bug related to the vendor-specific version of rich on Windows 11 25H2.

I'm using the latest version from the main branch.

C:\Windows\System32>pip install pillow
Collecting pillow
  Downloading pillow-12.3.0.tar.gz (47.0 MB)
ERROR: Exception:---------------------------- 0.0/47.0 MB ? eta -:--:--
Traceback (most recent call last):
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\cli\progress_bars.py", line 69, in _rich_download_progress_bar
    for chunk in iterable:
                 ^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\network\utils.py", line 65, in response_chunks
    for chunk in response.raw.stream(
                 ~~~~~~~~~~~~~~~~~~~^
        chunk_size,
        ^^^^^^^^^^^
    ...<22 lines>...
        decode_content=False,
        ^^^^^^^^^^^^^^^^^^^^^
    ):
    ^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\urllib3\response.py", line 1251, in stream
    data = self.read(amt=amt, decode_content=decode_content)
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\urllib3\response.py", line 1106, in read
    data = self._raw_read(amt)
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\urllib3\response.py", line 1022, in _raw_read
    data = self._fp_read(amt, read1=read1) if not fp_closed else b""
           ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\urllib3\response.py", line 1005, in _fp_read
    return self._fp.read(amt) if amt is not None else self._fp.read()
           ~~~~~~~~~~~~~^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\cachecontrol\filewrapper.py", line 100, in read
    data: bytes = self.__fp.read(amt)
                  ~~~~~~~~~~~~~~^^^^^
  File "C:\Users\Vinícius\.cargo\git\checkouts\rustpython-63090cdce5e18442\cc30cd5\Lib\http\client.py", line 484, in read
    s = self.fp.read(amt)
  File "C:\Users\Vinícius\.cargo\git\checkouts\rustpython-63090cdce5e18442\cc30cd5\Lib\socket.py", line 729, in readinto
    return self._sock.recv_into(b)
           ~~~~~~~~~~~~~~~~~~~~^^^
  File "C:\Users\Vinícius\.cargo\git\checkouts\rustpython-63090cdce5e18442\cc30cd5\Lib\ssl.py", line 1304, in recv_into
    return self.read(nbytes, buffer)
           ~~~~~~~~~^^^^^^^^^^^^^^^^
  File "C:\Users\Vinícius\.cargo\git\checkouts\rustpython-63090cdce5e18442\cc30cd5\Lib\ssl.py", line 1138, in read
    return self._sslobj.read(len, buffer)
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\cli\base_command.py", line 109, in _run_wrapper
    status = _inner_run()
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\cli\base_command.py", line 102, in _inner_run
    return self.run(options, args)
           ~~~~~~~~^^^^^^^^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\cli\req_command.py", line 101, in wrapper
    return func(self, options, args)
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\commands\install.py", line 479, in run
    requirement_set = resolver.resolve(
        reqs, check_supported_wheels=not options.target_dir
    )
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\resolution\resolvelib\resolver.py", line 99, in resolve
    result = self._result = resolver.resolve(
                            ~~~~~~~~~~~~~~~~^
        collected.requirements, max_rounds=limit_how_complex_resolution_can_be
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\resolvelib\resolvers\resolution.py", line 601, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\resolvelib\resolvers\resolution.py", line 434, in resolve
    self._add_to_criteria(self.state.criteria, r, parent=None)
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\resolvelib\resolvers\resolution.py", line 150, in _add_to_criteria
    if not criterion.candidates:
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\resolvelib\structs.py", line 194, in __bool__
    return bool(self._sequence)
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 165, in __bool__
    self._bool = any(self)
                 ~~~^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 149, in <genexpr>
    return (c for c in iterator if id(c) not in self._incompatible_ids)
                       ^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 39, in _iter_built
    candidate = func()
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 182, in _make_candidate_from_link
    base: BaseCandidate | None = self._make_base_candidate_from_link(
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        link, template, name, version
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 228, in _make_base_candidate_from_link
    self._link_candidate_cache[link] = LinkCandidate(
                                       ~~~~~~~~~~~~~^
        link,
        ^^^^^
    ...<3 lines>...
        version=version,
        ^^^^^^^^^^^^^^^^
    )
    ^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 326, in __init__
    super().__init__(
    ~~~~~~~~~~~~~~~~^
        link=link,
        ^^^^^^^^^^
    ...<4 lines>...
        version=version,
        ^^^^^^^^^^^^^^^^
    )
    ^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 168, in __init__
    self.dist = self._prepare()
                ~~~~~~~~~~~~~^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 246, in _prepare
    dist = self._prepare_distribution()
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 337, in _prepare_distribution
    return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\operations\prepare.py", line 542, in prepare_linked_requirement
    return self._prepare_linked_requirement(req, parallel_builds)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\operations\prepare.py", line 613, in _prepare_linked_requirement
    local_file = unpack_url(
        link,
    ...<4 lines>...
        hashes,
    )
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\operations\prepare.py", line 180, in unpack_url
    file = get_http_url(
        link,
    ...<2 lines>...
        hashes=hashes,
    )
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\operations\prepare.py", line 121, in get_http_url
    from_path, content_type = download(link, temp_dir.path)
                              ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\network\download.py", line 193, in __call__
    self._process_response(download, resp)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\network\download.py", line 210, in _process_response
    for chunk in chunks:
                 ^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_internal\cli\progress_bars.py", line 68, in _rich_download_progress_bar
    with progress:
         ^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\rich\progress.py", line 1189, in __exit__
    self.stop()
    ~~~~~~~~~^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\rich\progress.py", line 1175, in stop
    self.live.stop()
    ~~~~~~~~~~~~~~^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\rich\live.py", line 162, in stop
    with self.console:
         ^^^^^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\rich\console.py", line 870, in __exit__
    self._exit_buffer()
    ~~~~~~~~~~~~~~~~~^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\rich\console.py", line 826, in _exit_buffer
    self._check_buffer()
    ~~~~~~~~~~~~~~~~~~^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\rich\console.py", line 2038, in _check_buffer
    self._write_buffer()
    ~~~~~~~~~~~~~~~~~~^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\rich\console.py", line 2074, in _write_buffer
    legacy_windows_render(buffer, LegacyWindowsTerm(self.file))
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\rich\_windows_renderer.py", line 53, in legacy_windows_render
    term.erase_line()
    ~~~~~~~~~~~~~~~^^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\rich\_win32_console.py", line 460, in erase_line
    FillConsoleOutputCharacter(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^
        self._handle, " ", length=cells_to_erase, start=start_coordinates
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "C:\Users\Vinícius\.cargo\bin\Lib\site-packages\pip\_vendor\rich\_win32_console.py", line 148, in FillConsoleOutputCharacter
    _FillConsoleOutputCharacterW(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        std_handle,
        ^^^^^^^^^^^
    ...<3 lines>...
        byref(num_written),
        ^^^^^^^^^^^^^^^^^^^
    )
    ^
TypeError: Unsupported argument type

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce pip install pillow on Windows 11 25H2 using the main branch, then trace the failure from pip/_internal/cli/progress_bars.py into the vendored rich files shown in the stack trace, especially _win32_console.py. Done means the reported download interruption no longer ends with the unsupported argument type error.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, rust
Domain
cli, compilers, operating-systems
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.