René's URL Explorer Experiment


Title: [DEV]: add pixi.lock and add pixi to pyproject.toml by jklymak · Pull Request #31384 · matplotlib/matplotlib · GitHub

Open Graph Title: [DEV]: add pixi.lock and add pixi to pyproject.toml by jklymak · Pull Request #31384 · matplotlib/matplotlib

X Title: [DEV]: add pixi.lock and add pixi to pyproject.toml by jklymak · Pull Request #31384 · matplotlib/matplotlib

Description: 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.toml and introduces a committed pixi.lock. The main goal is to provide a project-committed, pinned dependency snapshot for Matplotlib, addressing #23548. In particular: pyproject.toml defines the Pixi environment under [tool.pixi] pixi.lock records the fully resolved dependency set CI exercises that lockfile to verify that it can be used reproducibly Why pyproject.toml Pixi configuration is placed in pyproject.toml rather than a project-level pixi.toml. The reasoning is: pyproject.toml is already the canonical project configuration it keeps the shared Pixi definition attached to the project itself developers who want local customization can still create an untracked pixi.toml, which Pixi will prefer over pyproject.toml This 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.lock is the mechanism used for that. pixi.lock should therefore be treated as part of the repository state: changes to Pixi dependency inputs should be accompanied by a regenerated pixi.lock CI uses the lockfile to verify reproducibility old commits retain the dependency snapshot that was current at that point in history In that sense, pixi.lock is the committed pinned dependency snapshot for the project. Developer workflow Basic usage: pixi install pixi run python -m pip install \ --no-build-isolation \ --config-settings=setup-args="-Db_lto=false" \ --editable . After that, for example: pixi run tests-core pixi run build-doc Dependency changes: If dependencies change, then pixi.lock should be regenerated. It is ignored by default in .gitignore so developers who want to change pixi.lock will need to regenerate it, and force add it to a commit: mv pixi.toml pixi.backup pixi lock git add -f pixi.lock tools/pixi.example.toml A template is provided for developers who want to customize their local Pixi setup. For example: cp tools/pixi.example.toml pixi.toml 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: [pypi-dependencies] matplotlib = { path = ".", editable = true } In testing, that led to lockfile instability (lock-file not up-to-date with the workspace), especially in CI. Instead, responsibilities are split: Pixi manages the environment and pinned dependencies pip install -e . installs Matplotlib itself This keeps pixi.lock stable while still supporting editable development installs. Single environment Although Pixi supports separate environments such as test and doc, this PR currently uses a single environment containing the relevant dependencies. The main reason is developer convenience: avoids repeated editable installs in separate environments keeps the workflow simple still allows the lockfile to capture the relevant dependency sets 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 extend Pixi CI coverage to run more tests and build docs decide whether additional environment separation is worthwhile refine developer-facing documentation around local pixi.toml overrides 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.

Open Graph Description: 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.toml and introduces a committed pix...

X Description: 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.toml and introduces a committed pix...

