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.
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
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
richon Windows 11 25H2.I'm using the latest version from the
mainbranch.