Sign in

Henry Schreiner

@henryiii.bsky.social
180 followers 64 following 43 posts

Princeton RSE. Scikit-HEP, Scikit-build, PyPA/build, PyPA/cibuildwheel, pybind11, CLI11, & plumbum. Also on @henryiii@fosstodon.org and @henryschreiner3 (X).

PostsRepliesMedia
Henry Schreiner @henryiii.bsky.social · 14/08/2026
If you want to be involved in the Python Packaging Council elections, register to vote before August 25! I'm there, along with 16 other fantastic choices. blog.python.org/2026/08/2026... and ask me questions at discuss.python.org/t/ppc-nomina... !
blog.python.org
Announcing the Packaging Council Election Candidates for 2026! | Python Insider
Announcing the 17 nominees for the inaugural Python Packaging Council election, and how to vote in the election.
011
Henry Schreiner @henryiii.bsky.social · 05/08/2026
Packaging 26.3 is out, with ranges (huge), PEP 808 support, and tons of fixes, improved performance, etc. github.com/pypa/packagi...
github.com
Release 26.3 · pypa/packaging
What's Changed Features Add a public VersionRange API and SpecifierSet.to_range(), representing the versions a specifier set accepts as an interval set that supports intersection, union, differenc...
053
Henry Schreiner @henryiii.bsky.social · 05/08/2026
cibuildwheel 4.2.0 is out, with Python 3.15rc1 across all platforms, including pyemscripten for the first time on launch day! Time to build your binary wheels for 3.15! github.com/pypa/cibuild...
github.com
Release v4.2.0 · pypa/cibuildwheel
🌟 CPython 3.15 wheels are now built by default - without the "cpython-prerelease" enable set. It's time to build and upload these wheels to PyPI! This release includes CPython 3.15.0rc1, which is g...
163
Henry Schreiner @henryiii.bsky.social · 31/07/2026
Released CLI11 2.7, with a strong focus on hunting down and fixing bugs, modernized docs (with the old gitbook integrated in now), and better C++26 support. cliutils.github.io/CLI11/change...
cliutils.github.io
CLI11: Changelog
000
Henry Schreiner @henryiii.bsky.social · 06/07/2026
Scikit-build-core 1.0 is out! Over 90 bugs fixed, great new features (dynamic-metadata, env table, editable & rebuild improvements, force-include, and more!), and over 100 issues closed! Just in time for SIMPLE-Py next week! iscinumpy.dev/post/scikit-...
iscinumpy.dev
scikit-build-core 1.0
Scikit-build-core 1.0, the culmination of a four year project to build the best compiled code backend for Python, is out. It’s a huge release, with over 90 bugs fixed, over 40 new features, accounting...
010
Henry Schreiner @henryiii.bsky.social · 17/06/2026
Wrote a post on my (brief) experience with Claude Fable, reviewing dozens of repositories, finding hundreds of bugs, and making a few hundred PRs! iscinumpy.dev/post/claude-...
iscinumpy.dev
Claude Code Reviews with Fable
Fable came out and then disappeared a couple of days later. In that short time, I managed to run a lot of repository reviews with it, and was really happy with the results. I’ve found and fixed around...
020
Henry Schreiner @henryiii.bsky.social · 16/06/2026
If you'd like to learn about modern Python packaging (including easily shipping compiled code) from the people who work on it, we still have spots left in SIMPLE-Py! Flights and hotel are funded. You can combine it with attending SciPy 2026 if you want! www.scipy2026.scipy.org#simple-py
001
Henry Schreiner @henryiii.bsky.social · 07/06/2026
🎡 cibuildwheel 4.0 is out! 🌟 Pyemscripten (Pyodide on PyPI!) ✨ CPython 3.15(t), incl. iOS & Android 🔐 SHA256 verification 🌟 Windows auto-bundles extension DLLs (delvewheel) 🌟 abi3audit wheel auditing ⚠️ Drops Python 3.8 & much more! iscinumpy.dev/post/cibuild...
iscinumpy.dev
🎡 cibuildwheel 4.0
cibuildwheel 4.0.0 is out, with some very big additions. We’ve added pyemscripten 3.13 wheels (uploadable to PyPI!), Python 3.15 (and 3.15t) betas, and much more! We’ve got a new stage: audit, which a...
050
Henry Schreiner @henryiii.bsky.social · 04/06/2026
Plumbum 2.0 - the Python shell script helper library, is out, with async, full static typing, more pathlib API, no pywin32 dep, lazy imports, and much more! plumbum.readthedocs.io/en/latest/ch...
plumbum.readthedocs.io
Change Log - Plumbum: Shell Combinators
020
Henry Schreiner @henryiii.bsky.social · 11/05/2026
Announcing SIMPLE-Py, a two-day workshop on making compiled Python packages! It will be held alongside SciPy’s tutorial sessions July 13-14 at the University of Minnesota. We have funding for travel (to SciPy!), food, and lodging during the workshop. scikit-build.org/events/simpl...
scikit-build.org
SIMPLE-Py
Scientific Installation & Modern Packaging for Language Extensions in Python
032
Henry Schreiner @henryiii.bsky.social · 07/05/2026
My Python 3.15 what's new post is out for the just-released 3.15 beta 1! iscinumpy.dev/post/python-...
iscinumpy.dev
Python 3.15
Python 3.15 beta 1 is out! This is a really impactful release, with some really big additions. A new lazy import system, a powerful sampling profiler, not one but two new builtins, the usual color/typ...
062
Henry Schreiner @henryiii.bsky.social · 06/05/2026
Post on my exploration of agentic AI is up! Lots of examples from my 107 PRs made with some AI assistance in the last three months (out of 412). I've included model tags colored by OSS vs. Copilot models. The OpenCode screenshot does light/dark mode. :) iscinumpy.dev/post/startin...
iscinumpy.dev
Starting With Agentic AI
AI suddenly passed the “more time saved than spent” point around December 2025. A little late, I’ve finally started using agentic AI in various places over the last 2-3 months, and wanted to jot down ...
020
Henry Schreiner @henryiii.bsky.social · 28/04/2026
Packaging 26.2 is out! Quick fix for pyemscripen tags, stable and faster pickle support, and a bit of polish. This is the release in pip 26.1, which came out yesterday. It’s our last release to support Python 3.8, we’re a little behind dropping Pythons. github.com/pypa/packagi...
github.com
Release 26.2 · pypa/packaging
What's Changed Fixes: Fix incorrect sysconfig var name for pyemscripten by @ryanking13 in #1160 Make Version, Specifier, SpecifierSet, Tag, Marker, and Requirement pickle-safe and backward-compati...
010
Henry Schreiner @henryiii.bsky.social · 14/04/2026
Packaging 26.1 out! Another huge release, with lots of great stuff, like pyemscripten wheels, free-threading stable ABI, dependency-groups, direct-urls, more pylock, & key for filter. Benchmarking, property-based testing, 2x faster performance in places! github.com/pypa/packagi...
github.com
Release 26.1 · pypa/packaging
Features: PEP 783: add handling for Emscripten wheel tags by @hoodmane in #804 PEP 803: add handling for the abi3.abi3t free-threading tag by @ngoldbaum in #1099 PEP 723: add packaging.dependency_...
000
Henry Schreiner @henryiii.bsky.social · 10/04/2026
I've just released nox 2026.04.10, with --usage (full docstrings), auto-ignored `.nox` folder, and several great fixes, like auto-recreating environment if Python symlinks are broken and `-t` selecting tags from all sessions. Enjoy! github.com/wntrblm/nox/...
github.com
Release 2026.04.10 🧹 · wntrblm/nox
This release drops Python 3.8 and adds a --usage command for full docstrings. Our .nox dir is now ignored by default, virtualenvs are recreated if symlinks are broken (such as after a Python upgrad...
020
Henry Schreiner @henryiii.bsky.social · 31/01/2026
Great release of pip with 26.0! Colorful --help, --requirements-from-script, --uploaded-prior-to, and all the performance optimization work we did on packaging 26.0! New build environment option, too.
040
Henry Schreiner @henryiii.bsky.social · 21/01/2026
Packaging 26.0 is out! Hopefully in time for pip 26.0. :) github.com/pypa/packagi...
github.com
Release 26.0 · pypa/packaging
Read about the performance improvements here: https://iscinumpy.dev/post/packaging-faster. What's Changed Features: PEP 751: support pylock by @sbidoul in #900 PEP 794: import name metadata by @br...
020
Henry Schreiner @henryiii.bsky.social · 09/01/2026
On behalf of the packaging maintainers, I’d like to announce packaging 26.0rc1 is out! Please try it out, as it's a huge release. If you'd like to read about the performance work making this the fastest version of packaging ever, see my post: iscinumpy.dev/post/packagi...
iscinumpy.dev
How we made Python's packaging library 3x faster
Along with a pip (and now packaging) maintainer, Damian Shaw, I have been working on making packaging, the library behind almost all packaging related tools, faster at reading versions and specifiers,...
2248
Henry Schreiner @henryiii.bsky.social · 26/12/2025
I've written a post about my experience learning TypeScript and using AI for this year's Advent of Code (after learning Rust the last two years). iscinumpy.dev/post/aoc-2025 Merry Christmas!
iscinumpy.dev
Advent of Code 2025 in Typescript
After two years of Advent of Code in Rust, I thought I’d try TypeScript. I’ve always wanted to improve repo-review’s webapp, and that requires knowledge of the packaging systems for JavaScript, so I t...
020
Henry Schreiner @henryiii.bsky.social · 14/11/2025
Partially dynamic project metadata: peps.python.org/pep-0808
peps.python.org
PEP 808 – Partially dynamic project metadata | peps.python.org
This PEP relaxes the constraint on dynamic metadata listed in the [project] section in pyproject.toml to allow the static portion of mixed metadata to be defined in the normal location if the field is...
000
Henry Schreiner @henryiii.bsky.social · 12/11/2025
cibuildwheel 3.3 out! Fix for docker 29 changing the capitalization of the version output, but also runner customization (for iOS on GHA macos-15), manylinux_2_35 on armv7l, build[uv] support on Android, removed build-system constraints, and more! github.com/pypa/cibuild...
github.com
Release v3.3.0 · pypa/cibuildwheel
🐛 Fix an incompatibility with Docker v29 (#2660) ✨ Adds test-runtime option, to customise how tests on simulated/emulated environments are run (#2636) ✨ Adds support for new manylinux_2_35 images o...
010
Henry Schreiner @henryiii.bsky.social · 20/08/2025
I've just finished uhi 1.0, following boost-histogram 1.6 and hist 2.9, with support for serializing histograms into JSON/ZIP/HDF5. There's also a new testing helper (libraries implementing UHI can get dozens of tests with a few lines), and much more! iscinumpy.dev/post/uhi-1-0/
iscinumpy.dev
UHI 1.0: histogram serialization
UHI 1.0 is out, with a major new feature: a new histogram serialization spec! This spec supports multiple formats (HDF5, zip, and JSON initially), and can be supported by multiple libraries (Boost-his...
000
Henry Schreiner @henryiii.bsky.social · 20/08/2025
cibuildwheel π is out! (3.1.4). A few nice things, like --clean-cache, Android fixes, and new versions of things like CPython 3.14rc2. Note for iOS on GHA/Azure, you need macOS-14, Microsoft broke macOS-15 images for iOS (WRT CPython's test runner, anyway) github.com/pypa/cibuild...
github.com
Release v3.1.4 · pypa/cibuildwheel
✨ Add a --clean-cache command to clean up our cache (#2489) 🛠 Update Python to 3.14rc2 and other patch version bumps (#2542, #2556) 🛠 Update Pyodide to 0.28.2 (#2562, #2558) 🐛 Fix resolution with p...
011
Henry Schreiner @henryiii.bsky.social · 31/07/2025
PSA: You can't use `pip install -U pip` to upgrade to pip 25.2 on Windows. You have to use `python -m pip install -U pip`. That's always been better, but now the entrypoint scripts were optimized to be faster (I've wanted this for years!), Windows doesn't PIP.EXE modify itself!
000
Henry Schreiner @henryiii.bsky.social · 24/07/2025
We just released cibuildwheel 3.1, which builds Python 3.14/3.14t wheels by default (with yesterday's RC 1)! Also we added Android support, Pyodide 0.28 (3.13), 32-bit modern manylinux, riscv64 defaults, and beautiful new summaries! github.com/pypa/cibuild...
github.com
Release v3.1.0 · pypa/cibuildwheel
🌟 CPython 3.14 wheels are now built by default - without the "cpython-prerelease" enable set. It's time to build and upload these wheels to PyPI! This release includes CPython 3.14.0rc1, which is g...
110
Henry Schreiner @henryiii.bsky.social · 10/07/2025
pybind11 3.0 is out (in time for #scipy2025)! Support for Python 3.14, 3.14t, GraalPy, PyPy 3.11, and iOS have been added. smart-holder merged, native enums, multiphase init, subinterpreters (with per-interp GIL), better typing, C++23, and much more! See iscinumpy.dev/post/pybind1...
iscinumpy.dev
pybind11 3.0.0
Pybind11 3.0 has been released! I would like to highlight some of the key changes below; be sure to check out the changelog and upgrade guide for more information! This release includes an ABI bump, t...
010
Henry Schreiner @henryiii.bsky.social · 18/06/2025
I've updated my Python 3.14 post with the new additions in 3.14.0b3: free-threading is no longer experimental, and concurrent.interpreters has been added! I've added a couple of examples: iscinumpy.dev/post/python-...
iscinumpy.dev
Python π
Python π (3.14) beta 3 is out, which means the features are locked in (normally beta 1, but two additions were made exceptionally in beta 3!). The big feature this time around is template strings. The...
031
Henry Schreiner @henryiii.bsky.social · 11/06/2025
cibuildwheel 3.0 is out! New support for Python 3.14 (and 3.14t) betas, GraalPy, and iOS! New defaults, new config options, beautiful docs updates, and more! iscinumpy.dev/post/cibuild...
iscinumpy.dev
🎡 cibuildwheel 3.0
cibuildwheel 3.0.0 is out, with some very big additions. We’ve added GraalPy, Python 3.14 (and 3.14t) betas, and iOS support! We’ve got several new options: test-sources, test-environment, and (experi...
011
Henry Schreiner @henryiii.bsky.social · 13/05/2025
If you are updating for Python π (Python 3.14) and are using argparse, remember to conditionally add `color=True` and, if using choices or subcommands, `suggest_on_error=True`!
000
Henry Schreiner @henryiii.bsky.social · 08/05/2025
The beta is out, so it's time for What's new in Python π: iscinumpy.dev/post/python-... (also it's time to start adding it to CI and adding classifiers if it works!)
iscinumpy.dev
Python π
Python π (3.14) beta 1 is out, which means the features are locked in.
020
Henry Schreiner @henryiii.bsky.social · 02/05/2025
The Scientific-Python Development Guide has been updated with SPDX licenses (PEP 639) and dependency-groups (PEP 735)! There's more uv, too; the cookiecutter/copier template now sets up uv everywhere for ultra fast CI. New repo-review checks, too. learn.scientific-python.org/development/...
learn.scientific-python.org
Topical Guides
This guide is maintained by the scientific Python community for the benefit of fellow scientists and research software engineers.
021
Henry Schreiner @henryiii.bsky.social · 01/05/2025
I've just released nox 2025.05.01 with support for uv 0.7+! Lots of other small fixes and polish. Sorry for the breakage, but uv broke accessing the version of uv without warning. And you need the version of uv to know which method to use to get the version. 🤣
000
Henry Schreiner @henryiii.bsky.social · 28/03/2025
I've just released the #Python wheels for today's release of #CMake 4.0! pypi.org/project/cmake/ Remember to set your CMake minimum version to at least 3.5 (3.15 or better preferred) and set a maximum version too (newer CMake follows the policies of the maximum version) #release
pypi.org
cmake
CMake is an open-source, cross-platform family of tools designed to build, test and package software
120
Henry Schreiner @henryiii.bsky.social · 24/03/2025
If you have an issue with a dependency breaking due to setuptools 78's setup.cfg change, and you use uv, it's just: [tool.uv] build-constraint-dependencies = ["setuptools<78"] to fix. Otherwise: echo "setuptools<78" > constraints.txt PIP_CONSTRAINT=constrants.txt pip ...
120
Henry Schreiner @henryiii.bsky.social · 28/02/2025
Scikit-build-core 0.11 is out, with PEP 639 support (license expressions and files), METADATA 2.2+ as the default (supporting faster SDist metadata access for tools like uv), and quite a few smaller additions and expanded configurability. github.com/scikit-build...
github.com
Release Version 0.11.0 · scikit-build/scikit-build-core
This version adds support for PEP 639 (license expressions) and updates the default METADATA version 2.2. Support for Python 3.7 has been removed. You can use build.requires to inject build require...
020
Henry Schreiner @henryiii.bsky.social · 27/02/2025
New release of CLI11 out, the most powerful C++ CLI parser! Version 2.5 has a new formatter following UNIX standards more closely (help2man support), non-standard "-flag" opt-in support, and fixes and polish. github.com/CLIUtils/CLI...
github.com
Release Version 2.5.0: Formatter · CLIUtils/CLI11
This version add a new formatter with improved control capabilities and output aligned with standards for help output. It also add a modifier to enable use of non-standard option names. Along with ...
000
Henry Schreiner @henryiii.bsky.social · 05/02/2025
Just released repo-review 0.12, with support for adding skip reasons to configuration! Also has a new --extend-ignore CLI flag. WASM versions updated to show skip reasons: learn.scientific-python.org/development/...
learn.scientific-python.org
Repo-Review
This guide is maintained by the scientific Python community for the benefit of fellow scientists and research software engineers.
000
Henry Schreiner @henryiii.bsky.social · 25/12/2024
I just completed all 25 days of Advent of Code 2024 (Rust again this year)! #AdventOfCode adventofcode.com
adventofcode.com
Advent of Code 2024
050
Henry Schreiner @henryiii.bsky.social · 23/11/2024
I've just released cibuildwheel 2.22, with [dependency-groups] (PEP 735) support, a new simpler enable option, experimental manylinux ARMv7l support, and lots of fixes and updates! This is the final release (other than patches) before cibuildwheel 3.0! github.com/pypa/cibuild... #python
github.com
Release Version 2.22.0 · pypa/cibuildwheel
🌟 Added a new CIBW_ENABLE/enable feature that replaces CIBW_FREETHREADED_SUPPORT/free-threaded-support and CIBW_PRERELEASE_PYTHONS with a system that supports both. In cibuildwheel 3, this will als...
020