Opengraph URL: https://github.com/matplotlib/matplotlib/pull/31384

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:7d737531-be64-4489-f2c1-252ec678dcf7
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-id90CE:1D5468:27CA3A9:34EE4B7:6A52149E
html-safe-noncee879ab16ced029283c2ea69120a3304e6e357d2f9e707100ddc20b0bd7974de9
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5MENFOjFENTQ2ODoyN0NBM0E5OjM0RUU0Qjc6NkE1MjE0OUUiLCJ2aXNpdG9yX2lkIjoiMjQ5MDMwNzY2MDE3NzYwOTg4NiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac2520a02e1dfdafbaf0f1ff5ecac2b891350996b73423b3ea049bc06e6457af32
hovercard-subject-tagpull_request:3447333643
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/matplotlib/matplotlib/pull/31384/files
twitter:imagehttps://avatars.githubusercontent.com/u/1562854?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/1562854?s=400&v=4
og:image:altEdit: 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.toml and introduces a committed pix...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Noneb9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git
octolytics-dimension-user_id215947
octolytics-dimension-user_loginmatplotlib
octolytics-dimension-repository_id1385122
octolytics-dimension-repository_nwomatplotlib/matplotlib
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1385122
octolytics-dimension-repository_network_root_nwomatplotlib/matplotlib
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release7aed05249554b889eb33d002851a973eebcc7e91
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/matplotlib/matplotlib/pull/31384/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmatplotlib%2Fmatplotlib%2Fpull%2F31384%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmatplotlib%2Fmatplotlib%2Fpull%2F31384%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=matplotlib%2Fmatplotlib
Reloadhttps://github.com/matplotlib/matplotlib/pull/31384/files
Reloadhttps://github.com/matplotlib/matplotlib/pull/31384/files
Reloadhttps://github.com/matplotlib/matplotlib/pull/31384/files
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
matplotlib https://github.com/matplotlib
matplotlibhttps://github.com/matplotlib/matplotlib
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
Notifications https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Fork 8.4k https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Star 23k https://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib
Code https://github.com/matplotlib/matplotlib
Issues 1.1k https://github.com/matplotlib/matplotlib/issues
Pull requests 409 https://github.com/matplotlib/matplotlib/pulls
Actions https://github.com/matplotlib/matplotlib/actions
Projects https://github.com/matplotlib/matplotlib/projects
Wiki https://github.com/matplotlib/matplotlib/wiki
Security and quality 0 https://github.com/matplotlib/matplotlib/security
Insights https://github.com/matplotlib/matplotlib/pulse
Code https://github.com/matplotlib/matplotlib
Issues https://github.com/matplotlib/matplotlib/issues
Pull requests https://github.com/matplotlib/matplotlib/pulls
Actions https://github.com/matplotlib/matplotlib/actions
Projects https://github.com/matplotlib/matplotlib/projects
Wiki https://github.com/matplotlib/matplotlib/wiki
Security and quality https://github.com/matplotlib/matplotlib/security
Insights https://github.com/matplotlib/matplotlib/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fmatplotlib%2Fmatplotlib%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fmatplotlib%2Fmatplotlib%2Fissues%2Fnew%2Fchoose
jklymakhttps://github.com/jklymak
matplotlib:mainhttps://github.com/matplotlib/matplotlib/tree/main
jklymak:dev-add-pixi-tomlhttps://github.com/jklymak/matplotlib/tree/dev-add-pixi-toml
Conversation 48 https://github.com/matplotlib/matplotlib/pull/31384
Commits 3 https://github.com/matplotlib/matplotlib/pull/31384/commits
Checks 40 https://github.com/matplotlib/matplotlib/pull/31384/checks
Files changed https://github.com/matplotlib/matplotlib/pull/31384/files
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
[DEV]: add pixi.lock and add pixi to pyproject.toml https://github.com/matplotlib/matplotlib/pull/31384/files#top
Show all changes 3 commits https://github.com/matplotlib/matplotlib/pull/31384/files
d32b629 DEV: add pixi.toml jklymak Mar 25, 2026 https://github.com/matplotlib/matplotlib/pull/31384/commits/d32b6297bbe7aa5e64cc58444ddc3e5385cbe021
093c210 TST: add test that pixi lock file is consistent with pyproject.toml [… jklymak Mar 30, 2026 https://github.com/matplotlib/matplotlib/pull/31384/commits/093c21022ca7801032aabdbf7893f2bff0081d32
176bf93 MNT: switch wheel deps to conda deps tacaswell May 22, 2026 https://github.com/matplotlib/matplotlib/pull/31384/commits/176bf93e73aada6ae8f071a645ffb059b1c7a6f3
Clear filters https://github.com/matplotlib/matplotlib/pull/31384/files
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
pixi_tests.yml https://github.com/matplotlib/matplotlib/pull/31384/files#diff-745f61a5b2df52e8f9ae08282e10a70fb2352c6bebfc9620c4faa53ee14f9410
.gitignore https://github.com/matplotlib/matplotlib/pull/31384/files#diff-bc37d034bad564583790a46f19d807abfe519c5671395fd494d8cce506c42947
development_setup.rst https://github.com/matplotlib/matplotlib/pull/31384/files#diff-870ca452b4e3141847167ef4da0a63c6cd29b73840864d3aaae790a296a97077
pixi.lock https://github.com/matplotlib/matplotlib/pull/31384/files#diff-514667ae85a632bc7477f28eb9a990559627589fb6fe88da2732569b2143afb3
pyproject.toml https://github.com/matplotlib/matplotlib/pull/31384/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
pixi.example.toml https://github.com/matplotlib/matplotlib/pull/31384/files#diff-c0504fecb816604f0f82674413e88fdb4cd4fb12904990235a8fa4c9464bf206
.github/workflows/pixi_tests.ymlhttps://github.com/matplotlib/matplotlib/pull/31384/files#diff-745f61a5b2df52e8f9ae08282e10a70fb2352c6bebfc9620c4faa53ee14f9410
View file https://github.com/matplotlib/matplotlib/blob/176bf93e73aada6ae8f071a645ffb059b1c7a6f3/.github/workflows/pixi_tests.yml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/matplotlib/matplotlib/pull/31384/{{ revealButtonHref }}
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
.gitignorehttps://github.com/matplotlib/matplotlib/pull/31384/files#diff-bc37d034bad564583790a46f19d807abfe519c5671395fd494d8cce506c42947
View file https://github.com/matplotlib/matplotlib/blob/176bf93e73aada6ae8f071a645ffb059b1c7a6f3/.gitignore
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/matplotlib/matplotlib/pull/31384/{{ revealButtonHref }}
https://github.com/matplotlib/matplotlib/pull/31384/files#diff-bc37d034bad564583790a46f19d807abfe519c5671395fd494d8cce506c42947
https://github.com/matplotlib/matplotlib/pull/31384/files#diff-bc37d034bad564583790a46f19d807abfe519c5671395fd494d8cce506c42947
doc/devel/development_setup.rsthttps://github.com/matplotlib/matplotlib/pull/31384/files#diff-870ca452b4e3141847167ef4da0a63c6cd29b73840864d3aaae790a296a97077
View file https://github.com/matplotlib/matplotlib/blob/176bf93e73aada6ae8f071a645ffb059b1c7a6f3/doc/devel/development_setup.rst
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/matplotlib/matplotlib/pull/31384/{{ revealButtonHref }}
https://github.com/matplotlib/matplotlib/pull/31384/files#diff-870ca452b4e3141847167ef4da0a63c6cd29b73840864d3aaae790a296a97077
https://github.com/matplotlib/matplotlib/pull/31384/files#diff-870ca452b4e3141847167ef4da0a63c6cd29b73840864d3aaae790a296a97077
https://github.com/matplotlib/matplotlib/pull/31384/files#diff-870ca452b4e3141847167ef4da0a63c6cd29b73840864d3aaae790a296a97077
timhoffmhttps://github.com/timhoffm
Apr 1, 2026https://github.com/matplotlib/matplotlib/pull/31384/files#r3024508752
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
jklymakhttps://github.com/jklymak
Apr 2, 2026https://github.com/matplotlib/matplotlib/pull/31384/files#r3025311518
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
timhoffmhttps://github.com/timhoffm
Apr 2, 2026https://github.com/matplotlib/matplotlib/pull/31384/files#r3025491841
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
jklymakhttps://github.com/jklymak
Apr 2, 2026https://github.com/matplotlib/matplotlib/pull/31384/files#r3029915500
Learn morehttps://docs.github.com/articles/managing-disruptive-comments/#hiding-a-comment
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
https://github.com/matplotlib/matplotlib/pull/31384/files#diff-870ca452b4e3141847167ef4da0a63c6cd29b73840864d3aaae790a296a97077
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
Please reload this pagehttps://github.com/matplotlib/matplotlib/pull/31384/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.