Skip to content

The "pixi can help here" advisory 1.3 ​

Outside pixi projects, PyPilot watches for walls that pip and uv cannot climb and conda-forge can. When it finds one it says so, explains why, and points at pypilot migrate-to-pixi. It only suggests; nothing changes until you run the migration.

What triggers it ​

All signals come from data the engine already has; no extra network calls.

  1. A dependency with no installable wheel here (sdist only, no files for this platform, or no wheel for the environment's Python) that conda-forge builds for this platform. The conda-forge table is curated to packages whose source build needs more than a compiler: system libraries, Fortran, nvcc, or a very long compile. About 190 packages, from GDAL, cartopy and fiona to dlib, faiss, flash-attn and pymol.
  2. A failed pip/uv build whose output names a missing header, *-config tool, pkg-config module or shared library. The table maps those names to the conda-forge package that provides them.
  3. CUDA sources (.cu, .cuh) in the repository and no nvcc on PATH, CUDA_HOME or CUDA_PATH.
  4. A repository that mixes Python with R, Rust or CMake/Meson C++ (Info only).

Nothing here runs in a pixi project; its own checks cover it.

What it looks like ​

requirements.txt with gdal, numpy and requests on Windows:

text
PyPilot doctor: C:\src\geo
  package manager : Auto

── Environment ──────────────────────────────────────────
  uv              : present (v0.13.5, on PATH)
  virtualenv      : none
  interpreters    : 3.15 (python3), 3.14 (C:\Python314\python.exe)
  data tables     : refreshed 3 hours ago (next in 6 days); 1 of 5 bundled

── Project ──────────────────────────────────────────────
  files           : requirements.txt
  dependencies    : gdal, numpy, requests

── Compatibility ────────────────────────────────────────
  supported Python: 3.12–3.15
  recommended     : Python 3.15
    • GDAL                 3.8–3.15 (sdist only)
    • numpy                3.12–3.15
    • requests             3.10–3.15

── Findings ─────────────────────────────────────────────
  [WARN ] GDAL 3.13.3 needs native libraries pip cannot install
          GDAL 3.13.3 has no wheel for Windows x64, so pip and uv build it from source. GDAL's Python bindings must be compiled against a system GDAL of exactly the same version (gdal-config), which pip cannot install. pixi installs gdal 3.13.3 from conda-forge with its native libraries (libgdal, proj, geos), built for win-64 and Python 3.15. Run `pypilot migrate-to-pixi` to set the project up with pixi.
  [WARN ] No environment set up yet
          Dependencies support Python 3.12–3.15. Recommended: 3.15 (upper bound set by numpy, which supports 3.12–3.15).

pypilot check shows the same reasoning for one package, with the conda-forge alternative:

~/src/geo
$ pypilot check gdal
PyPilot check: GDAL (v3.13.3)
── Package Details ──────────────────────────────────────
  supported Python  : 3.8–3.15
  requires-python   : >=3.8.0
  wheels            : none for this platform, will compile from source
  installed         : no
── Verdict ──────────────────────────────────────────────
  [INFO ] This project has no virtual environment yet. Python 3.15 would suit it.
  why               : no wheel for Windows x64: pip and uv build it from source
  why               : source build: GDAL's Python bindings must be compiled against a system GDAL of exactly the same version (gdal-config), which pip cannot install.
  alternatives      : conda-forge: gdal 3.13.3 available for win-64/python 3.15 → pypilot migrate-to-pixi

check always shows the alternative when the verdict is a failure; add --suggest-alternatives to see it for a package that passes too.

In the editor ​

With notifications = "all", or when the finding is a warning, the workspace notification gains an Initialize pixi project button. The engine handles it the same way in Zed and VS Code: it runs a dry run, shows one message with what pixi.toml would contain (Python, the number of conda-forge and PyPI dependencies; pyproject.toml and requirements.txt stay as they are) and offers Write and install, Write pixi.toml or Cancel. Nothing is written before you choose. The same message follows the button on the toast after a pip/uv build fails on a system library conda-forge ships. The VS Code palette command works differently (full preview first); see From the editor.

Where the data comes from ​

helper/data/conda_forge_packages.json is generated by scripts/gen_conda_forge.py from prefix.dev and parselmouth (the PyPI-to-conda name mapping). For each package it records the conda-forge name, version, the platforms and Pythons it is built for, the system libraries it bundles and why the source build is hard. Like every data table it is refreshed from main on installed engines; see Data tables.

Engine: AGPL-3.0-or-later. Zed and VS Code extensions: Apache-2.0. pypilot-cli: AGPL-3.0-or-later.