[DEV]: add pixi.lock and add pixi to pyproject.toml#31384
[DEV]: add pixi.lock and add pixi to pyproject.toml#31384jklymak wants to merge 1 commit intomatplotlib:mainfrom
Conversation
|
.. I'm surprised the tests are running given I labelled this [ci doc] |
tools/pixi.toml
Outdated
| depends-on = ["clean-build", "dev-install"] | ||
| description = "Clean and rebuild editable install" | ||
|
|
||
| [tasks.install-test] |
There was a problem hiding this comment.
We should make features for tests + docs.
There was a problem hiding this comment.
Yes we could do it that way, but I'm not sure of the pros and cons. It did not seem there was a way to make conditional install dependencies so I wasn't sure the advantage of having separate feature envs for a developer versus just having one env.
tools/pixi.toml
Outdated
| description = "No-op on non-mac platforms" | ||
|
|
||
| [target.osx-arm64.tasks.prepare-freetype] | ||
| cmd = "cp subprojects/packagefiles/freetype-2.6.1-meson/src/gzip/zconf.h subprojects/freetype-2.6.1/src/gzip" |
There was a problem hiding this comment.
I also don't understand this, is something going wrong with unpacking the subproject? This seems like something we should be fixing in the meson files rather than here?
There was a problem hiding this comment.
I don't think it's a general problem, but it's definitely a problem on macOS with the version of zconf
There was a problem hiding this comment.
OK< I think this was not necessary, as it now works fine without it.
|
It is my understanding that if you have metadata about the build you are (or will soon be able) to point to a repo as a conda dependency and pixi-build will build the conda-package on the fly (the same way it does with pypi-deps). Given that we are going to want That said, I agree we do not want to check in the |
|
I mean add a section like |
|
Ah I see. No that didn't work as I don't think it's compatible with build isolation. |
|
OK< my comment above was incorrect. The new pixi.toml has removed the font copying things, and uses which indeed seems to be fine. Still not sure if we should run with features or just a separate install steps? |
7d73c47 to
27d86a1
Compare
aedf224 to
055029d
Compare
055029d to
85257fe
Compare
Edit: apologies for the CI churn --- I needed to iterate on the Pixi workflow to get it working end-to-end.
Overview
This PR adds Pixi configuration to
pyproject.tomland introduces a committedpixi.lock.The main goal is to provide a project-committed, pinned dependency snapshot for Matplotlib, addressing #23548. In particular:
pyproject.tomldefines the Pixi environment under[tool.pixi]pixi.lockrecords the fully resolved dependency setWhy
pyproject.tomlPixi configuration is placed in
pyproject.tomlrather than a project-levelpixi.toml.The reasoning is:
pyproject.tomlis already the canonical project configurationpixi.toml, which Pixi will prefer overpyproject.tomlThis gives the project a canonical shared configuration while still allowing personal overrides.
Lockfile policy
A main goal of this PR is to commit a pinned dependency list, and
pixi.lockis the mechanism used for that.pixi.lockshould therefore be treated as part of the repository state:pixi.lockIn that sense,
pixi.lockis the committed pinned dependency snapshot for the project.Developer workflow
Basic usage:
After that, for example:
Dependency changes:
If dependencies change, then
pixi.lockshould be regenerated. It is ignored by default in.gitignoreso developers who want to changepixi.lockwill need to regenerate it, and force add it to a commit:tools/pixi.example.tomlA template is provided for developers who want to customize their local Pixi setup.
For example:
This is intended for local experimentation or system-specific tuning. It is not the project's canonical Pixi configuration.
Key design decisions
Editable install is not managed directly by Pixi
This PR intentionally does not use:
In testing, that led to lockfile instability (
lock-file not up-to-date with the workspace), especially in CI.Instead, responsibilities are split:
pip install -e .installs Matplotlib itselfThis keeps
pixi.lockstable while still supporting editable development installs.Single environment
Although Pixi supports separate environments such as
testanddoc, this PR currently uses a single environment containing the relevant dependencies.The main reason is developer convenience:
This can be revisited later if stricter separation is desirable.
CI
This PR adds a minimal CI job that checks that the Pixi environment can be recreated from the committed lockfile.
At the moment the job is intentionally lightweight: it verifies that the lockfile works and that Matplotlib can be built/imported in that environment. It can be extended later to run tests and/or documentation builds.
Notes / future work
pixi.tomloverrides
AI disclosure
I went back and forth w/ chatGPT quite a bot on how to organize this and the various tradeoffs. It also helped with writing this summary, which is of course long-winded, but hopefully complete.