Summary
This release fixes anylabeling-gpu, which has shipped broken since 0.4.30 (#227). It also lands a cross-platform CI test gate that prevents the next regression from hitting PyPI.
If you hit ValueError: assignment destination is read-only at startup with an older anylabeling-gpu, upgrade with:
pip install -U anylabeling-gpuWhat changed
Fixes
anylabeling-gpuis publishable again — thesetup.pyshim that renamed the package was silently rejected by PEP 621, so every GPU tag from 0.4.30 onward produced ananylabeling-*.whlPyPI rejected. The GPU workflow nowsedspyproject.tomldirectly beforepython -m buildand asserts the wheel name.- Resource regeneration scripts work again —
scripts/compile_languages.pyandscripts/generate_languages.pywere callingpyrcc5/pyrcc6, neither of which exists in PyQt6. Switched topyside6-rcc+pyside6-lreleasewith PyQt6 import rewriting.
CI
- New
.github/workflows/tests.ymlruns the unit suite on a 9-cell matrix (Ubuntu/Windows/macOS × Python 3.11/3.12/3.13). - Both PyPI publish workflows and the binary-release workflow gate on the matrix via
needs: test. A red matrix blocks the upload. - Action versions bumped (
checkout→ v4,setup-python→ v5,setup-miniconda→ v3).
Dependencies
- Floors raised to versions verified to install cleanly on every supported Python:
natsort >= 8.4.0,Pillow >= 11.0.0,termcolor >= 2.4.0,PyQt6 >= 6.7.0,osam >= 0.4.0
- Added a
huggingface_hub >= 0.24.0floor (was unconstrained). - Added
PySide6-Essentialsto the[dev]extras (only used to regenerate Qt resources).
Docs
- Added
CLAUDE.mdwith an architecture overview and a 6-step pre-publish playbook. - Rewrote
.cursorrulesto mirror it.
PyPI
anylabeling==0.4.36anylabeling-gpu==0.4.36— first working release since 0.4.29
If you find this project useful, please consider sponsoring its development.